MySQL 8.0 主从同步迁移到 MariaDB 10.3 配置步骤是什么?

文章导读
MySQL 8.0 到 MariaDB 10.3 的迁移无法通过原地升级完成,必须使用逻辑转储导入方式,根据 2025 年 1 月 21 日发布的迁移指南,迁移过程需确认存储引擎兼容性,非 InnoDB 引擎表需提前转换。
📋 目录
  1. 原因分析
  2. 解决方案
  3. 注意事项
  4. 参考来源
A A

MySQL 8.0 主从同步迁移到 MariaDB 10.3 配置步骤是什么?

核心结论:MySQL 8.0 到 MariaDB 10.3 的迁移无法通过原地升级完成,必须使用逻辑转储导入方式,根据 2025 年 1 月 21 日发布的迁移指南,迁移过程需确认存储引擎兼容性,非 InnoDB 引擎表需提前转换。

原因分析

MySQL 8.0 与 MariaDB 10.3 之间存在明显的功能分化,用户无法通过替换二进制软件包的方式进行原地升级迁移。根据 2025 年 1 月 21 日发布的技术文档,MariaDB 在社区版中使用了多种存储引擎(如 Aria),这些引擎处于 alpha 或 beta 版,而 MySQL 的主要引擎为 InnoDB。迁移前需要执行以下语句确认所使用的引擎:

SELECT COUNT(*) as '# TABLES', CONCAT(ROUND(sum(data_length)/(1024*1024*1024),2),'G') DATA, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema','sys') GROUP BY engine;

主从同步基于二进制日志 (binlog) 实现,主数据库负责记录所有数据更改操作到二进制日志中,从数据库通过 IO 线程读取这些日志并应用到自身。根据 2024 年 9 月 23 日的资料,确保主从数据库的 MySQL/MariaDB 版本一致是实现同步的前提条件。

解决方案

步骤一:确认不兼容部分

使用以下语句确认 MySQL 8.0 中无法使用的存储引擎(2025 年 1 月 21 日资料):

SELECT TABLE_SCHEMA, TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema','sys') AND engine NOT IN('MyISAM','InnoDB');

如果发现 Aria 等非 InnoDB 引擎的表,需要在迁移前将数据转为 InnoDB 引擎。

步骤二:主服务器配置 my.cnf

打开配置文件/etc/my.cnf,加入以下内容(2022 年 2 月 23 日资料):

[mariadb]
log-bin
server_id=1
log-basename=master1
binlog-format=mixed
binlog_do_db=db00
binlog_do_db=db002
binlog_do_db=db003

一定要开启 log-bin,server_id 必须设置。如果不是全部开启则可以设置 binlog_do_db,需要的数据库就写上去。

MySQL 8.0 主从同步迁移到 MariaDB 10.3 配置步骤是什么?

步骤三:创建 slave 用户并授权

根据 2025 年 6 月 4 日收录的腾讯云数据库迁移文档,源数据库需要具备的权限如下:

create user '迁移账号'@'%' identified by '迁移密码';
grant reload,lock tables,replication client,replication slave,show databases,show view,process on *.* to '迁移账号'@'%';

步骤四:从服务器设置 server_id

在从服务器上导入数据库并设置 server_id,确保与主服务器不同。测试显示主数据库的修改能即时反映到从数据库(2022 年 2 月 23 日资料)。

步骤五:选择迁移工具

根据 2024 年 3 月 12 日的 MariaDB 到 MySQL 数据迁移案例,可选方案包括:

  • xtraback 备份 + binlog 增量
  • dts 工具(gravity、dm、cloudcanal、datax 等)
  • mysqldump + pt-table-sync(增量)
  • mysqldump + 管道直接灌 (适合小库)

实际案例中,使用 cloudcanal 社区版本进行全量 + 数据订正,校验任务在 2h 内完成,修订在半小时完成。

注意事项

坑 1:MySQL 8.0 关键字冲突(2024 年 3 月 12 日案例)
MySQL 8.0 中新增了不少关键字为系统关键字,如 time、rank 等。cloudcanal 社区版本在迁移表结构过程中并没有进行转义。解决办法:跳过相关表,手动迁移 (mysqldump)。

坑 2:create_time 定义被截断(2024 年 3 月 12 日案例)
create_time 字段业务在定义为 not null default current_timestamp,迁移过程中该定义被截断,导致业务迁移后应用切换报错。

坑 3:数据检验耗时长(2024 年 3 月 12 日案例)
一开始采用全量校验模式,发现需要的时间非常长。后来和业务同事协商,跳过一些静态大表的校验后,剩下的校验任务在 2h 内完成。

MySQL 8.0 主从同步迁移到 MariaDB 10.3 配置步骤是什么?

坑 4:存储引擎不兼容(2025 年 1 月 21 日资料)
MariaDB 社区版中使用了多种存储引擎,如 Aria 引擎处于 alpha 或 beta 版,并没有在企业版中使用。用户在迁移前需要将非 InnoDB 引擎的数据转为 InnoDB 引擎。

坑 5:高可用性方案差异(2025 年 1 月 21 日资料)
在 MariaDB 中高可用性是由 Galera 提供的插件实现的,而 MySQL 则提供了原生的 InnoDB Cluster、InnoDB ClusterSet 及 ReplicaSet 等方案实现高可用性和容灾。

参考来源

来源:CSDN 博客 - 如何实现 MariaDB 迁移到 MySQL 数据库(2025 年 1 月 21 日发布)

来源:开源社区 - MariaDB 到 MySQL 数据迁移案例分享(2024 年 3 月 12 日发布)

来源:腾讯云文档 - MySQL/MariaDB/Percona/TDSQL-C MySQL 迁移至 MariaDB(2025 年 6 月 4 日收录)

来源:技术教程 - mysql/mariadb 主从同步配置全解步骤教程(2022 年 2 月 23 日资料)