MaxWell 資料同步

sunrise丶發表於2019-12-13

由於最近的一個專案需要同步子系統中的資料到主系統上,並且需要在子系統傳輸上來的資料增加一些額外的資訊,所以考慮到了可以使用一些元件來同步資料庫中的資料。首先找的是阿里的Canal,但是在實際使用上有一些問題,例如經常性沒收到資料變更。尋找了很久也沒找到具體的原因(至今不知道為啥,可能我配置有問題),所以轉向MaxWell。

MaxWell 是一個能實時讀取MySQL二進位制日誌binlog,並生成 JSON 格式的訊息,作為生產者傳送給 KafkaKinesisRabbitMQRedisGoogle Cloud Pub/Sub、檔案或其它平臺的應用程式。它的常見應用場景有ETL、維護快取、收集表級別的dml指標、增量到搜尋引擎、資料分割槽遷移、切庫binlog回滾方案等。

環境

Maxwell 是使用java開發的,所以要先安裝java。

配置mysql

修改mysql的配置檔案my.conf,windows下是my.ini,開啟bin-log和修改bin-log的格式

log-bin=master
binlog_format=row

下載MaxWell

MaxWell下載連結

配置MaxWell

解壓後複製一份maxwell的config

cd maxwell

cp config.properites.example config.properites

修改配置檔案
vim config.properites

配置檔案內容

# tl;dr config
log_level=info

#生產者,我這裡使用是的RabbitMQ
producer=rabbitmq

# 資料庫資訊配置
host=localhost
user=maxwell
password=maxwell

#用debug方便除錯
log_level=DEBUG

#RabbitMQ的配置
rabbitmq_host=127.0.0.1
rabbitmq_port=5672
rabbitmq_user=admin
rabbitmq_pass=admin
rabbitmq_virtual_host=/
rabbitmq_exchange=maxwell
rabbitmq_exchange_type=direct
rabbitmq_exchange_durable=true
rabbitmq_exchange_autodelete=false
rabbitmq_routing_key_template=%db%.%table%
rabbitmq_message_persistent=false
rabbitmq_declare_exchange=true

執行

配置好這些之後開啟maxwell,當然在此之前要先啟動mysql和RabiitMQ

Linux

cd ./bin

#config為使用的配置檔案,daemon是使用守護程式
./maxwell --config=../config.properites --daemon

#使用的daemon後可在logs目錄下看到資料的資訊。
tail -f ../logs/MaxwellDaemon.out

Windows

java -Dfile.encoding=UTF-8 -Dlog4j.shutdownCallbackRegistry=com.djdch.log4j.StaticShutdownCallbackRegistry -cp ../lib/* com.zendesk.maxwell.Maxwell --config=../config.properties

MaxWell把資料扔到MQ上後,MQ會通過routing_key分配到相對應的佇列上,然後用php去連線MQ去消費這些資料,然後完成資料庫間的資料同步。

實際執行效果還不錯,也沒有發生什麼問題,總體來說還是挺不錯的。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章