CanalBinlogChange(mysql5.6)
背景
先前開源了一個開源專案: 【阿里巴巴開源專案: 基於mysql資料庫binlog的增量訂閱&消費】
本文主要是介紹一下canal1.0.3支援mysql5.6協議上的變化.
協議變化
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
注意:
- mysql5.6.6之後預設就會開啟checksum.
- 如果canal要開啟checksum協議支援,需要設定session引數,目前canal只解析checksum,並沒有對checksum進行校驗
-
1.set @master_binlog_checksum= `@@global.binlog_checksum`
set @master_binlog_checksum= `@@global.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一樣保證資料的完整性.
預設值為0,也就是會開啟version 2協議,mysql5.5之前預設是version 1協議
3. RowsQueryLogEvent事件新增
對應事件說明: http://dev.mysql.com/worklog/task/?id=5404 ,(主要用途:就是在RBR模式下,也可以輸出原始執行insert/update/delete的sql資訊)
預設值為false,代表不開啟。 如果設定為true,對應的一個事務中的LogEvent事件就會變為: (RowsQuery會出現在tableMap協議之前)
Query : Begin RowsQuery: insert/update/delete sql TableMap : Rows : Write/Update/DELETE Query/XId
4. 其他協議變化
- HEARTBEAT_LOG_EVENT = 27 ##主要用途:在mysql idle期間,傳送一些heartbeat事件,對應事件的內容是上一次最後傳送的LogEvent資訊
- IGNORABLE_LOG_EVENT = 28 ## 可忽略的logEvent事件概念,這是mysql為了後續協議擴充套件引入的,在低版本mysql發現無法識別LogEvent時,可根據LOG_EVENT_IGNORABLE_F標誌來判斷是否可以直接丟棄.
- GTID_LOG_EVENT = 33
- ANONYMOUS_GTID_LOG_EVENT = 34
- PREVIOUS_GTIDS_LOG_EVENT = 35
目前gtid協議只是解析,並沒有使用GTID發起COM_BINLOG_DUMP,後續會考慮支援.
5. 新增type : TIME2/DATETIME2/TIMESTAMP2
public static final int MYSQL_TYPE_TIMESTAMP2 = 17; public static final int MYSQL_TYPE_DATETIME2 = 18; public static final int MYSQL_TYPE_TIME2 = 19;
新增了3種mysql type型別,和5.5之前的有不同的儲存格式,最可惡的是居然是採用了Big-Endian,和之前的所有事件解析litten-Endian形成一個對比,不知道mysql那幫人怎麼想的
測試
1. mysql版本: 5.6.10
2. mysql server配置 :
1.server-id=1
2.binlog-checksum=CRC32
3.#binlog-checksum=NONE
4.master-verify-checksum=1
5.slave-sql-verify-checksum=1
6.log-bin=mysql-bin
7.binlog-format=ROW
8.binlog-rows-query-log-events=true
9.log-bin-use-v1-row-events=1
10.binlog_cache_size=2M
11.max_binlog_size=512M
12.sync_binlog=0
13.character-set-server = utf8
14.#default-character-set = utf8
15.collation-server = utf8_unicode_ci
16.[mysql]
17.default-storage-engine=INNODB
18.default-character-set=utf8
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保持一致)
相關文章
- mysql5.6備份MySql
- Mysql5.6 Master+MasterMySqlAST
- Mysql5.6 自動化部署MySql
- Linux安裝Mysql5.6LinuxMySql
- MySQL5.6複製原理圖MySql
- MySQL5.6 create table原理分析MySql
- LAMP環境搭建-MySQL5.6LAMPMySql
- mysql5.6的安裝(cmake)MySql
- Docker Centos安裝Mysql5.6DockerCentOSMySql
- Mysql5.6主從複製MySql
- mysql5.6複製新特性MySql
- MySQL5.6 PERFORMANCE_SCHEMA 說明MySqlORM
- mysql5.6 mysqldump備份報錯MySql
- Install mysql5.6 on CentOS5.5MySqlCentOS
- mysql5.6預設有幾個資料庫?mysql5.6初始有幾個資料庫?MySql資料庫
- Linux上yum安裝mysql5.6LinuxMySql
- centos7 mysql5.6升級5.7CentOSMySql
- 關於mysql5.6 的排序問題.MySql排序
- mysql5.6主從引數詳解MySql
- MySQL5.6 windows msi安裝介紹MySqlWindows
- Windows下Mysql5.6升級到5.7WindowsMySql
- [MySQL5.6]PerformanceSchema之PS配置項(1)MySqlORM
- CentOS6.5上安裝MySQL5.6CentOSMySql
- MySQL5.6 GTID新特性實踐MySql
- MySQL5.6 新效能之二(exchange partitions)MySql
- MySQL5.6 linux原始碼安裝MySqlLinux原始碼
- mysql5.6生成排序欄位MySql排序
- ubuntu mysql5.6二進位制安裝UbuntuMySql
- MySQL5.6之use_index_extensions優化MySqlIndex優化
- CentOS6.5下MySQL5.6的安裝CentOSMySql
- MySQL之——RPM方式安裝MySQL5.6MySql
- 【MySQL】MySQL5.6新特性之Batched Key AccessMySqlBAT
- 【MySQL】MySQL5.6新特性之crash-safeMySql
- Linux下MySQL5.6原始碼安裝LinuxMySql原始碼
- MySQL5.6新特性之Multi-Range ReadMySql
- CentOS 6 下RPM方式安裝MySQL5.6CentOSMySql
- linux 環境RPM 安裝MYSQL5.6LinuxMySql
- MySQL5.6 audit審計外掛安裝初探MySql