MaxWell 数据同步

使用MaxWell的原因

由于最近的一个项目需要同步子系统中的数据到主系统上,并且需要在子系统传输上来的数据增加一些额外的信息,所以考虑到了可以使用一些组件来同步数据库中的数据。首先找的是阿里的Canal,但是在实际使用上有一些问题,例如经常性没收到数据变更。寻找了很久也没找到具体的原因(至今不知道为啥,可能我配置有问题),所以转向MaxWell。

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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!