1. 普通日志
(1)介绍
默认是关闭的. 可以记录MySQL中发生过的所有操作日志.一般用来调试.
(2)如何配置
general_log = ON
general_log_file = /data/3306/db01.log
(3)作用
审计 调试
2. 错误日志
(1)作用
记录mysql从启动以来,所有的状态,警告,错误
为我们定位数据库问题,提供帮助
(2)配置方法
默认:开启状态
位置:/data/mysql/hostname.err 主机名.err ;
查看数据目录位置:mysql> select @@datadir;
修改错误日志存放的位置:
在配置文件里:log_error=/tmp/mysql.log
重启生效:/etc/init.d/mysql restart
注意:目录必须其他要有,子文件不能重复,并且要有mysql权限
(3)怎么看错误日志
当启动数据库失败时:
Vim /tmp/mysql.log
找error
3. binlog日志
(1)作用
主要记录数据库变化(DDL DCL DML)
数据恢复,主从复制中应用
(2)如何配置
默认:8.0版本以前,没有开启 ,我们建议生产开启
配置过程:说明:一定要和数据盘分开
Mkdir -p /data/binlog
Chown -R mysql.mysql /data/*
vim etc/my.cnf
server_id=6
log_bin=/data/binlog/mysql-bin
sync_binlog=1
binlog_format=row
配置文件介绍:
server_id=6 #主机编号。主从中使用,5.7以后开binlog要加此参数
log_bin=/data/binlog/mysql-bin #日志存放目录+日志名前缀,例如:
mysql-bin.000001 mysql-bin.000002
sync_binlog=1 # binlog日志刷盘策略,双一中的第二个1。每次事务提交立即刷写binlog到盘。
重启生效:
# /etc/init.d/mysqld restart
(3)binlog记录了什么?
1> 引入
binlog是SQL层的功能。记录的是变更SQL语句,不记录查询语句。
2> 记录SQL语句种类
DDL :原封不动的记录当前DDL(statement语句方式)。
DCL :原封不动的记录当前DCL(statement语句方式)。
以上2个写什么 记录什么
DML :只记录已经提交的事务DML(install ,updata ,delete)
3> 三种记录方式
1)statement(5.6默认)SBR(statement based replication) :语句模式原封不动的记录当前DML。
2)ROW(5.7 默认值) RBR (ROW based replication) :记录数据行的变化(用户看不懂,需要工具分析)
3)mixed(混合)MBR (mixed based replication)模式 :以上两种模式的混合
SBR与RBR模式的对比:
SBR:可读性较高,日志量少,但是不够严谨
RBR:可读性很低,日志量大,足够严谨
(4)event(事件)是什么?
1> 事件的简介
二进制日志的最小记录单元是事件
对于DDL,DCL,一个语句就是一个event
对于DML语句来讲:记录事务的整个生命周期包括:Bing–语句–commit三个
2> event的组成
三部分构成: position号:
(1) 事件的开始标识 begin 120 - 340
(2) 事件内容 DML 340 - 460
(3) 事件的结束标识 commit 460-550
Position号是在每个过程后面,是为了数据恢复
开始begin标识: at 194
结束commit标识: end_log_pos 254
194? 254?
某个事件在binlog中的相对位置号
(5) binlog的查看
1> 查看日志的开启情况
Select @@log_bin;查看是否开启1开启
Select @@log_bin_basename;位置
2> 文件查看
[root@db01 binlog]# ll /data/binlog/
mysql-bin.000001
mysql-bin.index 存到当前日志的日志点
3> 二进制日志内置查看命令
(1)查看目前库有几个日志文件
mysql> show binary logs;
只用新出来的日志,喜新厌旧
(2)查看当前在用的binlog
mysql> show master status;
(3)查看二进制日志事件 。
mysql> show binlog events in 'mysql-bin.000001';
只关注Query 下面的即可
POS:是开始Position号 end_log_bin:是Position结束号
DML语句是从begin到commit是一个事务
(6)binlog 文件内容查看及数据恢复
1)事件查看
查看 drop的日志
Mysql -u root -p 123 -e “show binlog events in ‘mysql-bin.00001’” | grep DROP
2)内容查看
[root@db01 binlog]# mysqlbinlog mysql-bin.000001 >/tmp/a.sql
Mysql 专门提供了工具mysqlbinlog 将日志导出到/tmp 目录下
[root@db01 binlog]# vim /tmp/a.sql
(7)Binlog 的GTID模式管理
1)GTID介绍
5.6版本新加的特性, 5.7 8.0 中做了加强
5.6中不开启,没有这个功能
5.7 中的GTID ,即使不开也会自动生成
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'
2)GTID(Glodal Transaction ID)
Gtid是一个已提交事务的编号,并且是一个全局唯一的编号,主要是保证主从一致性
他的官方定义如下:
Gtid=server_id+ 事务id
GTID=server_uuid : transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:29
3)重要参数介绍
开启GTID 生产中已经开启
vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
以上2给是开启gtid是必须的
systemctl restart mysqld
查看GTID :
Select @@gtid_mode; 查看是否开启 on开启
Show master status; 查看有几个gtid号,冒号后面就是gtif个数
Show binlog events in ‘mysql-bin.000001’;
4)基于gtid截取binlog日志
具备gtid后,截取查看某些事务日志:
–include-gtids 需要的gtid
–exclude–gtids 排除不需要的gtid
–skip-gtids .跳过导出文件gtid的记录.
5)GTID的幂等性
开启GTID后, binlog 就具有幂等性,MySQL恢复Binlog时,截取的binlg日志里就有gtid号,会导致恢复不了,所以在截取时要加–skip-gtids;跳过gtid,截出来的日志中就没有gtid号,这样才能恢复数据
就想恢复?怎么办?
因为截取的日志里有gtid,所有恢复不成功,所以要跳过–skip-gtids;
完整代码:
mysqlbinlog --skip-gtids--include-gtids=
"2721a770-bc8e-11ed-b313-000c2924155e:3-8"
mysql-bin.000002 mysql-bin.000003 mysql-bin.000004mysql-bin.000005 >/tmp/gtid1.sql
set sql_log_bin=0;
source /tmp/binlog.sql
Set sql_log_bin=1;
查看uuid:Select @@server_uuid;
如果删除了uuid会在系统启动时自动生成uuid
4 slowlog 慢日志
(1)作用
记录mysql运行过程中较慢的语句,通过一个文本的文件记录下来
帮助我们进行语句优化工具日志。
(2)如何配置
默认慢日志没有开启
配置参数:
select @@slow_query_log;[ˈkwɪəri]查询是否开启 0 是关闭, 1是开启
Select @@slow_query_log_file; 文件存放位置
慢语句认定的时间:就是超过多长时间算慢
Select @@long_query_time; 秒 (一般设置1秒)
查看不走索引的语句:0关闭–打开后会把不走索引的语句记录下来
Select @@log_queries_not_using_indexes;
开启慢日志:
Vim /etc/my.cnf
slow_query_log=1
slow_query_log_file= /data/3306/db01-slow.log
long_query_time=1
log_queries_not_using_indexes=1
(3)慢语句分析
Linux中清空文件:> 文件名;
MySQL给我们提供了专用的工具 mysqldumpslow
查看慢语句:
Mysqldumpslow -s c -t 5 /data/3306/db01-slow.log
-s 排序 -c 次数 -t 查看几行
将语句取出来进行desc,查看他的执行计划从而进行优化
工具:Pt-query-digest + Amemometer 工具可以写简历:可视化展示慢语句