使用Maxwell監(jiān)控MySQL的binlog文件

一敬尺、原理

1.1 Maxwell介紹

Maxwell是一個能實時讀取MySQL二進制日志binlog闰围,并生成 JSON 格式的消息消恍,作為生產(chǎn)者發(fā)送給 Kafka,Kinesis豺总、RabbitMQ车伞、Redis、Google Cloud Pub/Sub喻喳、文件或其它平臺的應用程序另玖。它的常見應用場景有ETL、維護緩存表伦、收集表級別的dml指標谦去、增量到搜索引擎、數(shù)據(jù)分區(qū)遷移蹦哼、切庫binlog回滾方案等鳄哭。

  • 支持 SELECT * FROM table 的方式進行全量數(shù)據(jù)初始化;
  • 支持在主庫發(fā)生failover后纲熏,自動恢復binlog位置(GTID)妆丘;
  • 可以對數(shù)據(jù)進行分區(qū),解決數(shù)據(jù)傾斜問題局劲,發(fā)送到kafka的數(shù)據(jù)支持database勺拣、table、column等級別的數(shù)據(jù)分區(qū)容握;
  • 工作方式是偽裝為Slave宣脉,接收binlog events,然后根據(jù)schemas信息拼裝剔氏,可以接受ddl塑猖、xid、row等各種event谈跛。

1.2 對比Canal

  • Maxwell沒有canal那種server+client模式羊苟,只有一個server把數(shù)據(jù)發(fā)送到消息隊列或redis。如果需要多個實例感憾,通過指定不同配置文件啟動多個進程蜡励。
  • Maxwell有一個亮點功能,就是canal只能抓取最新數(shù)據(jù)阻桅,對已存在的歷史數(shù)據(jù)沒有辦法處理凉倚。而Maxwell有一個bootstrap功能,可以直接引導出完整的歷史數(shù)據(jù)用于初始化嫂沉,非常好用稽寒。
  • Maxwell不能直接支持HA,但是它支持斷點還原趟章,即錯誤解決后重啟繼續(xù)上次點兒讀取數(shù)據(jù)杏糙。
  • Maxwell只支持json格式慎王,而Canal如果用Server+client模式的話,可以自定義格式宏侍。
  • Maxwell比Canal更加輕量級赖淤。

1.3 流程圖

可以通過Maxwell實現(xiàn)MySQL與Elasticsearch的數(shù)據(jù)同步。


image.png


二谅河、實現(xiàn)

vi my.cnf 修改mysql的配置文件

[mysqld]
server_id=1
log-bin=master
binlog_format=row

gtid-mode=on
enforce-gtid-consistency=1 # 設置為主從強一致性
log-slave-updates=1 # 記錄日志

設置權限

mysql> CREATE USER 'maxwell'@'%' IDENTIFIED BY 'XXXXXX';
mysql> GRANT ALL ON maxwell.* TO 'maxwell'@'%';
mysql> GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';

啟動Maxwell并與RabbitMQ關聯(lián)

方式一:通過在docker命令中指定屬性的值關聯(lián)RabbitMQ

docker run -it --rm zendesk/maxwell bin/maxwell --user='maxwell' --password='hxr' --host='mysql.hostname'   --producer=rabbitmq --rabbitmq_host='rabbitmq.hostname'

備注:測試時咱旱,可以通過在控制臺打印的方式查看配置是否正確。

docker run -it --rm zendesk/maxwell bin/maxwell --user='maxwell' --password='hxr' --host='mysql.hostname' --producer=stdout

方式二:通過配置文件啟動,配置文件名稱為config.properties

docker  run  -it  -d  -p  6111:6111 -v  /root/maxwell/config.properties:/app/config.properties -n  maxwell zendesk/maxwell  bin/maxwell

config.properties配置文件如下

# tl;dr config 生產(chǎn)環(huán)境配置為info級別
log_level=DEBUG
producer=rabbitmq
# mysql login info, mysql用戶必須擁有讀取binlog權限和新建庫表的權限
host=192.168.32.225
user=maxwell
password=hxr
output_nulls=true
# options to pass into the jdbc connection, given as opt=val&opt2=val2
#jdbc_options=opt1=100&opt2=hello
jdbc_options=autoReconnet=true
#需要同步的數(shù)據(jù)庫旧蛾,表莽龟,及不包含的字段
#filter=exclude: *.*, include: foo.*, include: bar.baz
filter=exclude: *.*, include: dev_smartcook.menu.publish_status=2
#replica_server_id 和 client_id 唯一標示,用于集群部署
replica_server_id=64
client_id=maxwell_dev
metrics_type=http
metrics_slf4j_interval=60
http_port=8111
http_diagnostic=true # default false
#rabbitmq
rabbitmq_host=116.62.148.11
rabbitmq_port=5672
rabbitmq_user=guest
rabbitmq_pass=guest
rabbitmq_virtual_host=/vhost_mmr
rabbitmq_exchange=maxwell
rabbitmq_exchange_type=topic
rabbitmq_exchange_durable=false
rabbitmq_exchange_autodelete=false
rabbitmq_routing_key_template=dev_smartcook.menu
rabbitmq_message_persistent=false
rabbitmq_declare_exchange=true

# 僅匹配foodb數(shù)據(jù)庫的tbl表和所有table_數(shù)字的表
--filter='exclude: foodb.*, include: foodb.tbl, include: foodb./table_\d+/'
# 排除所有庫所有表锨天,僅匹配db1數(shù)據(jù)庫
--filter = 'exclude: *.*, include: db1.*'
# 排除含db.tbl.col列值為reject的所有更新
--filter = 'exclude: db.tbl.col = reject'
# 排除任何包含col_a列的更新
--filter = 'exclude: *.*.col_a = *'
# blacklist 黑名單毯盈,完全排除bad_db數(shù)據(jù)庫,若要恢復病袄,必須刪除maxwell庫
--filter = 'blacklist: bad_db.*'


也可以通過Kafka來接收Maxwell的消息:

docker run -p 8080:8080 -it --rm zendesk/maxwell bin/maxwell --user='maxwell'  --password='123456' --host='10.100.97.246' --producer=kafka  --kafka.bootstrap.servers='10.100.97.246:9092' --kafka_topic=maxwell --log_level=debug  --metrics_type=http --metrics_jvm=true --http_port=8080

配置了通過http方式發(fā)布指標搂赋,啟用收集JVM信息,端口為8080益缠,之后可以通過 http://10.100.97.246:8080/metrics 便可獲取所有的指標脑奠,http 方式有四種后綴,分別對應四種不同的格式:

endpoint 說明:
/metrics 所有指標以JSON格式返回
/prometheus 所有指標以Prometheus格式返回(Prometheus是一套開源的監(jiān)控&報警&時間序列數(shù)據(jù)庫的組合)
/healthcheck 返回Maxwell過去15分鐘是否健康
/ping 簡單的測試幅慌,返回 pong


三宋欺、參考

maxwell官網(wǎng)地址 http://maxwells-daemon.io/
Github官方地址 https://github.com/zendesk/maxwell

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者胰伍。
  • 序言:七十年代末齿诞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子骂租,更是在濱河造成了極大的恐慌祷杈,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渗饮,死亡現(xiàn)場離奇詭異但汞,居然都是意外死亡,警方通過查閱死者的電腦和手機互站,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門私蕾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胡桃,你說我怎么就攤上這事是目。” “怎么了标捺?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵懊纳,是天一觀的道長。 經(jīng)常有香客問我亡容,道長嗤疯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任闺兢,我火速辦了婚禮茂缚,結果婚禮上,老公的妹妹穿的比我還像新娘屋谭。我一直安慰自己脚囊,他們只是感情好,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布桐磁。 她就那樣靜靜地躺著悔耘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪我擂。 梳的紋絲不亂的頭發(fā)上衬以,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音校摩,去河邊找鬼看峻。 笑死,一個胖子當著我的面吹牛衙吩,可吹牛的內(nèi)容都是我干的互妓。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼坤塞,長吁一口氣:“原來是場噩夢啊……” “哼冯勉!你這毒婦竟也來了?” 一聲冷哼從身側響起尺锚,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤珠闰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瘫辩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伏嗜,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年伐厌,在試婚紗的時候發(fā)現(xiàn)自己被綠了承绸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡挣轨,死狀恐怖军熏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卷扮,我是刑警寧澤荡澎,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布均践,位于F島的核電站,受9級特大地震影響摩幔,放射性物質發(fā)生泄漏彤委。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一或衡、第九天 我趴在偏房一處隱蔽的房頂上張望焦影。 院中可真熱鬧,春花似錦封断、人聲如沸斯辰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽彬呻。三九已至,卻和暖如春回梧,著一層夾襖步出監(jiān)牢的瞬間废岂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工狱意, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留湖苞,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓详囤,卻偏偏與公主長得像财骨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子藏姐,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容