MariaDB/Percona 迁移至 MySQL

最近更新时间:2024-07-29 10:14:51

我的收藏
从 MariaDB 或者 Percona 迁移数据至 MySQL 的操作指导,与 MySQL 迁移到 MySQL 的使用说明和操作步骤一致,本章节仅对差异点进行介绍,其他内容请参考 MySQL 到 MySQL 的迁移 进行配置。
说明:
腾讯云数据库 MariaDB 支持三种内核 MariaDB、Percona 和 MySQL,用户在使用时不需要区分哪种内核,如果源数据库为腾讯云 MariaDB,不论源数据库的内核是 MariaDB、Percona 还是 MySQL,在设置源数据库或目标数据库的类型时,都选择 MariaDB。

异构迁移兼容性说明

MariaDB 迁移到 MySQL,由于不同的数据库类型之间功能有略微差异,会存在以下兼容性问题。
1. 由于 MariaDB 自身的功能特性,部分 SQL 执行语句与 SHOW CREATE TABLE 不一致,可能导致目标端同步的 DDL 语句有差别。
MariaDB 中的 blob 类型不指定默认值,创建表后 SHOW CREATE TABLE 会显示有默认值 DEFAULT NULL。
datetime 类型 DDL 语句在源数据为 datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP,创建表后 SHOW CREATE TABLE 显示 datetime NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE current_timestamp(),在目标端 MySQL 解析的 DDL 为:datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP
2. 一些仅 MariaDB 支持的语法(例如 CREATE OR REPLACE TABLE/PERIOD FOR/WITHOUT OVERLAPS 等),在全量阶段可能导致迁移任务报错,在增量阶段会忽略这些语句。
对于 PERIOD FOR/WITHOUT OVERLAPS 语句,在迁移任务启动前,或者在任务进行中的全量阶段(源库导出和数据导入步骤)有执行该语句,则迁移任务失败;在同步增量阶段执行该语句,则目标端会忽略,数据无法同步到目标端。
对于 CREATE OR REPLACE TABLE 语句, 由于在全量迁移阶段,不能执行库或表结构变更的 DDL 操作,所以全量阶段执行该语句,迁移任务会失败;在同步增量阶段执行该语句,则目标端会忽略,数据无法同步到目标端。
3. MariaDB 允许 blob/text 等有默认值,但 MySQL 不允许,如果有这种类型的 SQL 会导致迁移任务报错。

约束限制

1. 源数据库为腾讯云 MariaDB 时,应用限制如下。
DTS 迁移任务要求源库、目标库的 lower_case_tame_name 参数(表名大小敏感)保持一致,如果源数据库为腾讯云数据库 MariaDB,由于云数据库 MariaDB 只能在创建实例时修改 lower_case_tame_name 参数,所以用户需要在创建源库实例时确定大小写敏感规则,并在参数校验不一致时,修改目标库的 lower_case_tame_name 参数。
源数据库为腾讯云数据库 MariaDB 10.4 版本时,在迁移任务配置中,接入类型不支持选择云数据库,需要选择公网或者其他方式。
2. 对于 MariaDB 的特有语法,如 CREATE OR REPLACE TABLE/PERIOD FOR/WITHOUT OVERLAPS,在全量阶段可能导致迁移任务报错,在增量阶段会忽略这些语句。