1. MySQL用户基础操作

  1. 增:
  2. mysql> create user oldboy@'10.0.0.%' identified by '123';
  3. 查:
  4. mysql> desc mysql.user; ----> authentication_string
  5. mysql> select user ,host ,authentication_string from mysql.user
  6. 改:
  7. mysql> alter user oldboy@'10.0.0.%' identified by '456';
  8. 删:
  9. mysql> drop user oldboy@'10.0.0.%';

2. 在MySQL中,用户是如何定义的?

  1. '用户名'@'主机域'<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. 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’; 单列级别
脱敏:脱离敏感信息

权限作用范围:

  1. *.* ---->管理员用户
  2. wordpress.* ---->开发和应用用户
  3. wordpress.t1

查看授权

  1. show grants for app@'10.0.0.%';

回收权限

  1. revoke delete on app.* from app@'10.0.0.%'

常用权限介绍:

  1. ALL:
  2. 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 TABLESPACE
  3. ALL : 以上所有权限,一般是普通管理员拥有的
  4. with grant option:超级管理员才具备的,给别的用户授权的功能

需求1:windows机器的navicat登录到linux中的MySQL,管理员用户。

  1. mysql> grant all on *.* to root@'10.0.0.%' identified by '123';

需求2:创建一个应用用户app用户,能从windows上登录mysql,并能操作app库

  1. mysql> grant select ,update,insert,delete on app.* to app@'10.0.0.%' identified by '123';

4.1 企业中权限设定

开发:请给我开一个用户?
1.你要什么权限?
2.你要针对哪个库,哪个表?
3.对用户名?
4.密码?
5.一定要发邮件

开发让你给root用户? ————>不给,让老大给

实验思考问题:

  1. #创建wordpress数据库
  2. create database wordpress;
  3. #使用wordpress库
  4. use wordpress;
  5. #创建t1、t2表
  6. create table t1 (id int);
  7. create table t2 (id int);
  8. #创建blog库
  9. create database blog;
  10. #使用blog库
  11. use blog;
  12. #创建t1表
  13. create table tb1 (id int);

授权:

  1. 1grant select on *.* to wordpress@10.0.0.5%’ identified by 123’;
  2. wordpress@'10.0.0.5%'用户查询所有库,所有表的权限,密码是 123
  3. 2grant insert,delete,update on wordpress.* to wordpress@10.0.0.5%’ identified by 123’;
  4. wordpress@'10.0.0.5%'用户插入,删除,修改 针对wordpress库下的所有表 密码是123
  5. 3grant all on wordpress.t1 to wordpress@10.0.0.5%’ identified by 123’;
  6. wordpress@'10.0.0.5%'用户所有权限针对wordpress库下的t1 密码是123

问答:

  1. 一个客户端程序使用wordpress用户登陆到10.0.0.51MySQL后,
  2. 1、对t1表的管理能力? all
  3. 2、对t2表的管理能力? select insert,delete,update 增删改查
  4. 3、对tb1表的管理能力? select

权限总结:
1、如果在不同级别都包含某个表的管理能力时,权限是相加关系。
2、但是我们不推荐在多级别定义重复权限。
3、最常用的权限设定方式是单库级别授权,即:wordpress.*
4、如果涉及到用户的敏感信息,需要做脱敏,单列级别授权 即:select(列名) 单库.单表

5. MySQL的连接管理

  1. 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. 1./etc/init.d/mysqld start
  2. 2.systemctl start mysqld
  3. 3.mysqld_safe --defaults-file=/etc/my.cnf &

socket文件:只有在MySQL启动之后,才存在

关闭命令:

  1. 1./etc/init.d/mysqld stop
  2. 2.systemctl stop mysqld
  3. 3.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中设置的值。

思考:

  1. #cmake:
  2. socket=/application/mysql/tmp/mysql.sock
  3. #命令行:
  4. --socket=/tmp/mysql.sock
  5. #配置文件:
  6. /etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock
  7. #default参数:
  8. --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