一些概念
CDC : Change Data Capture(改變數據捕獲),可以識別提取從上次提取之后發生變化的數據
cdc 的兩種模式:
同步:同步cdc主要是采用觸發器 記錄新增數據,基本能夠做到實時增量提起
異步:異步cdc 通過分析已經提交的日志記錄來得到增量數據信息,有一定的延時,並且提供了到 oracleStreams 的接口
源表(Source Table):業務數據庫需要捕獲數據的源表
變化表(Change Table):保存從源表捕獲的變化數據
Mysql Binlog 研究
mysql-binlog 是mysql 數據庫的二進制日志,用於記錄用戶對數據庫操作的 sql 語句(除了查詢語言)。可以使用mysql bin 命令查詢二進制內容
binlog 的格式有三種: Statement,Row,Mixed
windows 下mysql5.7 啟動 binlog : 參考
如何使用mysql binlog : 參考
Statement: 記錄的是執行的語句
Row: 記錄的是每行的修改記錄,可能會產生大量日志
Mixed: Statement 與 Row 的結合
01. 查看 binlog_format
show variables like 'binlog_format'
02.查看是否開啟 binlog
show variables like 'log_bin'
如果binlog沒有開啟,可以通過set sql_log_bin=1命令來啟用;如果想停用binlog,可以使用set sql_log_bin=0
03.獲取 binlog 文件列表
show binary logs
04.查看當前正在寫入的 binlog 文件
show master status
05.查看第一個binlog日志內容
show binlog events
查看指定binlog 文件內容
show binlog events in 'mysql-bin.000002'
當停止或重啟服務器時,服務器會把日志文件記入下一個日志文件,Mysql會在重啟時生成一個新的日志文件,文件序號遞增;此外,如果日志文件超過max_binlog_size(默認值1G)系統變量配置的上限時,
也會生成新的日志文件(在這里需要注意的是,如果你正使用大的事務,二進制日志還會超過max_binlog_size,不會生成新的日志文件,事務全寫入一個二進制日志中,這種情況主要是為了保證事務的完整性);
日志被刷新時,新生成一個日志文件。
flush logs
使用 binlog:
06.如何解析binlog(https://www.percona.com/blog/2016/09/13/mysql-cdc-streaming-binary-logs-and-asynchronous-triggers/)
將binlog 事件保存到mysql 文檔存儲或者mongodb
對二進制日志時間做出反應:異步觸發器
maxwell 是一個實時抓取mysql 二進制日志 binlog ,並生成 json 格式的消息,作為生產者發送給kafka ,kinesis,rabitmq 等,參考 https://blog.csdn.net/wwwdc1012/article/details/88388552
除此之外,目前常用的 mysql binlog 解析工具主要有: canal , mysql_Streamer
canal 由 Java 開發,分為服務端與客戶端,擁有眾多的衍生程序,canal 需要自己編寫客戶端消費canal 解析到的數據。
maxwell 相對 canal 的優勢是使用簡單,將數據變更輸出未 json 字符串,不需要編寫客戶端。