支持的源和目标数据库
支持的源和目标数据库如下表:
源数据库 | 目标数据库 |
---|---|
RDS for PostgreSQL 自建PostgreSQL 9.4/9.5/9.6/10/11/12/13/14/15/16 | RDS for MySQL |
支持的迁移对象及SQL
迁移对象
当前DTS仅支持表、部分索引、约束、comment迁移。
不支持pg_toast,pg_temp_1,pg_toast_temp_1,pg_catalog,information_schem等系统模式的迁移。
每次至多同步一个库(database),同步多个库需要创建多个DTS任务。
支持的数据类型映射
PostgreSQL-MySQL支持的转换类型参见下表:
数据类型 | PostgreSQL | MySQL | 备注 |
---|---|---|---|
数值类型 | bit、bit varying | bit (n=1) | |
char (n<255),varchar(n<255) | |||
longtext | |||
money | decimal(21,4) | ||
numeric | numeric | 不支持特殊值Infinity、-Infinity、NaN | |
float | float | 不支持特殊值Infinity、-Infinity、NaN | |
boolean | boolean | ||
bigint,bigserial,int8,serial8 | bigint | ||
int,integer,serial,int4,serial4 | int | ||
smallint,int2,serial2 | smallint | ||
real,float4 | float | ||
double precision,float8 | double | ||
decimal,dec | decimal,dec | mysql中decimal最大精度为65,不能超过此精度 | |
字符类型 | varchar(n),character varying(n) | varchar (n) | |
bpchar(n),character(n),char(n) | char(n) | ||
bpchar,array,text,xml,varchar | longtext | ||
cidr | varchar(45) | ||
inet | varchar(45) | ||
macaddr | varchar(17) | ||
macaddr8 | varchar(23) | ||
json,jsonb | json | ||
tsvector,tsquery,xml | longtext | ||
uuid | varchar(36) | ||
enum | varchar | ||
bytea | longblob | ||
时间类型 | date(4713 BC to 5874897 AD) | date('1000-01-01' to '9999-12-31') | 不支持超过mysql date范围的数据,精度最大为6 |
time(n) | time(n) | ||
timestamp with out timezone | datetime ( '1000-01-01 00:00:00' to '9999-12-31 23:59:59') | 不支持超过mysql datetime范围的数据 | |
timestamp with time zone | timestamp | 超出MySQL时间戳范围的数据不支持(1970-01-01 00:00:00 - 2038-01-19 03:14:07) |
注意
不支持地理类型数据迁移。
增量迁移支持的SQL操作
DML
INSERT、UPDATE、DELETE
DDL
增量迁移的DDL操作仅支持CREATE INDEX、DROP INDEX、ALTER TABLE、TRUNCATE TABLE 和DROP TABLE,如果是整库迁移,支持CREATE TABLE。
说明
暂不支持CREATE TABLE AS SELECT 语句。
不支持临时表的迁移,表的索引、约束会一起迁移。
数据库账号权限要求
数据库 | 接入类型 | 所需权限 | 参考赋权语句 |
---|---|---|---|
源库 | 云实例 | 高权限账号 | 云实例请参考创建账号 |
自建实例 |
|
| |
目标库 | 云实例 |
| GRANT SELECT ON mysql.* TO '迁移账号'@'%'; GRANT ALTER, CREATE, DELETE ,DROP, INDEX, INSERT, REFERENCES, SELECT, UPDATE ON `待迁移库`.* TO '迁移账号'@'%'; |
准备工作
源库为PostgreSQL自建库的情况
登录自建PostgreSQL所属的服务器。
修改配置文件postgresql.conf,将配置文件中的wal_level设置为logical。如下图:
将DTS的IP地址加入至自建PostgreSQL的配置文件pg_hba.conf中。如下图:
如果您已将信任地址配置为0.0.0.0/0,可跳过本步骤。
逻辑解码插件目前支持decoderbufs和pgoutput;如果任务包含增量迁移且逻辑解码器选择使用Decoderbufs时,需安装PostgreSQL的逻辑解码器输出插件Decoderbufs,建议安装v2.1.1.Final以上版本,低版本可能会导致PostgreSQL数据库出现coredump,详细的步骤可参考如下内容或PostgreSQL官网文档。
请自行前往github仓库获取Decoderbufs插件。
进行插件的配置。
首先,进行插件的编译。
export PATH=/usr/lib/postgresql/9.6/bin:$PATH make make install
其次,在postgresql.conf中配置逻辑复制。
# MODULES shared_preload_libraries = 'decoderbufs' # REPLICATION wal_level = logical # minimal, archive, hot_standby, or logical (change requires restart) max_wal_senders = 8 # max number of walsender processes (change requires restart) wal_keep_segments = 4 # in logfile segments, 16MB each; 0 disables #wal_sender_timeout = 60s # in milliseconds; 0 disables max_replication_slots = 4 # max number of replication slots (change requires restart)
然后,重启PostgreSQL。
最后,验证配置是否生效。
#创建逻辑复制,使用逻辑复制插件decoderbufs select * from pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs'); #对相关表进行数据操作 #使用decoderbufs调试模式 SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); #使用decoderbufs获取wal变更,更新wal位置 SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); #查看逻辑复制的wal位置 SELECT * FROM pg_replication_slots WHERE slot_type = 'logical'; #删除逻辑复制 select pg_drop_replication_slot("decoderbufs_demo");
源库为天翼云及其他云PostgreSQL的情况
源库为天翼云及其他云PostgreSQL、任务包含增量迁移,且逻辑解码器选择为Decoderbufs时,源库需开启逻辑解码器输出插件Decoderbufs。
天翼云在开通PostgreSQL实例时已预置开启Decoderbufs插件,当源库为天翼云PostgreSQL时,请参照天翼云关系数据库PostgreSQL版-管理插件相关指引查看确认Decoderbufs插件的开启情况,已开启则无需进行操作,未开启则参照指引进行Decoderbufs插件的安装。
当源库为其他云PostgreSQL时,需要查看源库对应版本是否支持并已开启Decoderbufs插件。如源库版本不支持Decoderbufs插件则无法进行其他云PostgreSQL到天翼云PostgreSQL的增量迁移;如源库版本支持Decoderbufs插件但未开启则按照文档启用插件;如已开启则无需进行操作。具体请参考其他云PostgreSQL的相关指引,例如:
华为云支持的插件列表及插件管理的相关指引。
阿里云支持的插件列表及插件管理的相关指引。
操作需知
DTS迁移过程一般包含四个阶段:预检查阶段、结构迁移阶段、全量阶段、增量阶段。为了确保数据迁移各个阶段的平顺,在创建迁移任务前,请务必阅读以下使用须知。
任务开始前
源库要求
源数据库的分区表触发器不可以设置为disable。
全量同步支持源库备机状态,但需要设置hot_standby_feedback为on;增量同步不支持源库备机状态。
同步对象依赖和关联的对象也须一起同步,否则可能导致任务失败。
若要做增量同步,源数据库的“pg_hba.conf” 文件中包含如下的配置:
host replication all 0.0.0.0/0 md5源数据库参数wal_level必须配置为logical;
如果配置任务时逻辑解码指定为Decoderbufs,源数据库需提前安装Decoderbufs插件;
源数据库中无主键表的replica identity属性必须为full;
源数据库的max_replication_slots参数值必须大于当前已使用的复制槽数量;
源数据库的max_wal_senders参数值必须等于或大于max_replication_slots参数值;
源数据库中表的主键列toast属性为main、external、extended时,其replica identity属性必须为full。
同步对象依赖和关联的对象也须一起同步,否则可能导致任务失败。
目标库要求
目标库若已存在行数据,DTS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
目标库关联RDS实例必须有足够的磁盘空间,建议至少为待迁移数据量的2.5倍。
结构、全量过程中
请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。
请勿在目标库做写入操作,否则可能导致数据不一致。
增量过程中
请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
请勿修改源数据库表的主键或者唯一键(主键不存在时),否则可能导致增量数据不一致或任务失败。
请勿修改源数据库中表的replica identity属性,否则可能导致增量数据不一致或任务失败。
请勿在目标库做写入操作,否则可能导致数据不一致。
库级同步时,源库新增无主键表时,请务必同时将该无主键表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。
库级同步时,源库新增主键表时,如果主键列toast属性为main、external、extended时,请务必同时将该表的replica identity属性设置为full,然后再写入数据,否则可能导致数据不一致或任务失败。
若选择同步DDL,须注意源库执行DDL时,确保在目标库上是兼容的。
操作步骤
1、购买DTS实例。
在管理控制台点击“创建实例”进入订购页面,“实例类型”选择“数据迁移”,”源数据库”选择Postgresql,“目标数据库”选择MySQL,完成其他信息的填写并完成购买。
2、进入实例配置页面。
DTS实例购买成功后,进入【数据迁移】实例列表页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,进入实例配置页面的操作。
3、配置源库及目标库信息
进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息,包括数据库类型、IP地址端口、数据库账号、数据库密码等信息。
完成上述信息的填写后,点击源数据库和目标数据库的“测试连接”按钮进行数据库连接测试,检查数据库能否正常连接。
4、配置迁移对象及高级配置
源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,包含:库、TABLE,选中后点击“>”按钮,将待迁移对象移动到“已选择对象”中。
5、预检查
点击“下一步预检查”,进入【预检查】页面。预检查会检查如下列表信息,并给出检查结果,用户可以依据检查结果进行下一步操作。
检查项 | 检查内容 |
---|---|
源库连通性检查 | 检查数据传输服务器能否连通源数据库。 |
待迁移表是否存在主键检查 | 勾选增量迁移时,检查待迁移表中是否存在无主键的表。 |
源数据库的模式名表名是否合法 | 检查源数据库的模式名表名是否合法,名称不可以包含+"%'<>,.字符。 |
源库参数wal_level是否为logical | 勾选增量迁移时,检查源库wal_level参数值是否为logical。 |
目标库连通性检查 | 检查数据传输服务器能否连通目标数据库。 |
源库参数max_replication_slots校验 | 勾选增量迁移时,检查源库max_replication_slots参数值是否大于当前已使用的复制槽数量。 |
源库参数max_wal_senders校验 | 勾选增量迁移时,检查源库max_wal_senders参数值是否大于当前已使用的复制槽数量。 |
源库用户权限检查 | 检查源库用于DTS任务的用户是否具有相应的权限。 |
源库主备状态检查 | 勾选增量迁移时,检查源库是否为集群中的主库。 |
待同步表REPLICA_IDENTITY模式检查 | 检查待迁移表REPLICA_IDENTITY值是否都为FULL |
检查源库和目标库字符集一致性检查 | 检查源库和目标库字符集是否一致 |
6、确认配置并启动
预检查通过后,点击“下一步”进入【确认配置】页面,用户可确认配置的所有信息,确认无误后,点击右下角的【启动任务】,开始迁移任务。