DCL
一:主要用于授予或收回访问数据库的权限!权限级别主要有四个
1. Global level :所有库,所有表的权限
2. Database level:某个数据库中的所有权限
3 .Table level:数据库中的某个表的权限
4. Column level:表中的某个字段的权限
二:MYSQL用户管理
1:创建用户:CREATE USER dabai@'localhost' IDENTIFIED BY 'QianFeng@123456';
CREATE创建,关键字 USER 用户(关键字)‘localhost’ 允许登录的主机,这里可以换成%等,%表示所有的主机都可以登录 user1用户名@分隔符(关键字) IDENTIFIED BY 身份认证(关键字)‘DaBai@123456’ 用户密码 注意关键字不区分大小写,既可以大写也可以小写,但是关键字必不可少,不可以不写,否则就是语法错误。
create user dabai@'localhost' identified by 'DaBai@123456' #创建一个用户,用户名为user1,只允许本地登录,密码是DaBai@123456
FLUSH PRIVILEGES; #刷新权限
select * from mysql.user; #查看mysql.user用户表,查看刚刚创建的user1用户是否创建成功,由于内容太多,建议将内容复制下来,粘贴在记事本中看更方便
2:删除用户:
DROP USER 'dabai'@'localhost'; #删除用户dabai
select user from mysql.user; #查询用户表中user字段的用户中是否还有dabai用户
3:修改用户密码,
mysql> set password=password('DaBai@123456'); #在mysql中修改密码,不需要原有密码
[root@localhost etc]# mysqladmin -uroot -p'DaBai@123456' password 'DaBai@123' #在liunx中修改mysql用户密码,需要密码
丢失用户密码进行破解
①:修改mysql启动设置,vim /etc/my.cnf, 找到[mysqld]这一行,写入skip-grant-tables,意思是跳过权限表
②:重启mysql服务,[root@localhost etc]# systemctl restart mysqld,这时候就可以无密码登录mysql了
③:mysql> update mysql.user set authentication_string=password('DaBai@123456') where user='root' and host='localhost';
这个修改密码方式不需要用户原先密码,set password虽然也可以不要原先密码修改密码,但是开启skip-grant-tables之后就不能够使用了。
④:退出mysql,进入/etc/my.cnf把添加的skip-grant-tables注释掉,这样在登录就需要输入密码了,保证数据库的安全。
4:登录MySQL
mysql -P 3306 -u root -p123 mysql -e ‘show tables’ -h 指定主机名 [默认为localhost]
-P MySQL服务器端口 [默认3306]大P -u指定用户名,默认root -p指定登录密码 -e接sql语句
示例:免登陆查询数据库 mysql -uroot -p'DaBai@123456' -hlocalhost -P 3306 mysql -e 'show tables'
三:MYSQL权限
grant 权限列表 on 库名.表名 to '用户名'@'允许访问的客户端主机范围' [identified by '密码' with option参数];
1:权限列表 all所有权限不包括授权权限 select,update,delete 查询,更新,删除权限,除此还有其他权限。
2:库名.表名 *.* 所有库下的所有表 web.*web库下的所有表 web.dabai web库下的dabai表 SELECT (id), INSERT (name,age) 列权限,查找id列,插入name,age列。
with_option参数 with GRANT OPTION 授权选项,使该用户具备给其他用户授权的权限,慎用
3:赋予权限
授权目标:授予admin3用户 对bbs库 所有的表,具有所有权限(不包含授权)GRANT all ON bbs.* TO dabai@'%' ;
这时候使用admin3用户就可以对bbs库下的所有表进行操作,如果没有bbs库就可以自己创建bbs库。:4:
4:查看权限
查看自己的权限:SHOW GRANTS;
查看别人的权限:SHOW GRANTS FOR 用户名@'允许访问的客户端主机范围';
5:回收权限
REVOKE 权限列表 ON 数据库名 FROM 用户名@‘允许访问的客户端主机范围’;
REVOKE ALL PRIVILEGES ON bbs.* FROM dabai@’%’; //回收所有权限
日志
一、日志分类:
1 错误日志 :启动,停止,关闭失败报错。rpm安装日志位置 /var/log/mysqld.log
2 通用查询日志:所有的查询都记下来。
3 二进制日志:实现备份,增量备份。只记录改变数据,除了select都记。
4 中继日志:读取主服务器的binlog,在本地回放。保持一致。
5 slow log:慢查询日志,指导调优,定义某一个查询语句,定义超时时间,通过日志提供调优建议给开发人员。
6 DDL log: 定义语句的日志。
二、Error Log
进入主配置文件,观察日志是否启动:vim /etc/my.cnf;log-error=/var/log/mysqld.log 该字段,标记是否启动日志,以及日志位置。如果哪天mysql服务起不来了,请来这个日志文件看看。
三、Binary Log
默认没有开启,二进制日志,启动二进制日志实在/etc/my.cnf中的[mysqld] 下面写入两行命令,log_bin添加该命令。指启动二进制日志,二进制日志开始记录。server-id=2 群集问题,必须指定该主机的序号。数字随意,保存在配置文件中的修改,重启mysqld
systemctl restart mysqld ;ls /var/lib/mysql/*bin* 查询二进制文件是否生成。mysqlbinlog -v /var/lib/mysql/localhost-bin.000001 查看二进制文件日志,二进制文件会进行日志轮转,自动切割,要查看最新的日志需要查看比000001数字大的二进制文件。
四、Slow Query Log
默认慢查询日志未开启,首先我们需要开启慢日志查询, vim /etc/my.cnf;在[mysqld]下面写入两行命令,slow_query_log=1 启动慢查询日志 ;long_query_time=3 当SQL语句执行时间超过此数值时,就会被记录到日志中,建议设置为1或者更短。
systemctl restart mysqld 重启服务器 ;ll /var/lib/mysql/*slow* 查看慢查询日志文件
进入数据库,模拟慢查询:mysql>SELECT BENCHMARK(500000000,2*3);基本测试语句,测试一个超长时间的查询。
验证慢查询日志:tail /var/lib/mysql/localhost-slow.log 观察长查询日志记录,记录了刚才超长的查询结果。