前言
最近完成了一套mariadb10.10.x的库到mysql8.0的迁移。给大家分享一下实践过程以及对mysql数据库数据迁移的一些简单思路。
基础环境
源端:mariadb 10.10.x, 未开binlog(重要信息,不能重启,业务不能中断)
目标端:mysql8.0
迁移方案
cloudcanal社区版本 全量 + 数据订正 && 修订
本来想部署docker版本实现,但是离线环境docker搭建都很折腾,无奈之下,只好二进制安装。
安装方式和具体操作方式参考官方文档:
https://www.clougence.com/cc-doc/productOP/tgz/firstinstall_with_tgz
踩坑经历
1、mysql8.0 关键字
mysql8.0 中新增了不少关键字为系统关键字(https://dev.mysql.com/doc/refman/8.0/en/keywords.html )。比如time,rank等,cloudcanal社区版本在迁移表结构过程中并没有进行转义。
解决办法:跳过相关表,手动迁移(mysqldump)
2、create_time 定义被截断
create_time 字段业务在定义为 not null default current_timestamp, 迁移过程中该定义被截断,导致业务迁移后应用切换报错。爱可生开源社区有该案例详细分享。
https://opensource.actionsky.com/20211028-mysql/
3、数据检验耗时长
一开始采用全量校验模式,发现需要的时间非常长。后来和业务同事协商,跳过一些静态大表的校验后,剩下的校验任务在2h内完成。修订也在半小时完成。
ps:对业务的理解与熟悉非常重要。
mysql数据迁移的一些可选方案
这里列举一些常用的方案供大家参考:
1、xtraback 备份 + binlog增量
2、dts工具 gravity、dm、cloudcanal、datax等工具
3、mysqldump + pt-table-sync(增量)
4、mysqldump + 管道直接灌(适合小库)
5、克隆插件 + binlog
6、mysqlsh中的util备份恢复
7、workbeach等客户端工具有一些也具备迁移功能
大概这些工具与方案。具体的工具与实践选择还得根据业务和实际环境情况确定。