diff --git a/BinlogChange(mysql5.6).md b/BinlogChange(mysql5.6).md new file mode 100644 index 0000000..8f1282d --- /dev/null +++ b/BinlogChange(mysql5.6).md @@ -0,0 +1,75 @@ +

协议变化

+

1. binlog checksum

+

mysql5.6之后,支持在binlog对象中增加checksum信息,比如CRC32协议. 其原理主要是在原先binlog的末尾新增了4个byte,写入一个crc32的校验值.

+

对应参数说明: http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#sysvar_binlog_checksum

+

注意:

+ +

2. INSERT/UPDATE/DELETE协议变化

+
public static final int    WRITE_ROWS_EVENT_V1      = 23;
+public static final int    UPDATE_ROWS_EVENT_V1     = 24;
+public static final int    DELETE_ROWS_EVENT_V1     = 25;
+
+/** Version 2 of the Row events */
+public static final int    WRITE_ROWS_EVENT         = 30;
+public static final int    UPDATE_ROWS_EVENT        = 31;
+public static final int    DELETE_ROWS_EVENT        = 32;
+

新增了version 2的协议,主要的变化,就是增加了self check extra的信息,和checksum一样保证数据的完整性.

+

对应参数说明: http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#sysvar_log_bin_use_v1_row_events

+

默认值为0,也就是会开启version 2协议,mysql5.5之前默认是version 1协议

+

+

3. RowsQueryLogEvent事件新增

+

对应事件说明: http://dev.mysql.com/worklog/task/?id=5404 ,(主要用途:就是在RBR模式下,也可以输出原始执行insert/update/delete的sql信息)

+

对应参数说明: http://dev.mysql.com/doc/refman/5.6/en/replication-options-binary-log.html#option_mysqld_binlog-rows-query-log-events

+

默认值为false,代表不开启。 如果设置为true,对应的一个事务中的LogEvent事件就会变为: (RowsQuery会出现在tableMap协议之前)

+
Query :  Begin 
+RowsQuery:   insert/update/delete sql
+TableMap : 
+Rows :  Write/Update/DELETE
+Query/XId 
+

+

4. 其他协议变化

+ +

目前gtid协议只是解析,并没有使用GTID发起COM_BINLOG_DUMP,后续会考虑支持.

+

+

测试

+

1. mysql版本: 5.6.10

+

2. mysql server配置 :

+
server-id=1
+binlog-checksum=CRC32
+#binlog-checksum=NONE
+master-verify-checksum=1
+slave-sql-verify-checksum=1
+log-bin=mysql-bin
+binlog-format=ROW
+binlog-rows-query-log-events=true
+log-bin-use-v1-row-events=1
+binlog_cache_size=2M
+max_binlog_size=512M
+sync_binlog=0
+character-set-server = utf8
+#default-character-set = utf8
+collation-server = utf8_unicode_ci
+[mysql]
+default-storage-engine=INNODB
+default-character-set=utf8
+

3. 测试注意(需要设置master_binlog_checksum变量,和mysql server保持一致)

+
Connection connection = DriverManager.getConnection("jdbc:mysql://10.20.144.34:3306", "root", "root");
+Statement statement = connection.createStatement();
+statement.execute("SET @master_binlog_checksum='@@global.binlog_checksum'");
+

+

+ + + + + \ No newline at end of file