第一节:
binlog配置:
注意:MySQL默认是没有开启二进制日志的。
基础参数查看:
开关:
[(none)]>select @@log_bin;
日志路径及名字
[(none)]>select @@log_bin_basename;
服务ID号:
[(none)]>select @@server_id;
二进制日志格式:
[(none)]>select @@binlog_format;
双一标准之二:
[(none)]>select @@sync_binlog;
binlog
1、作用:
配合备份,恢复数据的日志,它是主从复制的前提
2、配置参数
server_id=8
log_bin=/data/binlog/mysql-bin
这个参数先创建好,一定记得给授权
binlog_format=row #记录二进制的格式,主要是针对变量语句,行的模式
server_id=3306
主要是在主从复制过程中必须要加的,但是在5.7版本中,要用以下参数(log_bin),开启binlog日志,即使是单机也是必加的
log_bin=/data/binlog/mysql-bin
(1)开启二进制日志功能
(2)设置二进制日志目录及名称前缀
binlog_format=row
binlog的记录格式??
3、事件event
二进制日志记录的最小单元
开始position 位置号
结束position 位置号
Position:
开始标识: at 194
结束标识: end_log_pos 254
194? 254?
某个事件在binlog中的相对位置号,位置号的作用是什么?
为了方便我们截取事件,主要截取二进制日志
对于DDL,DCL,一个语句就是一个event
对于DML语句来讲:只记录已提交的事务。
4、记录什么语句
DDL:原封不动的记录当前DDL(statement语句方式)。
DCL:原封不动的记录当前DDL(statement语句方式)。
DML:ROW 模式
row 和语句模式的优缺点
statement:可读性较高,日志量少,但是不够严谨
row:行模式,行的变化,记录数据比较准确,可读性很低,日志量大,足够严谨
5、日志查看
show binary logs 查看一共多少个binlog
show master status 查看mysql正在使用的日志文件
show binlog enents in ‘xxx’ 查看当前事件来截取二进制 的启点和终点
enents 又扩展到了form 和limit 来查询
可以更快速的过滤
mysql -e "show binlog enents in ‘xxx’ form limit"
mysqlbinlog -d --start-position --stop-position --start-datetime --stop-datetime
--base64-output=decode-rows -vvv
Master [binlog]>show binlog events in 'mysql-bin.000003';
+------------------+-----+----------------+-----------+-------------+----------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+----------------------------------------+
| mysql-bin.000003 | 4 | Format_desc | 6 | 123 | Server ver: 5.7.20-log, Binlog ver: 4 |
| mysql-bin.000003 | 123 | Previous_gtids | 6 | 154 | |
| mysql-bin.000003 | 154 | Anonymous_Gtid | 6 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000003 | 219 | Query | 6 | 319 | create database binlog |
| mysql-bin.000003 | 319 | Anonymous_Gtid | 6 | 384 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql-bin.000003 | 384 | Query | 6 | 486 | use `binlog`; create table t1 (id int) |
+------------------+-----+----------------+-----------+-------------+--------------------------------------
Log_name:binlog文件名
Pos:开始的position *****
Event_type:事件类型
Format_desc:格式描述,每一个日志文件的第一个事件,多用户没有意义,MySQL识别binlog必要信息
Server_id:mysql服务号标识
End_log_pos:事件的结束位置号 *****
Info:事件内容*****
补充:
SHOW BINLOG EVENTS
[IN 'log_name']
[FROM pos]
[LIMIT [offset,] row_count]
[root@db01 binlog]# mysql -e "show binlog events in 'mysql-bin.000004'" |grep drop
6、截取日志
重点就是启点和终点
[root@db01 binlog]# mysqlbinlog --start-datetime='2020-12-26 17:00:00' --stop-datetime='2020-12-26 17:01:00' /data/binlog/mysql-bin.000004
7、用gtid截取二进制日志,当日志量比较大的时候用gtid比较方便
重要参数介绍:
vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
systemctl restart mysqld
基于GTID进行查看binlog
具备GTID后,截取查看某些事务日志:
--include-gtids
--exclude-gtids
mysqlbinlog --include-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:1-6'
--exclude-gtids='dff98809-55c3-11e9-a58b-000c2928f5dd:4' /data/binlog/mysql-bin.000004