支持的源和目标数据库
源数据库 | 目标数据库 |
---|---|
RDS for MySQL、 自建 MySQL 5.6部分版本/5.7/8.0 |
RDS for PostgreSQL |
支持的迁移对象及SQL
迁移对象
- 当前DTS仅支持表级(指定的表对象)迁移。
- 数据迁移仅针对数据源中的用户数据库,而系统库会被自动过滤。例如:MySQL 类型数据源中的 information_schema、mysql、performance_schema、sys 库不会出现在可迁移列表当中。
- 若源库为空库(该库下未创建任何表),不支持作为待迁移对象。
- 支持的转换类型参见附表,不支持mysql中的空间类型。
- 当前暂不支持库表列映射等功能。
增量数据迁移支持迁移的SQL操作
- DML
- INSERT、UPDATE、DELETE
- DDL
- 增量迁移的DDL操作仅支持CREATE INDEX、DROP INDEX、ALTER TABLE、TRUNCATE TABLE 和DROP TABLE,如果是整库迁移,支持CREATE TABLE。
注意
MySQL中索引名与索引所在表关联,同一database中不同表上可以存在相同名称的索引,而PG中索引名在同一schema下是唯一的,同一schema下的不同表中不能存在同名索引。因此在建、删索引时,对索引名进行了重命名处理。
暂不支持 CREATE TABLE 表名 AS SELECT 语句。
数据库账号及权限
数据库账号及权限如下表:
数据库
所需权限 参考赋权语句 源库
源库为MySQL5.7时:
对MySQL库的SELECT权限。
对待迁移库的SELECT,EVENT,TRIGGER权限。
部分全局权限:
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
PROCESS
如果是整库迁移,需要对所有数据库的查询权限。
源库为MySQL8.0时:
对MySQL库的SELECT权限。
对待迁移库的SELECT, EXECUTE, EVENT,TRIGGER权限。
部分全局权限:
PROCESS
REPLICATION CLIENT
REPLICATION SLAVE
SHOW VIEW
SHOW_ROUTINE
如果是整库迁移,需要对所有数据库的查询权限。
源库为MySQL5.7时:
GRANT SELECT ON mysql.* TO '迁移账号'@'%';
GRANT SELECT, EVENT,TRIGGER ON 待迁移的库.* TO '迁移账号'@'%';
GRANT REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '迁移账号'@'%';
源库为MySQL8.0时:
GRANT SELECT ON mysql.* TO '迁移账号'@'%';
GRANT SELECT, EXECUTE, EVENT, TRIGGER ON 待迁移的库.* TO '迁移账号'@'%';
GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW, SHOW_ROUTINE ON *.* TO '迁移账号'@'%';
目标库
schema的创建权限
授予用户user_name在数据库database_name下的schema创建权限:
GRANT CREATE ON DATABASE database_name TO user_name;
注意如果待迁移对象包含用户自定义function,则在满足上述权限的基础上,目标端数据库同时需将log_bin_trust_function_creators参数设置为1,参考语句如下:set global log_bin_trust_function_creators = 1;
操作需知
DTS迁移过程一般包含四个阶段:预检查阶段、结构迁移阶段、全量阶段、增量阶段。为了确保数据迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。
任务开始前
源库要求
- MySQL源数据库的binlog日志必须打开,且binlog日志格式必须为Row格式。
- 在磁盘空间允许的情况下,建议源数据库binlog保存时间越长越好,建议为3天。
- 源数据库expire_logs_days参数值为0,可能会导致迁移失败。
- 增量迁移时,必须设置MySQL源数据库的server_id。如果源数据库版本小于或等于MySQL5.6,server_id的取值范围在2-4294967296之间;如果源数据库版本大于或等于MySQL5.7,server_id的取值范围在1-4294967296之间。
- 源数据库GTID状态建议为开启状态,源数据库实例没有开启GTID的情况下DTS不支持主备HA切换,因为DTS任务会因为位点不续接而中断导致无法恢复。
- 目标库若已存在数据,DTS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
- 目标实例及关联RDS实例的运行状态必须正常,若关联RDS实例是主备实例,复制状态也必须正常。
- 目标库关联RDS实例必须有足够的磁盘空间,建议至少为待迁移数据量的2.5倍。(全量数据迁移会并发执行 INSERT 操作,导致目标数据库的表产生碎片,因此全量迁移完成后目标数据库的表存储空间会比源实例的表存储空间大,且会产生大量的BINLOG,占用大量空间)。
- 目标库关联RDS数据库的字符集必须与源数据库一致。
- 由于DTS不迁移USER信息,因此在调用目标库的视图、存储过程和函数时需要对调用者授予读写权限。
- 建议在适当的范围内设置源库的expire_log_day参数,以确保在服务中断后能够顺利恢复,并保证断点处的binlog尚未过期。
- 在任务进入增量迁移阶段之前,不建议对源数据库做DDL操作,这样可能会引起任务迁移失败。
- 迁移过程中,请勿修改、删除提供给DTS连接访问的源库和目标库及用户名、密码、权限,或修改源库和目标库的端口号;若用户源库、目标库的密码发生变化,请先暂停任务再修改DTS配置的连接源库、目标库的密码。
- 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
- 增量迁移场景下,不支持源数据库进行恢复操作。
- 当将MySQL5.x迁移到PostgreSQL,如源端数据库的引擎类型为MyISAM时,请您先手工将源端的MyISAM存储引擎改为InnoDB再进行迁移。
- 增量迁移并开启增量DDL支持的场景下,当前暂不支持在结构迁移与全量迁移详情页面显示增量阶段新增的表。
目标库要求
- 若要做增量迁移,且迁移对象包含外键,则目标数据库的session_replication_role参数必须设置为replica,迁移结束后,此参数需改为origin。
- 目标库不可以包含与待迁移对象类型相同且名称相同的表,否则任务可能出错。系统库、系统模式、系统表等除外。
- 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
- 目标数据库关联RDS实例必须有足够的磁盘空间,磁盘大小建议取以下两种中的最小值:。
- 源库待迁移数据量大小的1.5倍。
- 源库待迁移数据量大小加200GB。
结构、全量过程中
- 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
- 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。
- 请勿在目标库做写入操作,否则可能导致数据不一致。
增量过程中
- 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
- 请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。
- 请勿在目标库做写入操作,否则可能导致数据不一致。
数据稽核
- 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DTS任务的冲击。
- 在增量迁移过程中做对比时,源库若存在写入,则对比结果可能不一致。
操作步骤
-
购买DTS数据迁移实例。
在管理控制台点击“创建实例”进入订购页面,“资源配置”选择“引导模式”中,“场景功能”选择“数据迁移”,“源数据库”选择“MySQL”,“目标数据库”选择“PostgreSQL”,完成其他信息的填写并完成购买;说明相关配置信息,除“资源配置”的“链路规格”和“网络配置”订购后不可修改外,其他选择均可在实例配置页面修改。
-
进入实例配置页面。
DTS实例购买成功后,进入【数据迁移】实例列表页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,进入实例配置页面的操作。
-
配置源库及目标库信息。
进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息,包括数据库类型、IP地址端口、数据库账号、数据库密码等信息。
完成上述信息的填写后,点击源数据库和目标数据库的“测试连接”按钮进行数据库连接测试,检查数据库能否正常连接。
-
配置迁移对象及高级配置。
源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,包含:库、TABLE,选中后点击“>”按钮,将待迁移对象移动到“已选择对象”中。
-
预检查。
点击“下一步预检查”,进入【预检查】页面。预检查会检查如下列表信息,并给出检查结果,用户可以依据检查结果进行下一步操作。
检查项
检查内容
log_slave_updates参数检查
如果源库为集群的从节点,检查源库的log_slave_updates参数是否设置为ON。
存储引擎检查
检查源库中待迁移的表的存储引擎。
待迁移表主键检查
检查待迁移表是否都存在主键。
源库binlog存在性检查
查看源库的binlog文件是否被误删除。
源库binlog影像类型检查
查看源库的binlog_row_image参数是不是FULL。
源库binlog是否开启检查
查看源库的log_bin参数是不是ON。
源库binlog保留时间检查
检查源库的binlog保留时间是否满足要求。
源库binlog模式检查
查看源库的binlog_format参数是不是ROW。
源库和目标库字符集一致性检查
检查源库和目标库的字符集是否一致。
源库用户权限检查
检查源库用于DTS任务的用户是否具有相应的权限。
目标库用户权限检查
检查目标库用于DTS任务的用户是否具有相应的权限。
目标库连通性检查
检查数据传输服务器能否连通目标数据库。
-
确认配置和启动
预检查通过后,点击“下一步”进入【确认配置】页面,用户可确认配置的所有信息,确认无误后,点击右下角的【启动任务】,开始迁移任务。
MySQL - PostgreSQL类型转换附表
MySQL PostgreSQL 数值类型 bit bit boolean boolean bigint bigint bigint unsigned numeric int integer int unsigned bigint smallint smallint smallint unsigned integer mediumint integer mediumint unsigned integer tinyint smallint tinyint unsigned smallint float real float unsigned double precision double double precision decimal decimal 字符类型 char char varchar varchar text text tinytext text mediumtext text longtext text binary bytea varbinary bytea tinyblob bytea blob bytea mediumblob bytea longblob bytea enum varchar set varchar json varchar 时间类型 year integer date(
'1000-01-01' to '9999-12-31'
)
date(
4713 BC to 5874897 AD
)
time(
'-838:59:59.000000'-'838:59:59.000000'
)
time(
'00:00:00'-'24:00:00'
)
datetime( '1000-01-01 00:00:00' to '9999-12-31 23:59:59') timestamp timestamp('1970-01-01 00:00:01.000000' to '2038-01-19 03:14:07.499999') timestamp