大家好,我是小盒子。上次推文:MySQL篇(二)MySQL数据迁移、热备份及冷还原。通过实践详细阐述了MySQL数据迁移及热备份方式。
今天的主题:MySQL篇(三):MySQL数据增量迁移方案。
一、前言
前面我们盘点了一些MySQL数据迁移方案方案,但是它的备份都是一次性的,虽然XtraBackup有增量备份,但是都无法做到实时增量,对应有些零级项目来说,我们需要零停机在线迁移数据库。这几天发现了一个小工具叫DBMotion,可以实现零停机在线迁移数据。
二、DBMotion概述
Squids DBMotion是一款数据库迁移/同步/订阅工具,支持迁移预检查,支持全量、增量的数据同步,支持对象和数据的校验。DBMotion致力于数据库的丝滑迁移,也可用于数据库容灾或多活场景,采用异步多线程模式,目前支持MySQL to MySQL、MongoDB to MongoDB、MySQL to ClickHouse的迁移,并在增加更多数据库的支持。支持本地化部署,默认社区办有5个免费新建任务。
如何零停机在线迁移数据库?
“ ”
DBMotion的主要特性:
- 简单易用:用户仅需提供源端/目标信息,点击鼠标即可完成结构,数据,增量,校验全流程操作。
- 并发高性能:全量,增量,校验过程均采用多线程模式处理,提升并行性能。
- 零停机:采用后台初始化全量+实时增量捕获并应用模式,将整个迁移割接过程缩短至秒级,实现零停机业务切换。
- 端到端加密:整个迁移传输链路端到端加密,保证公网数据安全。
三、下载DBMotion
官网下载docker-compose文件,如下:
https://squids.cn/product/dbmotion
其内容如下:
version: '3.0' services: dts-mysql: image: mysql:latest container_name: dts-mysql environment: MYSQL_ROOT_PASSWORD: dbmotion command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', --default-time-zone=UTC] dts-api-server: image: squids/dbmotion-community:latest container_name: dts-api-server environment: - SERVER_MODE=DOCKER - MYSQL_URI=root:dbmotion@(dts-mysql)/dbmotion depends_on: - dts-mysql volumes: - /var/run/docker.sock:/var/run/docker.sock - /var/dbmotion:/dbmotion/log privileged: true dts-ui: image: squids/dbmotion-ui-community:latest container_name: dts-ui ports: - "30000:80" depends_on: - dts-mysql - dts-api-server
采用自定义网关,增加以下内容:
networks: - pkulaw_net networks: pkulaw_net: external: true
自定义网络:
docker network create --driver bridge --subnet 10.128.0.0/16 --gateway 10.128.0.1 pkulaw_net
部署:
docker-compose -f docker-compose.yaml up -d
四、DBMotion实战
4.1 访问测试
浏览器访问http://192.168.10.128:30000/,如下图所示:
4.2 添加任务
4.3 选择要迁移的数据库
“会自动检查数据库的设置、权限等。
”
4.4 创建任务,开始迁移
“状态是Finished,表示已经迁移完成,但是任务并没有结束,因为勾选了增量同步。只有结束增量同步,该任务才会结束。
”
五、总结
经过实践DBMotion可以支持迁移预检查,这个是比较友好的,可以对比源端和目标端的数据库差异配置,支持全量、增量的数据同步。
#往期精彩内容#
2、MySQL篇(一)MySQL InnoDB Cluster集群搭建
3、Elasticsearch篇(一):ES 的分片平衡问题
5、Infinispan篇(三):如何对生产的Infinispan进行调优?