帮你快速理解、总结文档立即下载
文档中心>实践教程>数据传输服务>基于 DTS 搭建 MySQL 同步灾备实践教程

基于 DTS 搭建 MySQL 同步灾备实践教程

最近更新时间:2026-08-14 14:55:06
我的收藏

方案概览

本方案适用于腾讯云上 MySQL 生产实例搭建灾备架构的场景。通过 DTS 数据同步(全量+增量)将主库 A 实时同步至灾备库 B,主库故障时快速切换至灾备库。切换后根据主库 A 的恢复情况,搭建 B→A 反向同步链路切回 A,或为新主库 B 搭建 B→C 灾备同步链路,确保灾备能力不中断。

方案架构

业务场景

MySQL 生产实例已在腾讯云上稳定运行,但缺少灾备架构。当实例所在可用区发生基础设施故障、数据库主节点出现不可恢复的异常、或因运维操作失误导致数据损坏时,业务中断时间完全取决于故障修复或数据恢复的速度,RTO 不可控。
本方案推荐使用 DTS 数据同步链路将主库 A 的全量 + 增量数据实时同步至灾备库 B。灾备库 B 平时不对外提供服务,仅作为 A 的热备副本——数据延迟通常在秒级。当主库 A 发生故障时,结束 A→B 同步任务并将业务切换至 B。
切换至 B 后,根据主库 A 的恢复情况选择不同的后续操作:
A 可恢复(灾备演练、计划内维护、临时故障等):搭建 B→A 反向同步链路,数据追平后将业务切回 A。
A 不可恢复(可用区级故障、数据严重损坏等):为新主库 B 搭建 B→C 灾备同步链路,确保灾备能力不中断。

架构图



方案优势

RPO 趋近于 0:灾备库实时保持与主库数据一致,基于 Binlog 的增量同步延迟通常在秒级,切换时数据丢失最小化。
RTO 可控:切换流程明确,结束同步任务后即可将业务指向灾备库,RTO 可控制在分钟级。
灾备不断档:切换完成后可快速重建灾备链路(反向同步或新建灾备),灾备能力不存在空窗期。
支持异地容灾:灾备库可部署在不同地域,满足跨地域容灾合规要求。
双向同步能力:MySQL 链路内置破环机制,支持双向同步,灵活应对灾备切换和回切场景。
对源库影响小:默认无锁方式同步,增量阶段仅一个连接监听 Binlog,对源库性能几乎无影响。

前提条件

已注册腾讯云账号并完成实名认证。
源数据库和目标数据库符合 DTS 同步功能和版本要求,请参见 MySQL/MariaDB/Percona 同步至 MySQL 使用说明
已根据接入类型完成网络打通(公网/专线/VPN/云联网),请参见 准备工作概述
已在源端和目标端创建满足权限要求的数据库账号。
在源数据库中对执行任务账号进行授权,参考如下:
-- 方式一:简化授权
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHOW VIEW,PROCESS,SELECT ON *.* TO '账号'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON `__tencentdb__`.* TO '账号'@'%';
FLUSH PRIVILEGES;
-- 方式二:分步授权
-- (1) 创建执行任务账号
CREATE USER '账号'@'%' IDENTIFIED BY '密码';
-- (2) 授予权限
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW VIEW,PROCESS ON *.* TO '账号'@'%';
GRANT ALL PRIVILEGES ON `__tencentdb__`.* TO '账号'@'%';
-- (3) 授权 SELECT 权限(选择整个实例同步时授权所有对象)
GRANT SELECT ON *.* TO '账号';
-- (4) 刷新权限
FLUSH PRIVILEGES;
目标库账号需要具备以下权限:
ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES,
CREATE USER, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT,
LOCK TABLES, PROCESS, REFERENCES, RELOAD, SELECT, SHOW DATABASES,
SHOW VIEW, TRIGGER, UPDATE

注意事项

DTS 执行全量数据同步时会占用源端实例资源,可能导致源实例负载上升,建议在业务低峰期执行。以 8 核 16G 规格为例,全量导出阶段约占用 18%-45% CPU、增加约 40-60MB/s 查询压力;增量阶段仅一个连接监听 Binlog,基本无压力。
默认采用无锁方式,同步过程中对源库不加全局锁(FTWRL),仅对无主键的表加表锁。
DTS 会在源库中写入系统库 __tencentdb__,用于记录数据对比信息。占用空间极小(约为源库存储空间的千分之一到万分之一),对源库性能几乎无影响。同步任务结束后不会自动删除该系统库,请勿手动删除。
同步过程中请勿修改或删除源端和目标端的数据库用户信息(包括用户名、密码和权限)及端口号。
请勿在源库上执行清除 Binlog 的操作。
建议源库开启 GTID,避免 HA 切换时导致增量同步中断。非 GTID 实例发生 HA 切换可能导致 DTS 增量同步中断。
MySQL 链路支持双向同步(内置破环机制),但灾备场景中建议任何时刻仅一端写入,避免数据冲突。
建议同步有主键或者非空唯一键的表,以避免数据重复。
只支持同步 InnoDB、TokuDB、RocksDB 三种数据库引擎的表。

操作步骤概要

1. 创建灾备同步任务(A→B),初始化类型选择结构初始化 + 全量数据初始化
2. 主库 A 故障或需要维护时,根据 A 的状态执行灾备切换与重建:
A 可恢复时,切换至 B 后搭建 B→A 反向同步并切回 A。
A 不可恢复时,切换至 B 后创建 B→C 新灾备。

详细操作步骤

步骤一:创建灾备同步任务(A→B)

说明:
各参数的详细配置说明请参见 MySQL/MariaDB/Percona 同步至 MySQL 操作指导
1. 登录 DTS 控制台,在左侧导航栏选择数据同步
2. 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
3. 购买完成后,返回数据同步列表,单击操作列的配置,进入配置同步任务页面。
4. 设置同步源和目标数据库页签,配置任务信息、源库和目标库连接参数,然后单击测试连通性。测试通过后,单击下一步
源端选择主库 A。
目标端选择灾备库 B。
5. 设置同步选项和同步对象页签,配置数据初始化选项、数据同步选项和同步对象,设置完成后单击保存并下一步
初始化类型选择结构初始化 + 全量数据初始化
主键冲突处理选择冲突覆盖
同步对象选择整个实例或指定对象。
注意:
主键冲突处理推荐选择冲突覆盖:该策略将 INSERT 改写为 REPLACE INTO,UPDATE 改写为 DELETE + REPLACE INTO,确保灾备库始终以主库数据为准。
冲突忽略策略仅对 INSERT 冲突生效,UPDATE 冲突时任务仍会报错,不适合灾备场景。
如果源端有 CREATE TABLE 或 RENAME TABLE 操作,同步对象需勾选该表所在的整个库,否则新建/重命名的表不会同步到目标端。
6. (可选)在数据加工页签,可按需配置 DDL/DML 过滤规则和 Where 条件过滤。灾备场景通常保持默认(全量同步所有 DML 和 DDL)。
7. 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
8. 在校验任务页面,完成校验并全部校验项通过后,单击立即启动。任务启动后进入持续同步状态。

步骤二:灾备切换与重建

确认主库 A 需要切换(计划内维护、故障等)时,根据主库 A 的状态选择对应方案。

场景一:主库 A 可恢复

适用于灾备演练、计划内维护、临时故障等主库 A 仍可访问且后续可恢复的场景。
1. 切换至灾备库 B
1.1 登录 DTS 控制台,确认灾备同步任务(A→B)的同步步骤显示为同步中,目标与源库数据差距为 0 KB,时间延迟为 0 秒。
1.2 暂停主库 A 的业务,停止新的数据写入。
1.3 在同步任务操作列选择更多 > 结束,结束 A→B 同步任务。
1.4 验证源库和目标库的数据一致后,将业务系统的数据库连接地址指向灾备库 B,恢复业务使用。
2. 创建反向同步任务(B→A)
1. 在 DTS 控制台左侧导航栏选择数据同步
2. 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
3. 设置同步源和目标数据库页签,填写源和目标数据库连接信息,然后单击测试连通性,测试通过后单击下一步
源端选择灾备库 B(当前主库)。
目标端选择原主库 A。
4. 设置同步选项和同步对象页签,对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
初始化类型选择不选择
5. (可选)在数据加工页签,可按需配置 DDL/DML 过滤规则和 Where 条件过滤。
6. 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
7. 在校验任务页面,完成校验并全部校验项通过后,单击立即启动
3. 切回原主库 A
1. 登录 DTS 控制台,确认反向同步任务(B→A)的同步步骤显示为同步中,目标与源库数据差距为 0 KB,时间延迟为 0 秒。
2. 暂停灾备库 B 的业务,停止新的数据写入。
3. 在同步任务操作列选择更多 > 结束,结束 B→A 同步任务。
4. 验证源库和目标库的数据一致后,将业务系统的数据库连接地址指向原主库 A,恢复业务使用。

场景二:主库 A 不可恢复

适用于可用区级故障、数据严重损坏等主库 A 完全不可用的场景。
1. 切换至灾备库 B
1. 登录 DTS 控制台,以灾备库 B 当前已同步的数据为准执行切换。
2. 在同步任务操作列选择更多 > 结束,结束 A→B 同步任务。
3. 将业务系统的数据库连接地址指向灾备库 B,恢复业务使用。
2. 创建灾备同步任务(B→C)
1. 在 DTS 控制台左侧导航栏选择数据同步
2. 单击新建同步任务,在新建同步任务页面,选择同步的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买
3. 设置同步源和目标数据库页签,填写源和目标数据库连接信息,然后单击测试连通性,测试通过后单击下一步
源端选择新主库 B。
目标端选择新灾备库 C。
4. 设置同步选项和同步对象页签,对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步
初始化类型选择结构初始化 + 全量数据初始化
同步对象选择范围与步骤一保持一致。
5. (可选)在数据加工页签,可按需配置 DDL/DML 过滤规则和 Where 条件过滤。
6. 设置一致性校验页面,勾选开启数据一致性校验,配置参数后,单击下一步
7. 在校验任务页面,完成校验并全部校验项通过后,单击立即启动。任务启动后进入持续同步状态。

常见问题

Q:MySQL 是否支持两端同时写入(异地多活)?

DTS MySQL 同步链路支持双向同步且内置破环机制,可以两端同时写入。但灾备场景中,强烈建议任何时刻仅一端写入,以避免数据冲突和不一致。如果业务确实需要异地多活,请参考 DTS 双向同步功能的使用限制,确保双写数据不冲突。

Q:灾备库 B 的实例规格如何选择?

建议灾备库 B 的实例规格与主库 A 保持一致或略高。灾备切换后 B 将直接承接生产负载,如果规格不足可能导致切换后性能不达预期。建议在日常运维中定期对灾备库进行性能验证。

Q:灾备切换后,原主库 A 的数据如何处理?

如果原主库 A 可恢复,通过反向同步任务(B→A)将 B 上的增量数据同步回 A,数据追平后可切回。
如果原主库 A 不可恢复,可在 A 修复后作为新的灾备库,从 B 重新同步数据。
无论哪种场景,都建议保留原主库 A 的数据,以便后续比对和恢复。

Q:反向同步为什么不选择全量初始化?

在灾备切换场景中,切换前的步骤已确保 A 和 B 数据完全一致(同步延迟为 0 时才切换)。因此反向同步只需要同步 B 上新产生的增量数据即可,无需重新全量初始化。选择全量初始化反而会增加不必要的时间消耗和资源占用。

相关文档

文档
说明
MySQL 同步任务的详细配置步骤和参数说明。
DTS 任务创建前的网络打通、账号准备等前置工作指导。
双向同步链路的构建方法和限制条件。
冲突报错、冲突忽略、冲突覆盖三种策略的适用场景。
数据迁移/同步完成后的割接步骤和注意事项。
同步任务的监控指标说明和告警配置参考。