支持的源和目标数据库
支持的源和目标数据库,如下表:
源数据库 | 目标数据库 |
---|---|
RDS for MySQL 自建 MySQL 5.6部分版本/5.7/8.0 |
RDS for MySQL 5.7/8.0 |
说明
源库为自建MySQL数据库时,支持的版本为5.6部分版本/5.7/8.0。
源数据库版本不得高于目标数据库版本。
支持的迁移对象及SQL
迁移对象
- 当前DTS支持表级(指定的表对象)、库级(整库迁移)迁移。
- 支持表、索引、存储过程、视图、函数、事件、触发器的结构迁移。
- 视图、存储过程、函数依赖的表不支持做表名映射。
- 在结构迁移时,如果源数据源中包含视图(VIEW)、函数(FUNCTION)、存储过程(PROCEDURE)、触发器(TRIGGER)、事件(EVENT),DTS会将上述对象的定义者(DEFINER)转换为当前迁移任务中访问目标数据源的账号,原定义者账号将保留调用权限(INVOKER)。
- 数据迁移仅针对数据源中的用户数据库,而系统库会被自动过滤。例如:MySQL 类型数据源中的 information_schema、mysql、performance_schema、sys 库不会出现在可迁移列表当中。
- 迁移过程中,如果待迁移对象中存在触发器或事件,则系统会在全量迁移结束以后才会迁移触发器和事件。
- 若源库为空库(该库下未创建任何表、视图、函数、事件、触发器、存储过程),不支持作为待迁移对象。
增量迁移支持的SQL操作
- DML
INSERT、UPDATE、DELETE。 - DDL
增量迁移的DDL操作仅支持CREATE INDEX、DROP INDEX、ALTER TABLE、TRUNCATE TABLE 和DROP TABLE,如果是整库迁移,支持CREATE TABLE。注意暂不支持 CREATE TABLE 表名 AS SELECT 语句。
数据库账号及权限
数据库账号及权限如下表:
数据库 所需权限 参考赋权语句 源库 源库为MySQL5.7时:
对MySQL库的SELECT权限。
对待迁移库的SELECT,EVENT,TRIGGER权限。
部分全局权限:
LOCK TABLES
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
PROCESS
如果是整实例迁移,需要对所有数据库的查询权限。
源库为MySQL8.0时:
对MySQL库的SELECT权限。
对待迁移库的SELECT, EXECUTE, EVENT,TRIGGER权限。
部分全局权限:
PROCESS
LOCK TABLES
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
SHOW_ROUTINE
如果是整实例迁移,需要对所有数据库的查询权限。
源库为MySQL5.7时:
GRANT SELECT ON mysql.* TO '迁移账号'@'%';
GRANT SELECT, EVENT,TRIGGER ON 待迁移的库.* TO '迁移账号'@'%';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '迁移账号'@'%';
源库为MySQL8.0时:
GRANT SELECT ON mysql.* TO '迁移账号'@'%';
GRANT SELECT, EXECUTE, EVENT, TRIGGER ON 待迁移的库.* TO '迁移账号'@'%';
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW, SHOW_ROUTINE ON *.* TO '迁移账号'@'%';
目标库
以下全局权限:
SHOW DATABASES
PROCESS
CREATE USER
以下18项 库权限:
ALTER
ALTER ROUTINE
CREATE
CREATE ROUTINE
CREATE TEMPORARY TABLES
CREATE VIEW
DELETE
DROP
EVENT
EXECUTE
INDEX INSERT
LOCK TABLES
REFERENCES
SELECT
SHOW VIEW
TRIGGER
UPDATE
GRANT SELECT ON mysql.* TO '迁移账号'@'%';
GRANT SHOW DATABASES,PROCESS,CREATE USER ON *.* TO '迁移账号'@'%';
- GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES,CREATE VIEW, DELETE ,DROP, EVENT, EXECUTE, INDEX, INSERT,LOCK TABLES, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE ON `待迁移库`.* TO '迁移账号'@'%';
注意如果待迁移对象包含用户自定义function,则在满足上述权限的基础上,目标端数据库同时需将log_bin_trust_function_creators参数设置为1,参考语句如下:
set global log_bin_trust_function_creators = 1;
操作须知
-
DTS迁移过程一般包含四个阶段:预检查阶段、结构迁移阶段、全量阶段、增量阶段。为了确保同步各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。
-
如迁移对象为表级别,则单次迁移任务仅支持迁移最多10000张表。当超出数量限制,任务会在提交后会请求报错。如果遇到这种情形,建议您拆分待迁移的表,分批配置成多个任务,或者配置为整库迁移。
-
源数据库GTID状态建议为开启状态,源数据库实例没有开启GTID的情况下DTS不支持主备HA切换,因为DTS任务会因为位点不续接而中断导致无法恢复。
-
目标库关联RDS数据库的字符集必须与源数据库一致。
-
目标库若已存在行数据,DTS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
-
MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。
-
在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为7天。否则DTS在增量迁移时可能因无法获取Binlog而导致任务失败。由于您所设置的Binlog日志保存时间低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
-
目标实例及关联RDS实例的运行状态必须正常,若关联RDS实例是主备实例,复制状态也必须正常。
-
标库关联RDS实例必须有足够的磁盘空间,建议至少为待迁移数据量的2.5倍。(全量数据迁移会并发执行 INSERT 操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大,且会产生大量的BINLOG,占用大量空间)。
-
由于DTS不迁移USER信息,因此在调用目标库的视图、存储过程和函数时需要对调用者授予读写权限。
-
在任务进入增量迁移阶段之前,不建议对源数据库做DDL操作,这样可能会引起任务迁移失败。
-
迁移过程中,请勿修改、删除提供给DTS连接访问的源库和目标库及用户名、密码、权限,或修改源库和目标库的端口号;若用户源库、目标库的密码发生变化,请先暂停任务再修改DTS配置的连接源库、目标库的密码。
-
选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
-
增量迁移场景下,不支持源数据库进行恢复操作。
-
增量迁移场景下,支持无主键表的数据增量迁移。
-
增量迁移时,必须设置MySQL源数据库的server_id。如果源数据库版本小于或等于MySQL5.6,server_id的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,server_id的取值范围在1-4294967296之间。
-
当将MySQL5.x同步到MySQL5.7,如源端数据库的引擎类型为MyISAM时,请您先手工将源端的MyISAM存储引擎改为InnoDB再进行同步。
-
当将MySQL5.x迁移到MySQL8.x,如源端数据库的引擎类型为MyISAM时,DTS自动将目标库的引擎类型转换为innoDB。
-
当您在迁移数据时包含了触发器(TRIGGER),可能会因为DTS写入目标端的增量数据触发TRIGGER导致源库和目标库数据不一致。为避免数据不一致的问题,DTS会在迁移时在触发器对象头部加入触发控制语句,示例代码如下所示:
-
源库触发器:
CREATE TRIGGER testtrigger BEFORE INSERT ON test1 FOR EACH ROW BEGIN UPDATE test SET num = num - 1 WHERE id = 1; END;
-
目标库触发器:
CREATE TRIGGER testtrigger BEFORE INSERT ON test1 FOR EACH ROW BEGIN IF (SELECT @`__#ctyun_teledb_dts_writer#__) IS NULL THEN UPDATE test SET num = num - 1 WHERE id = 1; END IF; END;
-
-
增量迁移并开启增量DDL支持的场景下,当前暂不支持在结构迁移与全量迁移详情页面显示增量阶段新增的表。
操作步骤
1、购买DTS数据迁移实例。
在管理控制台点击“创建实例”进入订购页面,“实例类型”选择“数据迁移”,“目标库实例”的“数据库类型”选择MySQL,选择实例,完成其他信息的填写并完成购买。
2、进入实例配置页面。
DTS实例购买成功后,进入【数据迁移】实例列表页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,进入实例配置页面的操作分两种情况:
- 当DTS实例的网络接入类型为“公网EIP”时,请先点击“绑定弹性IP”按钮完成公网弹性IP的绑定,然后点击该实例操作列的“实例配置”按钮。
- 当DTS实例网络接入类型为“VPC网络”时,直接点击该实例操作列的“实例配置”按钮。
3、配置源库及目标库信息。
进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息,包括数据库类型、IP地址端口、数据库账号、数据库密码等信息。
完成上述信息的填写后,点击源数据库和目标数据库的“测试连接”按钮进行数据库连接测试,检查数据库能否正常连接。
4、配置迁移对象及高级配置。
源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,包含:库、TABLE、VIEW、FUNCTION等,选中后点击“>”按钮,将待迁移对象移动到“已选择对象”中。
说明关于配置迁移对象及高级配置页面的详细说明,请参考数据传输服务 - 用户指南 - 数据迁移 - 实例配置和实例编辑 - 配置迁移实例文档中配置迁移对象及高级配置详细说明。
5、预检查和启动迁移。
完成迁移对象和高级配置后,点击“下一步预检查”,进入实例配置第三个步骤的【预检查】页面。预检查会检查如下列表信息,并给出检查结果,用户可以依据检查结果进行下一步操作。
检查项 | 检查内容 |
---|---|
gtid_mode参数检查 | 检查源库和目标库的gtid_mode参数是否为ON。 |
lower_case_table_names一致性检查 | 检查源车和目标库的lower_case_table_names变量是否一致。 |
mysql版本检查 | 检查源库和目标库的mysql版本是不是符合要求。 |
schema字符集检查 | 检查待迁移库的字符设置是否在要求范围内。 |
sql_mode参数一致性检查 | 检查源库和目标库的sql_mode参数是否一致。 |
log_slave_updates参数检查 | 如果源库为集群的从节点,检查源库的log_slave_updates参数是否设置为ON。 |
同名对象存在性检查 | 检查目标库中是否存在和待迁移库同名的库,若存在,检查该库下面是否存在同名的表、视图、函数和存储过程。 |
存储引擎检查 | 检查源库中待迁移的表的存储引擎。 |
待迁移表主键检查 | 检查待迁移表是否都存在主键。 |
源库binlog存在性检查 | 查看源库的binlog文件是否被误删除。 |
源库binlog影像类型检查 | 查看源库的binlog_row_image参数是不是FULL。 |
源库binlog是否开启检查 | 查看源库的log_bin参数是不是ON。 |
源库binlog模式检查 | 查看源库的binlog_format参数是不是ROW。 |
源库binlog保留时间检查 | 检查源库的binlog保留时间是否满足要求。 |
源库server_id检查 | 查看源库的server_id是否大于0。 |
源库和目标库字符集一致性检查 | 检查源库和目标库的字符集是否一致。 |
源库和目标库时区一致性检查 | 检查源库和目标库的时区设置的值是否一致。 |
源库用户权限检查 | 检查源库用于DTS任务的用户是否具有相应的权限。 |
源库连接数检查 | 检查源库的连接数是否满足任务要求。 |
源库连通性检查 | 检查数据传输服务能否连通源数据库。 |
目标库日志包大小检查 | 检查目标库的日志包大小是否符合要求。 |
目标库用户权限检查 | 检查目标库用于DTS任务的用户是否具有相应的权限。 |
目标库连接数检查 | 检查目标库的连接数是否满足任务要求。 |
目标库连通性检查 | 检查数据传输服务器能否连通目标数据库。 |
约束完整性检查 | 检查待迁移对象中所有表的约束外键所属对象是否被选中。 |
视图依赖关系检查 | 检查待迁移视图所依赖的表是否都在待迁移对象中。 |
如果预检查通过,可点击【预检查】页面底部的“启动迁移”按钮,开始迁移任务。