操作场景
本文为您介绍使用数据传输服务 DTS 从 MySQL、MariaDB、Percona 数据库同步数据至腾讯云数据库 MySQL 的过程。
源/目标数据库支持的部署形态和版本如下:
同步链路 | 源数据库及版本 | 目标数据库及版本 |
MySQL > MySQL | IDC/CVM 自建 MySQL/轻量数据库 MySQL | IDC 自建/CVM 自建 MySQL/轻量数据库 MySQL 第三方云厂商 MySQL 云数据库 MySQL |
| 第三方云厂商 MySQL | IDC 自建/CVM 自建 MySQL/轻量数据库 MySQL 第三方云厂商 MySQL 云数据库 MySQL |
| 云数据库 MySQL 相同腾讯云主账号下数据库之间同步 不同腾讯云主账号下数据库之间同步 | IDC 自建/CVM 自建 MySQL/轻量数据库 MySQL 第三方云厂商 MySQL 云数据库 MySQL |
MariaDB > MySQL | IDC/CVM 自建 MariaDB | IDC 自建/CVM 自建 MySQL/轻量数据库 MySQL 第三方云厂商 MySQL 云数据库 MySQL |
| 云数据库 MariaDB 相同腾讯云主账号下数据库之间同步 | IDC 自建/CVM 自建 MySQL/轻量数据库 MySQL 第三方云厂商 MySQL 云数据库 MySQL |
Percona > MySQL | IDC/CVM 自建 Percona | IDC 自建/CVM 自建 MySQL/轻量数据库 MySQL 第三方云厂商 MySQL 云数据库 MySQL |
因为 MySQL、MariaDB、Percona 同步至腾讯云数据库 MySQL,三种场景的同步要求和操作步骤基本一致,本章节仅以 MySQL 到 MySQL 的数据同步为例进行介绍,其他场景请参考相关内容。
业务影响
1. DTS 在执行全量数据同步时,会将源库的全量数据全部读取一次,所以会增加源库的负载。如果您的数据库规格过低,建议您在业务低峰期进行同步任务,或者在任务启动前降低 DTS 的速率。
源库的规格不同,影响也不同,以源库规格为 8 核 16G 为例,DTS 任务默认采用 8 线程并发(可调整),在网络无瓶颈的情况下,DTS 任务对源库的性能影响如下:
DTS 全量导出阶段:占用源库约 18%-45% 的 CPU,增加源库约 40-60MB/s 的查询压力,占用约 8 个活跃 session 连接数。
DTS 增量导出阶段:对源数据库基本无压力,只有一个连接实时监听源库的 binlog 日志。
2. 默认采用无锁方式,同步过程中对源库不加全局锁(FTWRL),仅对无主键的表加表锁,其他不加锁。
3. 数据同步时,DTS 会使用执行同步任务的账号在源库中写入系统库
__tencentdb__
,用于记录同步任务过程中的数据对比信息,请勿删除该系统库。为保证后续数据对比问题可定位,同步任务结束后不会删除源库中的
__tencentdb__
。__tencentdb__
系统库占用空间非常小,约为源库存储空间的千分之一到万分之一(例如源库为50GB,则__tencentdb__
系统库约为5MB-50MB) ,并且采用单线程,等待连接机制,所以对源库的性能几乎无影响,也不会抢占资源。准备工作
1. 已准备好源和目标数据库,且源和目标数据库的版本符合要求,请参考 数据同步支持的数据库 进行核对。
2. 请根据您需要使用的接入类型,提前打通 DTS 与数据库之间的访问通道,具体请参考 网络准备工作。
IDC 自建数据库/其他云厂商数据库:接入方式可选择“公网/专线接入/VPN 接入/云联网”。
CVM 上的自建数据库:接入方式选择“云主机自建”。
腾讯云数据库实例:接入方式选择“云数据库”。
轻量应用服务器上的 轻量数据库:接入方式选择“公网”。
3. 在源数据库中对执行任务账号进行授权,参考如下:
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHOW VIEW,PROCESS,SELECT ON *.* TO '账号'@'%' IDENTIFIED BY '密码';//源库为阿里云数据库时,不需要授权 SHOW DATABASES,但需要创建至少一个非系统库,否则前置校验任务会失败。其他非阿里云数据库场景则需要授权。阿里云数据库授权,请参考 https://help.aliyun.com/document_detail/96101.htmlGRANT ALL PRIVILEGES ON `__tencentdb__`.* TO '账号'@'%';FLUSH PRIVILEGES;
4. 在目标库中对执行任务账号进行授权,需要具备的权限如下。
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。
使用说明
同步对象
1. 只支持同步基础表、视图、存储过程和函数。
2. 相互关联的数据对象需要一起同步,否则会导致同步失败。常见的关联关系:视图引用表、视图引用视图、主外键关联表等。
3. 为了避免数据重复,建议同步有主键或者非空唯一键的表。
4. 不支持选择源端整个实例进行同步,如果在后续同步任务中,源端有新建库的操作(CREATE DATABASE),建议在同步任务启动前,自行在目标端创建好该库对象,或者在同步任务启动后,通过修改同步配置操作来追加新增的库对象。
5. 如果在同步任务过程中,源端有 CREATE TABLE,RENAME TABLE 操作,请在配置阶段选择同步对象时,勾选该表所在的整库,否则新建的表,或者 RENAME 后的表不会同步到目标端。
6. 在同步视图、存储过程和函数时,DTS 会检查源库中
DEFINER
对应的 user1( [DEFINER = user1])和同步账号 user2 是否一致,如果不一致,同步后 DTS 会修改 user1 在目标库中的 SQL SECURITY
属性,由 DEFINER
转换为 INVOKER
( [INVOKER = user1]),同时设置目标库中 DEFINER
为同步账号 user2([DEFINER = 同步账号 user2])。如果源库中视图定义过于复杂,可能会导致任务失败。7. 源数据库为阿里云 MySQL,则阿里云 MySQL 5.6 版本待同步表不能存在无主键表,MySQL 5.7 及以后版本不限制。源数据库为 AWS MySQL,则 AWS MySQL 待同步表不能存在无主键表。
8. 只支持同步 InnoDB、TokuDB、RocksDB 三种数据库引擎,如果存在这三种以外的数据引擎表则默认跳过不进行同步。其中,源库如果存在压缩模式的 TokuDB 引擎数据,需要目标库同步支持压缩模式才可以同步,否则任务会报错。
9. 目标端为腾讯云 MySQL 数据库实例且为 RocksDB 引擎时,支持源端 InnoDB/TokuDB 引擎转化为目标 RocksDB 引擎,但在 InnoDB 转化为 RocksDB 引擎时存在以下约束。
9.1 如果源库待迁移表的主键或主键的一部分为 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT 字段类型,因为目标端上这些字段类型不支持“值判等”,所以相关“值判等”的 SQL (例如 DELETE FROM table_name WHERE primary_key_column = 'some text')同步到目标端后无法生效,最终可能会导致目标端与源端的数据结果不一致。
9.2 进行数据一致性校验时,如果源库待迁移表的主键或主键的一部分为 TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT 字段类型,并且表的行数超过5万行,则该表会被跳过,不进行一致性校验。
9.3 因 RocksDB 引擎和 InnoDB 引擎对于 DOUBLE 数据类型在底层存储有差别,当源端 DOUBLE 数值接近上限(例如 -1.7976931348623157E+308),可能在创建一致性校验任务时出现误报,实际数据是一致的,但是校验结果显示不一致。
9.4 不支持迁移涉及分区(partition)的表。
数据类型
1. 增量同步过程中,若源库产生了类型为
STATEMENT
格式的 Binlog 语句,则会导致同步失败。2. 源数据库 Binlog 的 GTID 如果存在空洞,可能会影响同步任务的性能并导致任务失败。
3. 不支持同时包含 DML 和 DDL 语句在一个事务的场景,遇到该情况任务会报错。
4. 不支持 Geometry 相关的数据类型,遇到该类型数据任务报错。
5. 不支持
ALTER VIEW
语句,遇到该语句任务跳过不同步。HA 切换
源端如果是非 GTID 实例,DTS 不支持源端 HA 切换,一旦源端 MySQL 发生切换可能会导致 DTS 增量同步中断。
主键冲突策略
主键冲突策略选择“冲突报错”时,在任务的全量同步阶段,请不要在目标端进行双写,否则发生的主键冲突问题,DTS 不会提示报错,会用源端的数据覆盖掉目标端。
操作限制
同步过程中请勿进行如下操作,否则会导致同步任务失败。
1. 选择结构初始化和全量数据初始化场景中,当同步任务步骤为“全量导出”、“全量导入”时,不支持 DDL 操作。
2. 请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号。
3. 请勿在源库上执行清除 Binlog 的操作。
支持同步的 SQL 操作
操作类型 | SQL 操作语句 |
DML | INSERT、UPDATE、DELETE |
DDL | DROP DATABASE、ALTER DATABASE、CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE、RENAME TABLE、CREATE VIEW、DROP VIEW、CREATE INDEX、DROP INDEX |
说明:
暂不支持 CREATE TABLE 表名 AS SELECT 语句。
操作步骤
1. 登录 数据同步购买页,选择相应配置,单击立即购买。
参数 | 描述 |
计费模式 | 支持包年包月和按量计费。 |
源实例类型 | 选择 MySQL,购买后不可修改。 |
源实例地域 | 选择源实例所在地域,购买后不可修改。 |
目标实例类型 | 选择 MySQL,购买后不可修改。 |
目标实例地域 | 选择目的实例所在地域,购买后不可修改。 |
规格 |
2. 购买完成后,返回 数据同步列表,可看到刚创建的数据同步任务,刚创建的同步任务需要进行配置后才可以使用。
3. 在数据同步列表,单击操作列的配置,进入配置同步任务页面。
4. 在配置同步任务页面,配置源端实例、账号密码,配置目标端实例、账号和密码,测试连通性后,单击下一步。
任务设置
参数 | 描述 |
任务名称 | DTS 会自动生成一个任务名称,建议用户修改为一个具有业务意义的名称,便于任务识别。 |
运行模式 | 立即执行:前置校验通过后会立即启动任务。 定时执行:设置一个任务开始执行的时间,前置校验通过后不启动任务,到设定的时间再启动。 |
自动重试 | 设置后,同步任务因网络异常等引起的任务临时中断,DTS 将在设置的时间范围内自动重试和恢复任务,不需要用户手动操作。 支持设置的时间范围为5分钟-720分钟。 |
源库设置
参数 | 描述 |
源实例类型 | 购买时所选择的源实例类型,不可修改。 |
源实例地域 | 购买时选择的源实例所在地域,不可修改。 |
服务提供商 | 自建数据库(包括云服务器上的自建)、腾讯云数据库实例、轻量数据库,请选择“普通”。 第三方云厂商数据库,请选择对应的服务商。 |
接入类型 | 公网:源数据库可以通过公网 IP 访问。 云主机自建:源数据库部署在 腾讯云服务器 CVM 上。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 选择原则如下: IDC 自建数据库/其他云厂商数据库:接入方式可选择“公网/专线接入/VPN 接入/云联网”。 CVM 上的自建数据库:接入方式选择“云主机自建”。 腾讯云数据库实例:接入方式选择“云数据库”。 轻量应用服务器上的轻量数据库:接入方式选择“公网”。 |
公网 | 接入类型选择“公网”时,需要配置如下参数。 主机地址:源数据库 IP 地址或域名。 端口:源数据库使用的端口。 |
云主机自建 | 接入类型选择“云主机自建”时,需要配置如下参数。 云主机实例:云服务器 CVM 的实例 ID。 端口:源数据库使用的端口。 |
专线接入 | 接入类型选择“专线接入”时,需要配置如下参数。 私有网络专线网关:专线接入时只支持私有网络专线网关,请确认网关关联的网络类型。 私有网络:选择私有网络和子网。 主机地址:源数据库 IP 地址。 端口:源数据库使用的端口。 |
VPN 接入 | 接入类型选择“VPN 接入”时,需要配置如下参数。 VPN 网关:VPN 网关,请选择 VPN 网关 ID。 私有网络:选择 VPN 网关关联的私有网络和子网。 主机地址:源数据库 IP 地址。 端口:源数据库使用的端口。 |
云数据库 | 接入类型选择“云数据库”时,需要配置如下参数。 是否跨账号 本账号:源数据库实例和目标数据库实例所属的主账号为同一个腾讯云主账号。 跨账号:源数据库实例和目标数据库实例所属的主账号为不同的腾讯云主账号。跨账号操作指导请参见 云数据库跨账号实例间迁移。 云数据库实例:源数据库的实例 ID。 |
云联网 | 接入类型选择“云联网”时,需要配置如下参数。 主机所在网络环境:请根据实际情况选择。例如源库为腾讯云数据库实例,选择“腾讯云”;源库为 IDC 自建数据库,选择“自建 IDC”;源库为其他云厂商数据库,则选择对应的网络。 主机地址:源数据库的主机 IP 地址。 端口:源数据库使用的端口。 云联网实例所属账号 我的账号:云联网资源和目标数据库归属同一个腾讯云主账号。 其他账号:云联网资源和目标数据库归属不同的腾讯云主账号。 私有网络云联网:云联网实例名称。 云联网关联 VPC 及子网:“云联网关联 VPC”指云联网中接入同步链路的 VPC。请在云联网关联的所有 VPC 中,选择除了源数据库所属 VPC 外的其他 VPC。 VPC 所属地域:购买任务时选择的源数据库地域与接入 VPC 地域需要保持一致,如果不一致,DTS 会将购买任务中选择的源数据库地域,改为接入 VPC 地域。 |
账号/密码 | 账号/密码:源数据库的账号、密码。 |
连接方式 | SSL 安全连接指 DTS 与数据库通过 SSL(Secure socket layer)安全连接,对传输链路进行加密。 选择 SSL 安全连接可能会增加数据库的连接响应时间,一般腾讯云内网链路相对较安全,无需开启 SSL 安全连接,采用公网/专线等传输方式,并且对数据安全要求较高的场景,需要开启 SSL 安全连接。选择 SSL 安全连接前,需要先在数据库中开启 SSL 加密。 |
目标库设置
目标库参数设置与源库类似,接入类型根据实际的情况选择,此处不再赘述。
5. 在设置同步选项和同步对象页面,将对数据初始化选项、数据同步选项、同步对象选项进行设置,在设置完成后单击保存并下一步。
说明:
当初始化类型仅选择全量数据初始化,系统默认用户在目标库已经创建了表结构,不会进行表结构同步,也不会校验源库和目标库是否有同名表,所以当用户同时在已存在同名表中选择前置校验并报错,则校验并报错功能不生效。
如果用户在同步过程中确定会对某张表使用 rename 操作(例如将 table A rename 为 table B),则同步对象需要选择 table A 所在的整个库(或者整个实例),不能仅选择 table A,否则 rename 操作后,table B 的数据不会同步到目标库。
设置项 | 参数 | 描述 |
数据初始化选项 | 初始化类型 | 结构初始化:同步任务执行时会先将源实例中表结构初始化到目标实例中。 全量数据初始化:同步任务执行时会先将源实例中数据初始化到目标实例中。仅选择全量数据初始化的场景,用户需要提前在目标库创建好表结构。 默认两者都勾上,可根据实际情况取消。 |
| 已存在同名表 | 前置校验并报错:存在同名表则报错,流程不再继续。 忽略并继续执行:全量数据和增量数据直接追加目标实例的表中。 |
数据同步选项 | 冲突处理机制 | 冲突报错:在同步时发现表主键冲突,报错并暂停数据同步任务。 冲突忽略:在同步时发现表主键冲突,保留目标库主键记录。 冲突覆盖:在同步时发现表主键冲突,用源库主键记录覆盖目标库主键记录。 |
| 同步操作类型 | 支持操作:Insert、Update、Delete、DDL。勾选“DDL 自定义”,可以根据需要选择不同的 DDL 同步策略。 |
同步对象选项 | 源实例库表对象 | 选择待同步的对象,支持基础库表、视图、存储过程和函数。高级对象的同步是一次性动作,仅支持同步在任务启动前源库中已有的高级对象,在任务启动后,新增的高级对象不会同步到目标库中。更多详情,请参考 同步高级对象。 |
| 已选对象 | 支持库表映射(库表重命名),将鼠标悬浮在库名、表名上即显示编辑按钮,单击后可在弹窗中填写新的名称。 依次勾选单个表对象后,可设置 Where 条件,详情参考 Where 条件过滤。 选择高级对象进行同步时,建议不要进行库表重命名操作,否则可能会导致高级对象同步失败。 |
| 是否同步 Online DDL 临时表 | 如果使用 gh-ost、pt-osc 工具对源库中的表执行 Online DDL 操作,DTS 支持将 Online DDL 变更产生的临时表同步到目标库。 勾选 gh-ost,DTS 会将 gh-ost 工具产生的临时表名(`_表名_ghc`、`_表名_gho`、`_表名_del`)同步到目标库。 勾选 pt-osc, DTS 会将 pt-osc 工具产生的临时表名(`_表名_new`、 `_表名_old`)同步到目标库。 |
高级选项
参数 | 描述 |
限制传输速率 |
6. 在校验任务页面,完成校验并全部校验项通过后,单击启动任务。
如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。
失败:表示校验项检查未通过,任务阻断,需要修复问题后重新执行校验任务。
警告:表示检验项检查不完全符合要求,可以继续任务,但对业务有一定的影响,用户需要根据提示自行评估是忽略警告项还是修复问题再继续。
7. 返回数据同步任务列表,任务开始进入运行中状态。
说明:
选择操作列的更多 > 结束可关闭同步任务,请您确保数据同步完成后再关闭任务。
8. (可选)您可以单击任务名,进入任务详情页,查看任务初始化状态和监控数据。