You need to enable JavaScript to run this app.
文档中心
数据库传输服务

数据库传输服务

复制全文
下载 pdf
最佳实践
使用 DTS 同步 MariaDB 数据至火山引擎 MySQL 版
复制全文
下载 pdf
使用 DTS 同步 MariaDB 数据至火山引擎 MySQL 版
在数据库上云或更换数据库平台的场景中,您可能需要将本地 IDC、友商云或其他服务器上自建的 MariaDB 数据同步至火山引擎的云数据库 MySQL 版实例中。本文介绍如何在数据库传输服务 DTS 将 MariaDB 数据同步到云数据库 MySQL 版实例。​
前提条件​
  • 已部署可通过公网访问的自建 MariaDB 实例,并创建具备同步权限的数据库账号。​
  • 如源端 MariaDB 开启了访问限制,请先将 DTS 服务器的 IP 地址段添加至源库的白名单或安全组中。更多信息,请参见添加 DTS 服务器的 IP 地址段。​
  • 源端 MariaDB 已开启 Binlog,且 binlog_format 设置为 ROW、binlog_row_image 设置为 FULL、server_id 大于 0,否则预检查会报错且无法启动增量同步。​
  • 源端和目标端所属服务器具备足够的出口带宽,否则会影响数据同步速率。​
注意事项​
  • 当前仅支持同步 MariaDB 10 版本的数据,如需同步 MariaDB 11、MariaDB 12 版本的数据,请提交工单。​
  • 源端 Binlog 至少保留 24 小时,建议保留 7 天以上,避免任务中断或重试期间因日志过期而失败。​
  • DTS 支持常规表结构的自动同步,但 MariaDB 专有的对象、数据类型、函数和语法不会被自动改写,需要您在同步前改造或在目标端手动创建,否则可能会导致结构初始化失败或增量任务报错。​
  • MariaDB 的 GTID 与 MySQL 不兼容,DTS 不使用 GTID 位点:仅增量同步数据时,任务首次启动按时间戳定位起始位点。任务启动后的断点续传按物理位点处理。建议在整个同步窗口内避免源端主备切换,否则任务可能因位点失效而报错。​
  • 暂不支持同步系统内置账号包括:mysql、mariadb.sys、healthcheck,如果业务依赖这些账号,那么请在同步前在目标端创建并授权。​
  • 全量初始化过程中目标数据库会产生大量 Binlog 文件,可能会导致目标库磁盘使用量远大于源实例。建议在全量初始化前调整目标数据库 Binlog 的保留策略。​
  • 完成数据同步后进行业务切换工作时,建议在停止源端写入并暂停相关业务后实施,或在业务低峰期操作,否则将对业务的正常运行造成影响。​
数据库账号最小权限策略​
用于同步的账号需具备以下最小权限:​
​
数据库​
结构初始化​
全量初始化​
增量同步​
源端 MariaDB​
SELECT 权限​
SELECT 权限​
REPLICATION SLAVE、REPLICATION CLIENT 和 SELECT 权限​
目标端 MySQL​
CREATE、DROP、ALTER、INDEX、REFERENCES 权限​
SELECT、INSERT、UPDATE、DELETE 权限​
SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER、DROP、INDEX、REFERENCES 权限​
​
操作步骤​
步骤一:兼容评估与改造​
MariaDB 与 MySQL 同源,但二者存在部分互不兼容的专有对象和语法,同步数据前,您必须对源库进行兼容性评估。通过数据库结构导出工具或人工排查确认是否存在以下 MariaDB 专有特性,若存在不兼容项,须在同步前完成业务改造。​
  1. 兼容性评估:导出源端 MariaDB 的库表结构和对象定义,对照以下内容逐项排查 SEQUENCE、INET6、INVISIBLE、Aria 引擎、向量类型、专有函数等不兼容内容。​
  • ​
    不兼容项​
    影响​
    处理建议​
    SEQUENCE 对象及相关语句​
    MySQL 原生不支持 SEQUENCE 对象,相关 DDL 无法在目标端执行,且 NEXTVAL()、SETVAL() 等函数无法使用。​
    同步前在源端改写:将序列主键列改为 AUTO_INCREMENT 自增列;如需保留序列逻辑,需在业务侧通过单表模拟。​
    INET6 数据类型​
    MySQL 不支持 INET6 类型,使用该类型的相关建表语句会在目标端执行失败。​
    同步前在源端将该列类型转换为兼容类型,例如 VARCHAR(46) 或 VARBINARY(16)。​
    INVISIBLE 隐藏列​
    MySQL 8.0.23 之前版本不支持隐藏列,相关 DDL 语句在目标端执行会报错。​
    如果目标 MySQL 版本不支持隐藏列,请在同步前通过 ALTER TABLE ... MODIFY COLUMN ... 重新声明完整列定义并移除 INVISIBLE 属性。​
    执行前请在测试环境验证,避免列类型、默认值、字符集或注释发生变化。​
    ENGINE=Aria 存储引擎​
    MySQL 不支持 Aria 存储引擎,建表语句在目标端将执行失败。​
    同步前在源端将所有 Aria 引擎表转换为 MySQL 兼容引擎,推荐使用 ALTER TABLE ... ENGINE=InnoDB。​
    向量数据类型与函数​
    MySQL 无原生向量类型及对应操作函数,相关表结构和业务 SQL 无法同步。​
    目标 MySQL 不支持对应向量类型或函数时,相关对象无法直接同步。请在同步前移除或改造相关字段和 SQL。如业务必须保留向量检索能力,需另行评估存储与检索方案。​
    特有系统函数(如 DECODE_ORACLE、动态列函数)​
    MySQL 不支持 DECODE_ORACLE、COLUMN_CREATE()、COLUMN_GET() 和 COLUMN_ADD() 等特有函数,依赖他们的视图、存储过程或业务 SQL 将执行报错。​
    同步前在源端定位并评估调用链,使用 MySQL 兼容语法(如 CASE WHEN)重写视图、存储过程及业务 SQL。​
    JSON 类型及语法差异​
    MariaDB 与 MySQL 在 JSON 的底层实现、函数和操作符支持范围上存在差异。​
    MariaDB 的 JSON 通常以 LONGTEXT 加校验约束实现;不同 MariaDB 版本对 ->、->> 等操作符的支持也不同。​
    同步前请根据源端版本排查 JSON 类型、函数及路径表达式,并改写为目标 MySQL 支持的语法。​
    建议根据业务需求进行选型,并在源端完成相应的语法适配:​
    1. 类型选择:目标端可根据查询和索引需求,选择使用 MySQL 原生 JSON 类型或兼容 TEXT 类型。​
    1. 语法改写:MariaDB 的 JSON 提取符(如 ->、->>)在 MySQL 中不兼容。迁移前需在源端将其替换为 MySQL 标准函数(如将 -> 替换为 JSON_EXTRACT(),->> 替换为 JSON_UNQUOTE())。​
    1. 数据校验:若目标端选用原生 JSON 类型,需提前验证存量数据均为合法 JSON 格式,防止迁移或查询报错。​
    列默认值中的函数表达式​
    不同 MySQL 版本对列默认值中函数表达式(如 DEFAULT (UUID())的支持存在差异,可能导致目标端建表失败。​
    同步前在源端移除列级函数表达式默认值,改为在业务应用侧生成默认值,或在业务层触发器/存储过程中处理。​
    ​
  1. 改造不兼容项示例:根据以下示例完成在源端和目标端的改造,无法通过 DTS 自动同步的对象,手动在目标端 MySQL 内创建。​
  • 示例一:将 MariaDB 独立 SEQUENCE 序列改造为 MySQL 的 AUTO_INCREMENT 自增列​
    ​
  • 示例二:将 INET6 类型改造为 VARCHAR(64)​
    ​
  • 示例三:将 Aria 引擎改造为 InnoDB​
    ​
步骤二:创建数据同步任务和数据校验任务​
同步任务的操作步骤和公有网络 MySQL 同步一致,详细信息,请参见源为公有网络 MySQL 同步至火山引擎版 MySQL。​
  • 在配置源库时,实例类型选择 MySQL,接入方式选择公有网络 MySQL,然后填写 MariaDB 的公网地址、端口、数据库账号和密码。​
  • 为了防止在业务切换后,云上业务出现异常,建议您创建双向同步任务。​
步骤三:数据校验与业务切换​
在停止源端 MariaDB 的业务写入后,需确认源库无活跃写事务,并持续观察 DTS 增量同步延迟。待增量延迟降至 0(或稳定在可接受的低水位),且全量数据校验结果一致后,方可执行最终的业务割接。​
  1. 等待同步完成:等待结构初始化和全量初始化完成,任务进入增量同步阶段,观察增量延迟。​
  1. 源库静默检查:待数据校验结果一致且增量延迟降低至接近 0 后,登录源端 MariaDB 数据库,执行下述命令查看当前会话状态,确保没有新的会话执行写入操作。​
​
SHOW FULL PROCESSLIST;​
​
  1. 执行业务切割:确认源库无写入且同步无延迟后,将业务连接地址切换至目标 MySQL实例(火山引擎云数据库 MySQL 版)。​
步骤四:暂停正向同步任务,启动反向同步任务​
  1. 暂停正向同步任务。详细操作,请参见暂停同步任务。​
当正向同步任务处于已暂停时,请不要随意启动任务,否则可能会导致数据不一致。​
  1. 配置反向同步任务并启动。详细操作,请参见配置反向同步。​
  1. 启动云上业务写入。​
  1. 测试业务功能。​
步骤五:(可选)业务回退​
  1. 如果业务切换后云上数据库出现异常,请立即停止云上业务的写入。​
  1. 切换业务至源端。​
  • 建立反向同步链路:需等待反向同步延迟降至 0,并确认云上新增数据已同步至源端 MariaDB 后,再将业务连接地址切回源端。​
  • 未建立反向同步链路:请勿直接切回源端,应先评估并回迁云上新增数据,避免数据丢失。​
  1. 恢复业务数据的写入。​
最近更新时间:2026.11.03 15:20:32
这个页面对您有帮助吗?
有用
有用
无用
无用