赞
踩
工作中,会遇到数据清洗的情况下,还有就是要用到数据热迁移。就是在不停机的情况下,进行数据迁移工作。这样的情况下,我们就可以利用cannal来完成异步和业务解耦的方式,来完成自动的数据迁移工作。在提高效率和事务一致性的情况下,我们可以采用mq来配合使用。
canal主要是针对mysql的binlog日志的方式来完成数据的迁移工作,结合了RabbitMQ来处理保存变更记录的操作。
接下来,我将采用docker部署的方式,来搭建这样的环境:
首先就是docker-compose.yml脚本的开发:
version: "3"
services:
mysql:
network_mode: mynetwork
container_name: mymysql
ports:
- 3306:3306
restart: always
volumes:
- /etc/localtime:/etc/localtime
- /home/mycontainers/mymysql/data:/data
- /home/mycontainers/mymysql/mysql:/var/lib/mysql
- /home/mycontainers/mymysql/conf:/etc/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_unicode_ci
--log-bin=/var/lib/mysql/mysql-bin
--server-id=1
--binlog-format=ROW
--expire_logs_days=7
--max_binlog_size=500M
image: mysql:5.7.20
rabbitmq:
container_name: myrabbit
ports:
- 15672:15672
- 5672:5672
restart: always
volumes:
- /etc/localtime:/etc/localtime
- /home/mycontainers/myrabbit/rabbitmq:/var/lib/rabbitmq
network_mode: mynetwork
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=123456
image: rabbitmq:3.8-management
canal-server:
container_name: canal-server
restart: always
ports:
- 11110:11110
- 11111:11111
- 11112:11112
volumes:
- /home/mycontainers/canal-server/conf/canal.properties:/home/admin/canal-server/conf/canal.properties
- /home/mycontainers/canal-server/conf/instance.properties:/home/admin/canal-server/conf/example/instance.properties
- /home/mycontainers/canal-server/logs:/home/admin/canal-server/logs
network_mode: mynetwork
depends_on:
- mysql
- rabbitmq
# - canal-admin
image: canal/canal-server:v1.1.5
在这里面,我们采用一个网络环境network_mode: mynetwork ,来完成容器内的服务相互可以访问。
我们需要修改下Canal环境的配置文件:
canal.properties和
instance.properties,映射Canal中的以下两个路径:
/home/admin/canal-server/conf/canal.properties
配置文件中,
canal.destinations意思是server上部署的instance列表,
/home/admin/canal-server/conf/example/instance.properties
修改instance.properties
canal.instance.master.address=mymysql:3306
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
这里面填写的是容器的mysql,这样完成之后, 我们就可以采用navicat来完成数据库连接校验。
接下来,我们让canal来配合mq来使用:
修改canal.properties中的serverMode:
canal.serverMode = rabbitMQ
修改instance.properties中的topic:
canal.mq.topic=canal-routing-key
rabbitmq的配置步骤如下:
重新启动容器,进入RabbitMQ管理页面创建exchange交换器和队列queue:
新建exchange,命名为:
canal-exchange
新建queue,命名为:
canal-queue
绑定exchange和queue,routing-key设置为:
canal-routing-key,这里对应上面
instance.properties的
canal.mq.topic
到此,我们的环境就搭建完毕了。如果大家感兴趣的话,可以用springboot来完成整合环境的结合,测试一下数据迁移工作。
最后说一句(求关注,别白嫖我)
关注公众号【Ai飞仔小密圈】,里面每天分享不一样的AI实用工具和开发经验分享
如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。
求一键三连:点赞、转发、在看。
关注公众号:【Ai飞仔小密圈】,可以跟很多BAT大厂的前辈交流和学习。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。