文档中心>数据传输服务>数据同步>同步至 MySQL 系列>同步至 MariaDB>MySQL/MariaDB/Percona/TDSQL-C MySQL 同步至 MariaDB

MySQL/MariaDB/Percona/TDSQL-C MySQL 同步至 MariaDB

最近更新时间:2024-10-12 16:29:11

我的收藏
本文为您介绍使用数据传输服务 DTS 从 MySQL、MariaDB、Percona、TDSQL-C MySQL 数据库同步数据至腾讯云数据库 MariaDB 的过程。
源数据库支持的部署类型如下:
自建 MySQL、腾讯云数据库 MySQL。
自建 MariaDB、腾讯云数据库 MariaDB。
自建 Percona。
腾讯云数据 TDSQL-C MySQL。
因为 MySQL、MariaDB、Percona、TDSQL-C MySQL 同步至腾讯云数据库 MariaDB,三种场景的同步要求和操作步骤基本一致,本章节仅以 MariaDB 到 MariaDB 的数据同步为例进行介绍,其他场景请参考相关内容。

注意事项

DTS 在执行全量数据同步时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您数据库配置过低,建议您在业务低峰期进行。
为了避免数据重复,请确保需要同步的表具有主键或者非空唯一键。
默认采用无锁方式,同步过程中对源库不加全局锁(FTWRL),仅对无主键的表加表锁,其他不加锁。
数据同步时,DTS 会使用执行同步任务的账号在源库中写入系统库__tencentdb__,用于记录同步任务过程中的数据对比信息。
为保证后续数据对比问题可定位,同步任务结束后不会删除源库中的__tencentdb__
__tencentdb__系统库占用空间非常小,约为源库存储空间的千分之一到万分之一(例如源库为50GB,则__tencentdb__系统库约为5MB - 50MB),并且采用单线程,等待连接机制,所以对源库的性能几乎无影响,也不会抢占资源。

前提条件

1. 源数据库和目标数据库符合同步功能和版本要求,请参考 数据同步支持的数据库 进行核对。
2. 请根据您需要使用的接入类型,提前打通 DTS 与数据库之间的访问通道,具体请参考 网络准备工作
IDC 自建数据库/轻量数据库/其他云厂商数据库:接入方式可选择“公网/专线接入/VPN 接入/云联网”。
CVM 上的自建数据库:接入方式选择“云主机自建”。
腾讯云数据库实例:接入方式选择“云数据库”。
3. 需要具备源数据库的权限如下:
GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW VIEW,PROCESS,SELECT ON *.* TO '帐号'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON `__tencentdb__`.* TO '帐号'@'%';
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。

使用说明

同步对象

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、MyISAM、TokuDB 三种数据库引擎,如果存在这三种以外的数据引擎表则默认跳过不进行同步。其中,源库如果存在压缩模式的 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 语句。

环境要求

类型
环境要求
源数据库要求
源库和目标库网络能够连通。
实例参数要求:
源库 server_id 参数需要手动设置,且值不能设置为0。
源库表的 row_format 不能设置为 FIXED。
源库和目标库 lower_case_table_names 变量必须设置一致。
源库变量 connect_timeout设置数值必须大于10。
Binlog 参数要求:
源端 log_bin 变量必须设置为 ON。
源端 binlog_format 变量必须设置为 ROW。
源端 binlog_row_image 变量必须设置为 FULL。
MySQL 5.6 及以上版本 gtid_mode 变量不为 ON 时会报警告,建议打开 gtid_mode。
不允许设置 do_db, ignore_db。
源实例为从库时,log_slave_updates 变量必须设置为 ON。
建议源库 Binlog 日志至少保留3天及以上,否则可能会因任务暂停/中断时间大于 Binlog 日志保留时间,造成任务无法续传,进而导致任务失败。
外键依赖:
外键依赖只能设置为 NO ACTION,RESTRICT 两种类型。
部分库表同步时,有外键依赖的表必须齐全。
环境变量 innodb_stats_on_metadata 必须设置为 OFF。
目标数据库要求
目标库的版本必须大于等于源库的版本。
目标库需要有足够的存储空间,如果初始类型选择“全量数据初始化”,则目标库的空间大小须是源库待同步库表空间的1.2倍以上。
目标库不能有和源库同名的表、视图等同步对象。
目标库 max_allowed_packet 参数设置数值至少为4M。

操作步骤

本场景操作步骤与 MySQL 数据同步至 MySQL 的一致,请参考 MySQL 同步场景的操作步骤。