目录
一、DCL
1.权限级别
Global Level 所有库,所有表的权限
Database Level 某个数据库中的所有表的权限
Table Level 库中的某个表的权限
Column Level 表中的某个字段的权限
2.MySQL用户管理
创建用户
mysql> create user user1 @'localhost' identified by 'Qian@1234'; Query OK, 0 rows affected (0.02 sec) create 创建(关键字) user 用户(关键字) user1 用户名称(自定义) @ 分隔符(关键字) 'localhost' 允许登录的主机 identified by 身份认证(关键字) 'Qian@1234' 用户密码
删除用户
mysql> drop user 'user1'@'localhost';
修改用户密码
- root修改自己的密码
方法一:在数据库外修改密码
前面是旧密码,后面是新密码 [root@localhost ~]# mysqladmin -uroot -p'Qian@123' password 'Qian@12345'
方法二:在数据库内修改密码
//新建用户设置密码 mysql> create user root@'localhost' identified by '密码'; //已有用户修改密码 mysql> alter user root@'localhost' identified by '密码'; //在mysql数据库里的user表中,改自己的密码 mysql> set password = password ('新密码'); //修改其他用户的密码 mysql> set password for '用户名'@'localhost或者%' =password('密码'); //刷新权限 mysql> flush privileges;
- 丢失root用户密码
当root用户忘记了密码,可以使用破解的方式来登录系统,修改密码,式系统在启动时,不加载密码文件。
//修改MySQL启动设置 [root@localhost ~]# vim /etc/my.cnf [mysqld] skip-grant-tables [root@localhost ~]# systemctl restart mysqld //重启MySQL [root@localhost ~]#mysql -uroot //无密码登录 //更新用户密码 mysql> update MySQL.user set authentication_string=password('密码') where user='root'; //刷新权限 mysql> flush privileges; //修改MySQL启动设置,注释掉skip-grant-tables
登录MySQL
[root@localhost ~]# mysql -P 3306 -uroot -p'Qian@12345' mysql -e 'show tables'; -P mysql服务器端口 [默认3306] -u 指定用户名 [默认root] -p 指定登录密码 [默认为空密码] 此处MySQL为指定登录的数据库 -e 接SQL语句
3.MySQL权限管理
语法格式:
grant 权限列表 on 库名.表名 to '用户名'@'客户端主机' [identified by '密码' with optior参数];
- 权限列表
all 所有权限(不包括授权权限)
select,update 查询更新
- 数据库.表名
*.* 所有库下的所有表
web.* web库下的所有表
web.stu_info web库下的stu_info表
例:grant SELECT (id),INSERT (name,age) ON mydb.mytbl to 'user8'@'localhost' identified by 'QianFeng@123';
- 客户端主机
localhost 主机名
- with_option参数
GRANT OPTION 授权选项
4.MySQL权限示例
赋予权限
- 授权目标
例:授予admin3对bbs库所有的表,具有所有的权限(不包含授权)
mysql> GRANT ALL ON bbs.* TO admin3@'localhost' identified by 'QianFeng@123'; mysql> select user,host from mysql.user;
- 赋权示例
//准备测试帐号 mysql> CREATE USER admin3@'%' identified by 'Qian@123'; //授权帐号 mysql> CREATE ALL ON bbs.* TO admin3@'%' identified by 'Qian@123'; //使用测试账户操作数据库 [root@localhost ~]# mysql -uadmin3 -p'Qian@123' mysql> crate database bbs; 进入bbs库,创建数据表和插入数据,授权验证完毕,别的库会报错
回收权限
- 查看权限
//查看自己的权限 mysql> show grants\G; //查看别人的权限 mysql> show grants for admin3@'%'\G;
- 回收权限REVOKE
语法: REVOKE 权限列表 ON 数据库名 FROM 用户名@'客户端主机'
示例:REVOKE ALL PRIVIEGES ON bbs.* FROM admin3@'%';//回收所有权限
- 删除用户的版本问题
5.6之前,先REVOKE ALL PRIVILEGE 再DROP USER
5.7之后,直接DROP USER
二、日志
1.日志分类
- 错误日志:启动,停止,关闭失败报错。rpm安装日志位置/var/log/mysqld.log
- 通用查询日志:所有的查询都记下来
- 二进制日志:实现备份,增量备份。只记录改变数据,除了select都记
- 中继日志:读取主服务器的binlog,在本地回放。保持一致
- slow log:慢查询日志,指导调优,定义某一个查询语句,定义超时时间,通过日志提供调优建议给开发人员
- DDL log:定义语句的日志
2.Erro Log
vim /etc/my.cnf //进入主配置日志,观察日志是否启动
log-error=/var/log/mysqld.log //该字段,标记是否启动日志,以及日志位置
//如果哪天mysql服务起不来了,来这个日志文件看看
3.Binary Log
默认没有开启,二进制日志
启动二进制日志
vim /etc/my.cnf log_bin //添加该字段,指启动二进制日志 server-id=2 //集群问题,必须指定该主机的序号,数字随意 systemctl restart mysqld //重启数据库
测试
//查看二进制日志文件当前状态 ls /var/lib/mysql/*bin* //查询二进制文件生成完成 mysqlbinlog -v /var/lib/mysql/localhost-bin.000001 //查看二进制文件日志 at 123 //找到一个记录位置 进入数据库,进行数据操作,创库,创表,创数据 完成二进制日志启动,查询测试 mysqlbinlog -v /var/lib/mysql/localhost-bin.000001 //找到刚才创建的记录即可
4.Slow Query Log
默认慢查询日志未开启
//开启慢查询日志功能 vim /etc/my.cnf 加入下面两行配置 slow_query_log=1 log_query_time=3 systemctl restart mysqld //重启数据库 //查看慢查询日志文件 ll /var/lib/mysql/*slow* //查看日志文件已经生成 //模拟慢查询 mysql> select benchmark(500000000,2*3); //基本测试语句,测试一个超长时间的查询 //验证慢查询日志 tail /var/lib/mysql/localhost-slow.log //管擦和长查询日志,记录了刚才超长的查询结果