1.能否同时解析多个binlog?2.innodb_buffer_pool_instances的合适设置是什么?其次,当我们以这种方式解析binlog时$mysqlbinlog-vvv--base64-output=decode-rows--start-position=4--stop-position=2000binlog.000001binlog.000002它的工作原理是这样的:指定binlog停止位置的参数只对最后一个binlog文件有效(指定起始位置对第一个文件有效);之前的binlog文件完全解析;如果没有匹配的stop-position,它会去最接近value的位置;如果同时指定多次start-position或stop-position,以最后指定的为准;如果指定的stop-position超出了binlog的最大范围,会发出WARN;如果stop-position指向的最后一个事件是table_map,它也会发出WARN。让我们看几个例子:解析多个文件,但每次的顺序都不一样$mysqlbinlog-vvv--base64-output=decode-rows--start-position=4--stop-position=1500mgr01.001205mgr01.001206mgr01.001207>/tmp/b1$mysqlbinlog-vvv--base64-output=decode-rows--start-position=4--stop-position=1500mgr01.001206mgr01.001205mgr01.001207>/tmp/b2$mysqlbinlog-vvv--base64-output=decode-rows--start-position=4--stop-position=1500mgr01.001207mgr01.001206mgr01.001205>/tmp/b3$ls-la/tmp/b*-rw-r--r--1rootroot5027246Oct3019:36/tmp/b1-rw-r--r--1rootroot5027246Oct3019:21/tmp/b2-rw-r--r--1root根3126107Oct3019:22/tmp/b3#Althoughthefilesizesof/tmp/b1and/tmp/b2lookthesame,theirMD5SUMisdifferent$md5sum/tmp/b*ac8e223d417310e02366d5cbfcb4a882/tmp/b16a09fddd30ab210f3370613aff85571c/tmp/b29e2e70e1cee5fb10860c66c2ef770c0a/tmp/b3b.指定stop-position,但实际上会向上取值$mysqlbinlog-vvv--base64-output=decode-rows--start-position=4--stop-position=1500mgr01.001205mgr01.001206mgr01.001207>/tmp/b1#查看文本格式的binlog,发现end_log_pos最大值超过了1500$grepend_log_pos/tmp/b1|尾巴...#22103019:17:12服务器ID3306end_log_pos1208CRC320x8e5ca346表映射:`sbtest`.`sbtest5`映射到数字926#22103019:17:12服务器ID3306end_log_pos1624CRC320x0059617f表IDUpdate_rows6:flags:STMT_END_Fc.指定stop-position对应的是table_map事件,会发出WARN$mysqlbinlog-vvv--base64-output=decode-rows--start-position=4--stop-position=1208mgr01.001205WARNING:Therange打印的事件以未设置STMT_END_F标志的行事件或表映射事件结束。这可能是因为最后一条语句没有完全写入日志,或者因为您正在使用--stop-position或--stop-datetime来引用语句中间的事件。部分语句中的事件尚未写入输出。#22103019:17:12serverid3306end_log_pos1141CRC320x5226ecd8Rows_query#UPDATEsbtest7SETc='85585077000-51806678786-29036174562-00737528630-90333366602-59672213053-90973506235-01305133574-41639459483-63273277428'WHEREid=83642#at1141#22103019:17:12serverid3306end_log_pos1208CRC320x96186542Table_map:`sbtest`.`sbtest7`mappedtonumber928ROLLBACK/*mysqlbinlog添加*//*!*/;SET@@SESSION.GTID_NEXT='AUTOMATIC'/*mysqlbinlog添加*//*!*/;DELIMITER;#Endoflogfile/*!50003SETCOMPLETION_TYPE=@OLD_COMPLETION_TYPE*??/;/*!50530SET@@SESSION.PSEUDO_SLAVE_MODE=0*/;更多规则自行探索:)2.innodb_buffer_pool_instances设置多少合适将innodb缓冲池拆分成多个实例,每个实例有独立的freelists、flushlists、LRUlists、独立的mutex,有助于提高InnoDB并发性能。当innodb_buffer_pool_size小于1GB时,innodb_buffer_pool_instances默认值为1,否则默认为8。实例的设置尽量符合几个原则:第一,当innodb_buffer_pool_size大于1GB时,设置多个实例是有意义的;拆分后每个实例大于1GB;拆分后,每个实例必须是128MB(由innodb_buffer_pool_chunk_size值定义的整数倍)。
