配置mysql
啟用MySQL?Binlog
????????MySQL服務器的Binlog默認是未開啟的,如需進行同步,需要先進行開啟
修改MySQL配置文件/etc/my.cnf
sudo vim/etc/my.cof
增加如下配置
注:MySQL?Binlog模式
Statement-based:基于語句,Binlog會記錄所有寫操作的SQL語句,包括insert、update、delete等。
優點:節省空間
缺點:有可能造成數據不一致,例如insert語句中包含now()函數。
Row-based:基于行,Binlog會記錄每次寫操作后被操作行記錄的變化。
優點:保持數據的絕對一致性。
缺點:占用較大空間。
mixed:混合模式,默認是Statement-based,如果SQL語句可能導致數據不一致,就自動切換到Row-based
Maxwell要求Binlog采用Row-based模式
重啟MySQL服務
注意:配置完成后一定要重啟mysql,不然監控不了
sudo systemctl restart mysqld
創建Maxwell所需數據庫和用戶
Maxwell需要在MySQL中存儲其運行過程中的所需的一些數據,包括binlog同步的斷點位置(Maxwell支持斷點續傳)等等,故需要在MySQL為Maxwell創建數據庫及用戶
創建數據庫
CREATE DATABASE maxwell;
創建Maxwell用戶并賦予其必要權限
CREATE USER 'maxwell'@'%' IDENTIFIED BY 'maxwell';
GRANT ALL ON maxwell.* TO 'maxwell'@'%';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';
創建完成后會在mysql中顯示這個庫
配置maxwell
修改Maxwell配置文件名稱
cd?/opt/module/maxwell
cp config.properties.example config.PROPERTIES
修改Maxwell配置文件
Maxwell的使用
啟動Kafka集群
????????若Maxwell發送數據的目的地為Kafka集群,則需要先確保Kafka集群為啟動狀態
Maxwell啟停
啟動Maxwell
opt/module/maxwell/bin/maxwell --config /opt/module/maxwell/config.properties --daemon
停止Maxwell
ps -ef | grep com.zendesk.maxwell.Maxwell | grep -v grep | awk '{print $2}' | xargs kill -9
Maxwell啟停腳本
賦予權限
chmod +x mxw.sh????
啟動Maxwell????
mxw.sh start
停止Maxwell
mxw.sh stop
增量數據同步
啟動zookeeper,kafka,maxwell。
啟動Kafka消費者
kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic topic_db
只要沒有配置錯,你的mysql中有變更數據,maxwell會實時監控并寫入到kafka的主題中
歷史數據全量同步
? ? ? ? 現在已經實現了使用Maxwell實時增量同步MySQL變更數據的功能。但有時只有增量數據是不夠的,我們可能需要使用到MySQL數據庫中從歷史至今的一個完整的數據集。這就需要我們在進行增量同步之前,先進行一次歷史數據的全量同步。這樣就能保證得到一個完整的數據集。
Maxwell-bootstrap
????????Maxwell提供了bootstrap功能來進行歷史數據的全量同步,命令如下
?/opt/module/maxwell/bin/maxwell-bootstrap --database 你的庫名?--table 你的表名?--config /opt/module/maxwell/config.properties
bootstrap數據格式
采用bootstrap方式同步的輸出數據格式如下:
{
????"database": "fooDB",
????"table": "barTable",
????"type": "bootstrap-start",
????"ts": 1450557744,
????"data": {}
}
{
????"database": "fooDB",
????"table": "barTable",
????"type": "bootstrap-insert",
????"ts": 1450557744,
????"data": {
????????"txt": "hello"
????}
}
{
????"database": "fooDB",
????"table": "barTable",
????"type": "bootstrap-insert",
????"ts": 1450557744,
????"data": {
????????"txt": "bootstrap!"
????}
}
{
????"database": "fooDB",
????"table": "barTable",
????"type": "bootstrap-complete",
????"ts": 1450557744,
????"data": {}
}
注意事項:
(1)第一條type為bootstrap-start和最后一條type為bootstrap-complete的數據,是bootstrap開始和結束的標志,不包含數據,中間的type為bootstrap-insert的數據才包含數據。
(2)一次bootstrap輸出的所有記錄的ts都相同,為bootstrap開始的時間
全量同步腳本
在命令行使用全量同步有點麻煩,我們可以寫一個腳本。