mysql的maxwell的使用


只有mysql 可以使用此功能。

注意:此功能只有mysql可以使用。 阿里的canal也可以實現此功能,但是我用起來問題有點多。
postgresql也有類似的功能,但是不使用的此軟件。可以自己查找pg_recvlogical test_decoding wal2json pgcat Logical Decoding 和最新的PgOutput。postgresql基本都是用插件實現。
sqlserver 的工具有debezium 但是沒有測試。其實只要實現cdc功能就可以了。參考 https://www.cnblogs.com/wang2650/p/14367008.html

maxwell官方文檔 地址http://maxwells-daemon.io/quickstart/

實現的功能
當你插入修改或刪除記錄的時候,maxwell會輸出如下結果。這樣你就會知道數據庫每一條記錄的增加 修改 和刪除變化,並知道記錄在修改前和修改后的值。
以前同樣的功能,一般都是在執行sql的部分來實現。比如記錄執行的sql語句,或者跟蹤實體的值變化。但是是有問題,比如執行批量的修改 update tb set a=1 where id>3 你就無法知道修改了哪些記錄。因為id大於3的記錄是不固定的。除非你獲取每一條的記錄,然后逐行修改。
結果如下

mysql> insert into `test`.`maxwell` set id = 1, daemon = 'Stanislaw Lem';
  maxwell: {
    "database": "test",
    "table": "maxwell",
    "type": "insert",
    "ts": 1449786310,
    "xid": 940752,
    "commit": true,
    "data": { "id":1, "daemon": "Stanislaw Lem" }
  }
  mysql> update test.maxwell set daemon = 'firebus!  firebus!' where id = 1;
  maxwell: {
    "database": "test",
    "table": "maxwell",
    "type": "update",
    "ts": 1449786341,
    "xid": 940786,
    "commit": true,
    "data": {"id":1, "daemon": "Firebus!  Firebus!"},
    "old":  {"daemon": "Stanislaw Lem"}
  }

docker下控制台輸出結果

一 mysql的部分

1開啟邏輯復制功能

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

2設置用來復制的賬號,用戶名maxwell 密碼xxxxxx

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

需要注意的是,mysql的日志的部分,記得設置日志的大小和過期時間。防止生成太多的日志,占滿磁盤。 日志大小默認好像是500m,日期和大小最好顯式的設置一下。

maxwell的使用

1 命令行方式
輸出到控制台

bin/maxwell --user='maxwell' --password='XXXXXX' --host='127.0.0.1' --producer=stdout  

輸出到rabbitmq
參考地址https://blog.csdn.net/weixin_40052298/article/details/109464241
https://blog.csdn.net/xiehd313/article/details/81289150
https://www.cnblogs.com/lao-tang/p/11353080.html

bin/maxwell --user='maxwell' --password='XXXXXX' --host='127.0.0.1' \
    --producer=rabbitmq --rabbitmq_host='rabbitmq.hostname'

輸出到redis

bin/maxwell --user='maxwell' --password='XXXXXX' --host='127.0.0.1' \
    --producer=redis --redis_host=redis.hostname

2 docker
輸出到控制台

docker run -it --rm zendesk/maxwell bin/maxwell --user=$MYSQL_USERNAME \
    --password=$MYSQL_PASSWORD --host=$MYSQL_HOST --producer=stdout

輸出到kafka
參考https://blog.csdn.net/qq_34285557/article/details/111995014

docker run -it --rm zendesk/maxwell bin/maxwell --user=$MYSQL_USERNAME \
    --password=$MYSQL_PASSWORD --host=$MYSQL_HOST --producer=kafka \
    --kafka.bootstrap.servers=$KAFKA_HOST:$KAFKA_PORT --kafka_topic=maxwell

其他參考
https://www.iteye.com/blog/liunancun-2515772
https://blog.csdn.net/HYESC/article/details/83826611?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-5.control
3下載地址
https://github.com/zendesk/maxwell/releases/download/v1.29.2/maxwell-1.29.2.tar.gz


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM