binlog_format(binlog的记录格式)参数影响
(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模式的对比
STATEMENT:可读性较高,日志量少,但是不够严谨
ROW :可读性很低,日志量大,足够严谨
update t1 set xxx=xxx where id>1000 ? -->一共500w行,row模式怎么记录的日志
--逐行记录
#为什么row模式严谨?id name intime
insert into t1 values(1,'zs',now())
我们建议使用:row记录模式
/service/mysql/data
-rw-r----- 1 mysql mysql 177 3月 4 20:02 mysql-bin.000001
-rw-r----- 1 mysql mysql 201 3月 4 20:07 mysql-bin.000002
-rw-r----- 1 mysql mysql 445 3月 4 20:20 mysql-bin.000003
-rw-r----- 1 mysql mysql 177 3月 4 20:20 mysql-bin.000004
-rw-r----- 1 mysql mysql 691154 3月 9 21:22 mysql-bin.000005
-rw-r----- 1 mysql mysql 177 3月 10 10:44 mysql-bin.000006
-rw-r----- 1 mysql mysql 177 3月 10 10:45 mysql-bin.000007
-rw-r----- 1 mysql mysql 154 3月 10 10:45 mysql-bin.000008
-rw-r----- 1 mysql mysql 296 3月 10 10:45 mysql-bin.index
mysql> mysql> show master status;+------------------+----------+--------------+------------------+-------------------+|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000008|154||||+------------------+----------+--------------+------------------+-------------------+
5.3.3
3. 查看二进制事件
mysql> show binlog events in'mysql-bin.000008';+------------------+-----+----------------+-----------+-------------+---------------------------------------+|Log_name|Pos|Event_type|Server_id|End_log_pos|Info|+------------------+-----+----------------+-----------+-------------+---------------------------------------+| mysql-bin.000008|4|Format_desc|6|123|Server ver:5.7.28-log,Binlog ver:4|| mysql-bin.000008|123|Previous_gtids|6|154||+------------------+-----+----------------+-----------+-------------+---------------------------------------+#例子:
mysql> use world
mysql>begin;
mysql> delete from city where id=10;
mysql> commit;
mysql> show binlog events in'mysql-bin.000008';+------------------+-----+----------------+-----------+-------------+---------------------------------------+|Log_name|Pos|Event_type|Server_id|End_log_pos|Info|+------------------+-----+----------------+-----------+-------------+---------------------------------------+| mysql-bin.000008|4|Format_desc|6|123|Server ver:5.7.28-log,Binlog ver:4|| mysql-bin.000008|123|Previous_gtids|6|154||| mysql-bin.000008|154|Anonymous_Gtid|6|219|SET@@SESSION.GTID_NEXT='ANONYMOUS'|| mysql-bin.000008|219|Query|6|292|BEGIN|| mysql-bin.000008|292|Table_map|6|350| table_id:108(world.city)|| mysql-bin.000008|350|Delete_rows|6|420| table_id:108 flags:STMT_END_F|| mysql-bin.000008|420|Xid|6|451|COMMIT/* xid=15*/|+------------------+-----+----------------+-----------+-------------+---------------------------------------+Log_name:binlog文件名
Pos:开始的position *****Event_type:事件类型
Format_desc:格式描述,每一个日志文件的第一个事件,多用户没有意义,MySQL识别binlog必要信息
Server_id:mysql服务号标识
End_log_pos:事件的结束位置号 *****Info:事件内容*****
补充:SHOWBINLOGEVENTS[IN'log_name'][FROM pos][LIMIT[offset,] row_count][root@db01 binlog]# mysql -e "show binlog events in 'mysql-bin.000004'" |grep drop
5.4 binlog文件内容详细查看
[root@db01 data]# mysqlbinlog mysql-bin.000008 >/tmp/a.sql[root@db01 data]# vim /tmp/a.sql #针对于DDL:
上一个at和下一个at之间的内容
# at 292/*!\C utf8 *//*!*/;SET@@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;SET@@session.lc_time_names=0/*!*/;SET@@session.collation_database=DEFAULT/*!*/;#针对于DML:# at 292#210310 11:01:48 server id 6 end_log_pos 350 CRC32 0x8393069d Table_map: `world`.`city` mapped to number 108# at 350#210310 11:01:48 server id 6 end_log_pos 420 CRC32 0xe3c95c9a Delete_rows: table id 108 flags: STMT_END_FBINLOG '
nDZIYBMGAAAAOgAAAF4BAAAAAGwAAAAAAAEABXdvcmxkAARjaXR5AAUD/v7+Awb+af4J/jwAnQaT
gw==
nDZIYCAGAAAARgAAAKQBAAAAAGwAAAAAAAEAAgAF/+AKAAAAB1RpbGJ1cmcDTkxEDU5vb3JkLUJyYWJhbnTW8gIAmlzJ4w==
'/*!*/;# at 420#210310 11:01:54 server id 6 end_log_pos 451 CRC32 0xa18a8a54 Xid = 15COMMIT/*!*/;[root@db02 data]# mysqlbinlog --base64-output=decode-rows -vvv mysql-bin.000008 >/tmp/b.sql[root@db02 data]# vim /tmp/b.sql
/service/mysql/bin/mysqld, Version: 5.7.28-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /service/mysql/mysql.sock
Time Id Command Argument
~
#可自己自行测试查看分析