MaxWell 数据同步
使用 MaxWell 的原因#
由于最近的一个项目需要同步子系统中的数据到主系统上,并且需要在子系统传输上来的数据增加一些额外的信息,所以考虑到了可以使用一些组件来同步数据库中的数据。首先找的是阿里的 Canal,但是在实际使用上有一些问题,例如经常性没收到数据变更。寻找了很久也没找到具体的原因(至今不知道为啥,可能我配置有问题),所以转向 MaxWell。
MaxWell 介绍#
MaxWell 是一个能实时读取 MySQL 二进制日志 binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka
,Kinesis
、RabbitMQ
、Redis
、Google 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 的 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 协议》,转载必须注明作者和本文链接
推荐文章: