1. MySQL用户基础操作
增:mysql> create user oldboy@'10.0.0.%' identified by '123';查:mysql> desc mysql.user; ----> authentication_stringmysql> select user ,host ,authentication_string from mysql.user改:mysql> alter user oldboy@'10.0.0.%' identified by '456';删:mysql> drop user oldboy@'10.0.0.%';
2. 在MySQL中,用户是如何定义的?
'用户名'@'主机域'<br /> localhost<br /> 127.0.0.1<br /> 10.0.0.%<br /> 10.0.%.%<br /> 10.%.%.%<br /> %<br /> 10.0.0.5% (10.0.0.50-59 10.0.0.5)<br /> db01<br /> ::1<br /> 10.0.0.0/255.255.255.0
3. MySQL中修改密码的方式
1.mysqladmin -uroot -p123 password '1'<br /> 2.update mysql.user set password=password('123') where user='root' and host='localhost';<br /> 3.set password=password('1'); 修改当前用户的密码<br /> 4.grant all on _._ to 'root'@'localhost' identified by '123';
3.1 忘记root密码
1.停止MySQL
[root@db01 data]# /etc/init.d/mysqld stop
2.跳过授权表,安全启动
[root@db01 data]# mysqld_safe —skip-grant-tables —skip-networking &
3.连接数据库
[root@db01 data]# mysql
4.update修改密码
mysql> update mysql.user set password=password(‘567’) where user=’root’ and host=’localhost’;
5.刷新授权表
mysql> flush privileges;
6.重启数据库
[root@db01 data]# /etc/init.d/mysqld restart
7.使用新密码链接数据库
[root@db01 data]# mysql -uroot -p567
4. 用户权限介绍
权限操作:
grant all on . to oldboy@’10.0.0.%’ identified by ‘123’;
授权命令 所有权限 在 所有库.所有表 上面 给 用户名@主机域 密码
grant select,update,insert mysql.* 单库
mysql.user 单表
grant select(user,host) on mysql.user to ptuser@’%’ identified by ‘123’; 单列级别
脱敏:脱离敏感信息
权限作用范围:
*.* ---->管理员用户wordpress.* ---->开发和应用用户wordpress.t1
查看授权
show grants for app@'10.0.0.%';
回收权限
revoke delete on app.* from app@'10.0.0.%';
常用权限介绍:
ALL:SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACEALL : 以上所有权限,一般是普通管理员拥有的with grant option:超级管理员才具备的,给别的用户授权的功能
需求1:windows机器的navicat登录到linux中的MySQL,管理员用户。
mysql> grant all on *.* to root@'10.0.0.%' identified by '123';
需求2:创建一个应用用户app用户,能从windows上登录mysql,并能操作app库
mysql> grant select ,update,insert,delete on app.* to app@'10.0.0.%' identified by '123';
4.1 企业中权限设定
开发:请给我开一个用户?
1.你要什么权限?
2.你要针对哪个库,哪个表?
3.对用户名?
4.密码?
5.一定要发邮件
开发让你给root用户? ————>不给,让老大给
实验思考问题:
#创建wordpress数据库create database wordpress;#使用wordpress库use wordpress;#创建t1、t2表create table t1 (id int);create table t2 (id int);#创建blog库create database blog;#使用blog库use blog;#创建t1表create table tb1 (id int);
授权:
1、grant select on *.* to wordpress@’10.0.0.5%’ identified by ‘123’;给wordpress@'10.0.0.5%'用户查询所有库,所有表的权限,密码是 1232、grant insert,delete,update on wordpress.* to wordpress@’10.0.0.5%’ identified by ‘123’;给wordpress@'10.0.0.5%'用户插入,删除,修改 针对wordpress库下的所有表 密码是1233、grant all on wordpress.t1 to wordpress@’10.0.0.5%’ identified by ‘123’;给wordpress@'10.0.0.5%'用户所有权限针对wordpress库下的t1表 密码是123
问答:
一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后,1、对t1表的管理能力? all2、对t2表的管理能力? select insert,delete,update 增删改查3、对tb1表的管理能力? select
权限总结:
1、如果在不同级别都包含某个表的管理能力时,权限是相加关系。
2、但是我们不推荐在多级别定义重复权限。
3、最常用的权限设定方式是单库级别授权,即:wordpress.*
4、如果涉及到用户的敏感信息,需要做脱敏,单列级别授权 即:select(列名) 单库.单表
5. MySQL的连接管理
mysql<br /> -u: 指定用户 mysql -uroot<br /> -p: 指定密码 mysql -uroot -p567<br /> -h: 指定主机域 mysql -uroot -p567 -h127.0.0.1<br /> -P: 指定端口 mysql -uroot -p567 -h127.0.0.1 -P3307<br /> -S: 指定socket文件 mysql -uroot -p567 -S /tmp/mysql.sock<br /> -e: 指定SQL语句(库外执行SQL语句) mysql -uroot -p567 -e "show databases;"
—protocol: 指定协议???? mysql —protocol=TCP —protocol=socket
5.1 MySQL启动停止的命令
启动命令:
1./etc/init.d/mysqld start2.systemctl start mysqld3.mysqld_safe --defaults-file=/etc/my.cnf &
socket文件:只有在MySQL启动之后,才存在
关闭命令:
1./etc/init.d/mysqld stop2.systemctl stop mysqld3.mysqladmin -uroot -p123 shutdown
不要使用的关闭命令:
kill -9 pid ?
killall mysqld ?
pkill mysqld ?
出现问题:
- 1、如果在业务繁忙的情况下,数据库不会释放pid和sock文件
- 2、号称可以达到和Oracle一样的安全性,但是并不能100%达到
- 3、在业务繁忙的情况下,丢数据(补救措施,高可用)
5.2 配置文件读取顺序
/etc/my.cnf
/etc/mysql/my.cnf
$basedir/my.cnf(前提是在环境变量中定义了MYSQL_HOME变量)
defaults-extra-file (类似include)
~/my.cnf
如果使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了 —defaults-file=<配置文件的绝对路径>参数,这时只会使用这个参数指定的配置文件。
defaults-file=#, 只读取指定的文件(不再读取其他配置文件)
-defaults-extra-file=#,从其他优先级更高的配置文件中读取全局配置后,再读取指定的配置文件。
(注意):假设4个配置文件都存在,也使用了—defaults-extra-file指定了参数文件,如果这时有一个
“参数变量”在5个配置文件中都出现了,那么后面的配置文件中的参数变量值 会 覆盖前面配置文件中的参数变量值,就是说会使用~/.my.cnf中设置的值。
思考:
#cmake:socket=/application/mysql/tmp/mysql.sock#命令行:--socket=/tmp/mysql.sock#配置文件:/etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock#default参数:--defaults-file=/tmp/a.txt配置文件中[mysqld]标签下:socket=/tmp/test.sock
socket文件会生成在哪???文件名叫什么???
总结:
MySQL启动的优先级
命令行 >> defaults-file >> ~/.my.cnf >> defaults-extra-file >> $basedir/my.cnf >> /etc/mysql/my.cnf >> /etc/my.cnf >> cmake
MySQL的配置文件的功能:
影响服务端的启动
影响客户端的连接
1.客户端程序也是受到配置文件的影响 [mysql] && [client]
2.修改完客户端的配置,不需要重启
3.修改完服务端的配置,必须重启,才能生效 [mysqld] && [server]
优先级结论:
1、命令行
2、defaults-file
3、配置文件
4、预编译
2.初始化配置文件的使用
初始化配置文件功能
1)影响实例的启动(mysqld)
2)影响到客户端
mysql
mysqldump
mysqladmin
如何配置初始化配置文件
1)配置标签分类
[client]所有客户端程序
mysql
mysqldump
…
[server]所有服务器程序
mysqld
mysqld_safe
…
