文档首页 > > 快速入门> 在线迁移> 入云迁移> 使用须知

使用须知

分享
更新时间: 2020/07/02 GMT+08:00

数据复制服务在使用上有一些固定的限制,用来提高数据迁移的稳定性和安全性。在正式使用数据复制服务之前,请先阅读以确保各存储引擎已满足使用限制条件。

使用技巧(需要人为配合)

  • 如果您使用的是全量迁移模式,请确保源和目标数据库无其他业务写入。
  • 如果您使用的是全量+增量迁移模式,支持在源数据库有业务数据写入的情况下进行迁移,推荐提前2-3天启动任务,并配合此使用技巧、操作要求(表1表21的操作要求)以确保顺利割接。
    • 全量迁移
      基于以下原因,建议您结合定时启动功能,选择业务低峰期开始运行迁移任务,相对静态的数据,迁移时复杂度将会降低。如果迁移不可避免业务高峰期,推荐使用迁移限速功能,即 “流速模式”选择 “限速”
      • 全量迁移会对源数据库有一定的访问压力。
      • 迁移无主键表时,为了确保数据一致性,会存在3s以内的单表级锁定。
      • 正在迁移的数据被其他事务长时间锁死,可能导致读数据超时。
      • 由于MySQL固有特点限制,CPU资源紧张时,存储引擎为Tokudb的表,读取速度可能下降至10%。
    • 数据对比

      建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。

MySQL->RDS for MySQL迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表1 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表2中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、存储过程/函数/触发器引用视图/表、主外键关联表等。
    • 由于MySQL本身限制,若源库的一次性EVENT设定的触发时间在迁移开始前,该EVENT不会迁移到目标库。
    • 多对一场景下,创建迁移任务时,目标库读写设置需要跟已有任务设置为一致。
    • 增量迁移会过滤创建用户、删除用户及修改用户权限的DDL操作。
    • 由于无主键表缺乏行的唯一性标志,在网络不稳定情况下,迁移后,可能存在目标与源库数据不一致的情况。
    • 不支持目标数据库恢复到全量迁移时间段范围内的PITR操作。
    • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建迁移任务。

    操作须知

    • 全量迁移过程中,不建议对源数据库的表进行修改、删除等DDL操作。
    • 在结束迁移任务时,将进行所选事件(event)和触发器(trigger)的迁移。请确保任务结束前,不要断开源和目标数据库的网络连通性,并在结束任务时关注迁移日志上报的状态,达到数据库完整迁移效果。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 增量迁移场景下,不支持源数据库进行恢复到某个备份点的操作(PITR)。
    • 增量迁移过程中,若源库存在分布式事务,可能会导致迁移失败。
    • 为了保持数据一致性,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。
    • 增量迁移阶段,支持断点续传功能,在主机系统崩溃的情况下,对于非事务性的无主键的表可能会出现重复插入数据的情况。
    • 迁移过程中,不允许源库写入binlog格式为statement的数据。
    • 迁移过程中,不允许源库执行清除binlog的操作。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
    • 如果源数据库为自建库,并且安装了Percona Server for MySQL 5.6.x或Percona Server for MySQL 5.7.x时,内存管理器必须使用Jemalloc库,以避免因系统表频繁查询带来的内存回收不及时,并最终导致数据库Out of Memory问题。
    • 迁移过程中,不允许在源库创建库名为ib_logfile的数据库。
    • 建议将expire_log_day参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表2 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT。
      • 目标数据库帐号必须拥有如下权限:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、WITH GRANT OPTION。
    • 全量+增量迁移权限要求:
      • 源数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
      • 目标数据库帐号必须拥有如下权限:SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、WITH GRANT OPTION。
    • 用户迁移权限要求:
      • 用户迁移时,当源数据库为非阿里云数据库时,帐户需要有mysql.user的SELECT权限,源数据库为阿里云数据库,则帐户需要同时具有mysql.user和mysql.user_view的SELECT权限。
      • 目标数据库帐户需要有mysql库的SELECT,INSERT,UPDATE,DELETE权限。

    迁移对象约束

    • 支持数据库、表、视图、索引、约束、函数、存储过程、触发器和事件的迁移。
    • 不支持系统库的迁移以及事件状态的迁移。
    • 不支持非Myisam和非InnoDB表的迁移。

    源数据库要求

    • 源数据库中的库名不能包含:'<`>/\以及非ASCII字符。
    • 源数据库中的表名、视图名不能包含:'<>/\以及非ASCII字符。
    • 源数据库中的库名不允许为ib_logfile。
    • 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之间。
    • MySQL源数据库建议开启skip-name-resolve,减少连接超时的可能性。
    • 源数据库GTID状态建议为开启状态。
    • 源库不支持阿里云RDS的只读副本。
    • 源数据库和目标数据库字符集需保持一致,否则迁移失败。
    • 源数据库log_slave_updates参数需设置为开启状态,否则会导致迁移失败。
    • 源数据库的binlog_row_image参数需设置为FULL,否则会导致迁移失败。

    目标数据库要求

    • 不支持从高版本迁移到低版本。
    • 建议MySQL目标库的binlog日志格式为Row格式,否则增量迁移可能出错。
    • 目标数据库实例的运行状态必须正常。
    • 目标数据库实例必须有足够的磁盘空间。
    • 除了MySQL系统数据库之外,目标数据库不能包含与源数据库同名的数据库。
    • 建议目标库的事务隔离级别至少保证在已提交读。
    • DRS迁移时会有大量数据写入目标库,目标库max_allowed_packet 参数过小会导致无法写入,建议将目标库max_allowed_packet参数值设置大一点,使其大于100MB。
    • 目标数据库GTID状态建议为开启状态。
    • 源数据库和目标数据库的参数server_uuid相同, 将导致增量迁移失败。
    • 源数据库和目标数据库的参数collation_server需保持一致,否则可能导致迁移失败。
    • 所选迁移对象和外键依赖的表需一起进行迁移,否则会导致迁移失败。
    • 源数据库和目标数据库的参数time_zone需保持一致,否则可能导致迁移失败。
    • 源数据库和目标数据库的sql_mode参数值需保持一致,否则可能导致迁移失败。
    • 迁移的对象中包含引擎为MyISAM的表,则目标数据库sql_mode不能包含no_engine_substitution参数,否则可能会导致迁移失败。
    • 源数据库和目标数据库的innodb_strict_mode参数值需保持一致,否则可能导致迁移失败。
    • 目标数据库和源数据库的lower_case_table_names参数需保持一致,否则可能导致迁移失败。
    • 目标数据库的log_bin_trust_function_creators参数需设置为on,否则可能导致迁移失败。

MySQL->DDM迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表3 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表4中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建迁移任务。
    • 数据类型不兼容时,可能引起迁移失败。

    操作须知

    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 迁移过程中,不允许对源库需要迁移的表结构进行修改。
    • 增量迁移场景下,不支持源数据库进行恢复操作。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
    • 迁移过程中不支持DDL操作。
    • 建议将expire_log_day参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。
    • 如果源数据库为自建库,并且安装了Percona Server for MySQL 5.6.x或Percona Server for MySQL 5.7.x时,内存管理器必须使用Jemalloc库,以避免因系统表频繁查询带来的内存回收不及时,并最终导致数据库Out of Memory问题。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表4 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT。
      • 目标中间件帐户需要具备以下基本权限:CREATE、DROP、ALTER、 INDEX、 INSERT、DELETE、 UPDATE、 SELECT, 同时必须具备扩展权限:全表Select权限。
      • 目标中间件帐户必须具备对所迁移数据库的权限。
    • 全量+增量迁移权限要求:
      • 源数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
      • 目标中间件帐户需要具备以下基本权限:CREATE、DROP、ALTER、 INDEX、 INSERT、DELETE、 UPDATE、 SELECT, 同时必须具备扩展权限::全表Select权限。
      • 目标中间件帐户必须具备对所迁移数据库的权限。

    迁移对象约束

    • 目前只支持迁移源库的数据,不支持迁移源库表结构及其他数据库对象。
    • 用户需要在目标库根据源端逻辑库的表结构,自行在目标库创建对应的表结构及索引。未在目标库创建的对象,视为用户不选择这个对象进行迁移。
    • 源库在目标库创建的表结构, 必须与源库的表结构完全一致。
    • 不支持非Myisam和非InnoDB表的迁移。

    源数据库要求

    • 增量迁移时,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之间。
    • 源库中的库名、表名不能包含:'<>/\以及非ASCII字符。
    • MySQL源数据库建议开启skip-name-resolve,减少连接超时的可能性。
    • 源数据库GTID状态建议为开启状态。

    目标数据库要求

    • 目标库若已存在数据,DRS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
    • 目标实例及关联RDS实例的运行状态必须正常,若关联RDS实例是主备实例,复制状态也必须正常。
    • 目标库关联RDS实例必须有足够的磁盘空间。
    • 目标库关联RDS数据库的字符集必须与源数据库一致。
    • 目标库实例若选择将时间戳类型(TIMESTAMP,DATETIME)的列作为分片键,则源库数据在迁移到目标库之后,作为分片键的该时间戳类型列的秒精度将被丢弃。
    • 目标数据库存在表的AUTO_INCREMENT值至少不能小于源库表的AUTO_INCREMENT值。

Microsoft SQL Server->RDS for Microsoft SQL Server迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表5 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表6中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、存储过程/函数/触发器引用视图/表、主外键关联表等。
    • 创建迁移实例后,必须确保迁移实例能够连通源数据库。
    • 目标数据库实例的运行状态必须正常。
    • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建迁移任务。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
    • 迁移过程中触发器为禁用状态,在迁移任务结束时,系统自动将触发器的状态恢复为原有状态。

    操作须知

    • 不支持源数据库主备切换,源数据库主备切换会导致迁移任务失败,该情况下的迁移任务不可恢复。
    • 当RDS实例异常引发目标数据库发生主备切换时,会导致迁移失败,该情况下的迁移任务不可恢复。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 增量迁移过程中,源数据库进行的DDL操作不支持迁移到目标数据库。
    • 为保障数据一致性,对于只进行全量迁移的任务,在数据迁移期间请勿在源数据库SQL Server中写入新的数据。
    • 支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。
    • 增量迁移中,如果源数据库中无主键或唯一键约束,且所有字段没有唯一性,可能会导致目标库中出现重复数据。
    • 增量迁移中,不支持大对象数据类型 image,text,ntext的删除操作。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表6 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库权限:需要具备db_owner权限。
      • 目标数据库权限:需要具备dbcreator或者CREATE ANY DATABASE的权限。
    • 全量+增量迁移权限要求:
      • 当源数据库为华为云数据库时,源数据库账号需为管理账户rdsuser。
      • 当源数据库为阿里云数据库时,源数据库账号需要具备db_owner权限。
      • 当源数据库为自建数据库时,源数据库账号需要具备sysadmin role权限。

    迁移对象约束

    • 当前版本暂不支持迁移如下数据库对象:
      • 程序集(Assemblies)
      • service broker
      • 全文索引
      • 全文目录
      • 空间索引
      • hash索引
      • xml索引
      • 列存储索引
      • 索引视图
      • 序列
      • 分布式 schema
      • 分布式函数
      • CLR存储过程
      • CLR 标量函数
      • CLR表值函数
      • 内部表
      • 聚合函数
      • 加密的数据库对象(视图、存储过程、触发器、函数)
    • 当前版本暂不支持迁移如下数据类型:
      • sql_variant
      • timestamp
    • 当前版本的全量+增量迁移模式暂不支持迁移如下数据库类型:
      • geometry
      • geography

    源数据库要求

    • 源数据库库名只能包含如下字符:字母、数字、下划线和中划线,库名长度不能超过64个字符。
    • 源数据库中的表名、视图名和触发器名不能包含如下字符:'<>"。
    • 不支持迁移源数据库中开启TDE(Transparent Data Encryption)加密的数据库。若不需要迁移TDE加密的库,请在对象选择中去掉;若需要迁移TDE加密的库,请先将TDE关闭。
    • 源数据库若开启客户端配置中的“强制协议加密(Force Protocol Encrypton)”,必须同时开启“信任服务器证书(trust server certificate)”,如下图所示:
      图1 查看客户端属性
    • 源数据库模式必须设置为FULL模式。
    • 源数据库必须开启SQL Server Agent代理服务。
    • 源库中不允许存在被禁用的表的聚簇索引,否则会导致迁移失败。
    • 源库中不允许存在名称为cdc的用户名或shema。

    目标数据库要求

    • 目标数据库实例必须有足够的磁盘空间。
    • 不支持目标数据库主备切换。
    • 仅支持从低版本迁移到高版本。
    • 除了SQL Server系统数据库之外,目标数据库不能包含与源数据库同名的数据库。

PostgreSQL->RDS for PostgreSQL迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表7 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表8中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 全量迁移要求:
      • 不支持向低于PostgreSQL 9.4版本的目标数据库迁移。
      • 支持在跨大版本间迁移,不允许从高的大版本迁移到低的大版本。
      • 同一个迁移任务中,不支持多个源库迁移至同一个目标库。
    • 全量+增量迁移要求:
      • 增量迁移只能在相同大版本间迁移,不允许从高的大版本迁移到低的大版本。
      • 增量迁移不支持源数据库为RDS实例。
    • 全量迁移和全量+增量迁移存在以下的公共的要求:
      • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、存储过程/函数/触发器引用视图/表、主外键关联表等。
      • 不支持对象选择。
      • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建迁移任务。

    操作须知

    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 增量迁移过程中不建议对表进行重命名操作。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表8 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库帐户需要具备SELECT、REFERENCES、TRIGGER、EXECUTE和USAGE权限。
    • 全量+增量迁移权限要求:
      • 源数据库帐户需要具备SUPERUSER或者REPLICATION的权限。

    迁移对象约束

    全量迁移对象约束:

    支持表、索引、外键、存储过程、函数、视图、约束、触发器的迁移。

    支持如下字段类型:数字类型、货币类型、字符类型、二进制数据类型、日期/时间类型、布尔类型、枚举类型、几何类型、网络地址类型、位串类型、文本搜索类型、UUID类型、XML类型、JSON类型、数组、复合类型、范围类型。

    源数据库要求

    • 源数据库的库名和表名不支持如下字符:"<>。
    • 源数据库库名不支持如下字符:“.”、“<”、“>”和“'”。
    • 增量迁移时,源数据库需要配置如下信息:
      • 增量迁移需要源数据库的“pg_hba.conf” 文件中包含如下的配置:
        host replication all 0.0.0.0/0 md5
      • 源数据库参数max_wal_senders和max_replication_slots必须大于0。
      • 源数据库参数hot_standby和full_page_write必须开启。
      • 源数据库参数max_prepared_transactions需要比目标数据库小。
      • 源数据库参数max_worker_processes需要比目标数据库小。
      • 源数据库参数max_locks_per_transaction需要比目标数据库小。
      • 源数据库参数max_connections需要比目标数据库小。
      • 源数据库和目标数据库的货币金额格式必须一致。
      • 目标库为PostgreSQL 11.x或者PostgreSQL增强版时,源库中同一个数据库下的触发器名称必须唯一。
    • 源数据库版本为9.5时,参数wal_level必须配置为hot_standby,源数据库版本为9.6时,参数wal_level必须配置为replica,否则会导致迁移失败。
    • 源数据库max_replication_slots参数值必须大于0,否则可能导致迁移失败。
    • 建议将源数据库参数wal_keep_segments 值至少配置为(源库大小×5%÷16),如果源库业务较繁忙则应相应的增加该值。

    目标数据库要求

    • 不支持从高版本迁移到低版本。
    • 目标数据库实例的运行状态必须正常。
    • 增量迁移时,目标数据库实例需要为空。
    • 目标数据库实例必须有足够的磁盘空间。
    • 不支持多对一的迁移。
    • 需要提供目标数据库根帐号的密码。
    • 增量迁移过程中,目标数据库处于不可读写状态。
    • 增量迁移时,目标库实例不能带只读实例。
    • 除了系统数据库之外,目标数据库不能包含与源数据库同名的数据库。
    • 目标库插件版本不能低于源库插件版本,若目标库插件版本较低,会导致迁移失败。
    • 目标数据库和源数据库的lc_monetary参数值需保持一致,否则会导致迁移失败。
    • 目标数据库的max_connections、max_worker_processes、max_prepared_transactions、max_locks_per_transaction参数值不能小于源数据库的参数值,否则可能会导致迁移失败。
    • 源数据库与目标数据库的wal_block_size、block_size参数值需保持一致,否则会导致迁移失败。

MongoDB数据库->DDS迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表9 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表10中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用集合、视图引用视图等。
    • 副本集:MongoDB数据库的副本集实例状态必须正常,要存在主节点。
    • 单节点:目前不支持源数据库为非本云单节点实例的迁移。
    • 源数据库为非集群实例时,增量迁移阶段支持如下操作:
      • 支持数据库(database)新建、删除。
      • 支持文档(document)新增、删除、更新。
      • 支持集合(collection)新建、删除。
      • 支持索引(index)新建、删除。
      • 支持视图(view)新建,删除。
      • 支持convertToCapped、collMod、renameCollection命令。
    • 副本集到集群的全量+增量迁移,迁移之前建议在目标数据库的集群先进行分片配置,再启动迁移。
    • 对于在源数据库已经存在TTL索引的集合,或者在增量迁移期间在源库数据创建了TTL索引的集合,由于源数据库和目标库数据库时区,时钟的不一致,不能保证迁移完成之后数据的一致性。
    • 如果源数据库的MongoDB服务不是单独部署的,而是和其他的服务部署在同一台机器,则必须要给源数据库的wiredTiger引擎加上cacheSizeGB的参数配置,建议值设为最小空闲内存的一半。
    • 专属计算集群暂不支持DDS实例,无法创建迁移任务。
    • 选择集合迁移时,增量迁移过程中不建议对集合进行重命名操作。
    • 如果源数据库是副本集或者单节点,并且目标库是集群的话,则建议根据源库的数据模型,在目标库提前设置好分片键。
    • 如果源数据库是副本集,则建议填写所有的主节点和备节点信息,以防主备切换影响迁移任务。如果填写的是主备多个节点的信息,注意所有的节点信息必须属于同一个副本集实例。
    • 如果源数据库是集群,则建议填写多个mongos信息,以防单个mongos节点故障影响迁移任务。如果填写的是多个mongos信息,注意所有的mongos信息必须属于同一个集群。如果是集群的增量迁移任务,建议shard信息填写所有的主节点和备节点,以防主备切换影响迁移任务,并且注意所填写的主备信息必须属于同一个shard。

    操作须知

    • 为了保持数据一致性,在整个迁移过程中,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作),也不支持对源数据库进行DDL操作。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 在整个迁移过程中,不支持源数据库主备切换导致数据回滚的情况。
    • 选择集合迁移时,增量迁移过程中不建议对集合进行重命名操作。
    • 为了提高迁移的速度,在开始迁移之前,建议在源数据库删掉不需要的索引,只保留必须的索引。在迁移过程中不建议对源库创建索引,如果必须要创建索引,请使用后台的方式创建索引。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表10 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    源数据库权限要求:

    • 全量迁移权限要求:
      • 副本集:连接源数据库的用户权限需要对admin数据库有readAnyDatabase权限。
      • 集群:连接源数据库的用户权限需要对admin数据库有readAnyDatabase权限,对config数据库有read权限。
      • 单节点:连接源数据库的用户权限需要对admin数据库有readAnyDatabase权限。
      • 如果需要迁移源数据库用户和角色信息,连接源数据库的用户权限需要对admin数据库的系统表system.users,system.roles有读权限。
    • 全量+增量迁移权限要求:
      • 副本集:连接源数据库的用户权限需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。
      • 单节点:连接源数据库的用户权限需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。
      • 集群:连接源数据库mongos节点的用户权限需要对admin数据库有readAnyDatabase权限,对config数据库有read权限, 连接源数据库分片节点的用户权限需要对admin数据库有readAnyDatabase权限,对local数据库有read权限。
      • 如果需要迁移源数据库用户和角色信息,连接源数据库的用户权限需要对admin数据库的系统表system.users,system.roles有读权限。

    目标数据库权限要求:连接目标数据库的用户权限需要对admin数据库有readAnyDatabase权限,对目标数据库有readWrite权限。

    迁移对象约束

    • 副本集:目前只支持集合(包括验证器,是否是固定集合),索引和视图的迁移。
    • 集群:目前只支持集合(包括验证器,是否是固定集合),分片键,索引和视图的迁移。
    • 单节点:目前只支持集合(包括验证器,是否是固定集合),索引和视图的迁移。
    • 只支持迁移用户数据和源数据库的账号信息,不支持迁移系统库和系统集合,如果业务数据在系统库下,则需要先将业务数据移动到用户数据库下,可以使用renameCollection命令进行移出。
    • 不支持_id字段没有索引的集合。

    源数据库要求

    • 不支持源数据库的库名、集合名或视图名中包含如下字符:'<>.。
    • 如果迁移任务是源数据集群的增量,则源数据必须关闭Balancer。

    目标数据库要求

    • 目标数据库实例的运行状态必须正常。
    • 目标数据库实例必须有足够的磁盘空间。
    • 多个源数据库迁移到同一个目标数据库时,所选的待迁移数据库的库名不能重复。
    • 集群到集群的全量迁移,如果源数据库的集群没有开启分片,则需要保证目标数据库主shard节点的磁盘空间大于源数据库数据大小。
    • 目前不支持从高版本数据库到低版本数据库的迁移。

Oracle数据库->RDS for MySQL迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表11 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表12中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、主外键关联表等。
    • 表、视图等对象名迁移到目标库后会转换成小写,如ABC和abc。
    • 源库和目标库时区设置必须一致。
    • 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库会出现乱码。
    • Oracle中表结构迁移到MySQL后表的字符集为utf8mb4。
    • 由于无主键表缺乏行的唯一性标志,在网络不稳定情况下,迁移后,可能存在目标与源库数据不一致的情况。
    • Oracle中表结构长度(所有列长字节数之和,char、varchar2等类型字节长度和编码有关)超过65535时,可能导致迁移失败。
    • 源库为oracle RAC环境时,不支持使用scanip创建任务,可以使用某一节点作为源库,除配置任务时使用的节点外,源库其他节点异常依然可以正常迁移。
    • 数据类型不兼容时,可能引起迁移失败。

    操作须知

    • 对于迁移中的数据库对象,在迁移期间,目标库不能进行写入操作,否则会导致数据不一致。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 迁移过程中,源库不能做DDL变更。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
    • 迁移过程中,不允许在源库创建库名为ib_logfile的数据库。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表12 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库端:需要具有CREATE SESSION、SELECT ANY TRANSACTION、SELECT ANY TABLE、SELECT ANY DICTIONARY权限。
      • 目标数据库端:提供的目标数据库帐号必须拥有如下权限:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、INDEX、EVENT、RELOAD、CREATE VIEW、CREATE ROUTINE、TRIGGER。
    • 全量+增量迁移权限要求:
      • 源数据库端:需要具有CREATE SESSION、SELECT ANY TRANSACTION、SELECT ANY TABLE、SELECT ANY DICTIONARY权限和EXECUTE_CATALOG_ROLE角色,若Oracle为12C及以上版本还需要LOGMINING权限。
      • 目标数据库端:提供的目标数据库帐号必须拥有如下权限:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、INDEX、EVENT、RELOAD、CREATE VIEW、CREATE ROUTINE、TRIGGER。

    迁移对象约束

    • 支持库、表结构、视图、主键、唯一键、外键、索引、表数据的迁移,其他数据库对象暂不支持,如存储过程、触发器、函数、序列、包、同义词、用户等。
    • 增量迁移不支持DDL的同步。
    • 全量阶段不支持bfile,xml、sdo_geometry、urowid和自定义类型。
    • 增量阶段不支持bfile,xml、interval、sdo_geometry、urowid和自定义类型。

    源数据库要求

    • Oracle单行记录不能超过8K(text、blob部分计算),原因是MySQL innodb引擎限制单行大小不能超过8K。
    • 不建议以字符串类型作为主键或唯一键,因为Oracle的字符串作为主键、唯一键时区分空格,而MySQL不区分,可能导致数据不一致和死锁问题。
    • binary_float或者binary_double类型不支持设置Nan、Inf、-Inf三个值,因为MySQL不支持。
    • Oracle的check约束迁移到MySQL会失效,原因是MySQL不支持check约束。
    • Oracle中建议列名不要取名AUTO_PK_ROW_ID,原因是这个列名在MySQL5.7中是保留列名,无法创建出来。
    • Oracle中number字段的值不要超过(65,30)的精度表示范围,int字段的值不要超过(65,0)的精度表示范围。原因是MySQL数字的表示范围比Oracle小。
    • 库名、表名和视图名不支持的字符有:非ASCII字符、“. ”、 “>”、 “<”、 “\”、 “`”、 “|”、 “,”、 “? ”、 “! ”、 “"”和 “'”。
    • 源数据库中的库名不允许为ib_logfile。
    • 不支持字段的默认值为表达式,例如:default(`id` + 1)。
    • 源库中将函数作为default值时,该函数需要在目标库中也支持。
    • Oracle到MySQL的增量迁移,要求源数据库打开归档日志。
    • 源数据库不允许存在索引列的长度之和超过目标库索引列长度限制的索引,具体长度要求请参见索引长度说明
    • 默认值不支持default user,mysql没有对应的语法。
    • 源数据库不允许含有空库。
    • 目前仅支持如下字符集:ZHS16GBK, AL32UTF8, UTF8, US7ASCII, WE8MSWIN1252。

    目标数据库要求

    • 目标数据库不能存在待迁移数据库。
    • DRS同步时会有大量数据写入目标库,目标库max_allowed_packet 参数过小会导致无法写入,建议将目标库max_allowed_packet参数值设置为大于100MB。

Oracle数据库->RDS for PostgreSQL迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表13 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表14中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、主外键关联表等。
    • 目前仅支持全量迁移。
    • 单个迁移任务每次只能迁移一个库(owner)的数据,多个数据库的迁移需要创建多个任务。
    • 表、视图等对象名迁移到目标库后会转换成小写,如ABC和abc。
    • 源库和目标库时区设置必须一致。
    • 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库会出现乱码。
    • 由于无主键表缺乏行的唯一性标志,在网络不稳定情况下,迁移后,可能存在目标与源库数据不一致的情况。
    • 数据类型不兼容时,可能引起迁移失败。

    操作须知

    • 对于迁移中的数据库对象,在迁移期间,源库和目标库都不能进行写入操作,否则会导致数据不一致。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 迁移过程中,源库不能做DDL变更。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表14 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 源数据库端:需要具有CREATE SESSION、SELECT ANY TRANSACTION、SELECT ANY TABLE、SELECT ANY DICTIONARY、SELECT ANY SEQUENCE权限。
    • 目标数据库端:用户权限需要具备在目标库创建数据库和表的权限。

    迁移对象约束

    • 支持表、视图、索引、约束、序列、数据的迁移,其他数据库对象暂不支持,如存储过程等。
    • 全量阶段不支持bfile,xml、sdo_geometry、urowid和自定义类型。
    • 不支持函数索引迁移。

      示例:

      create index idx_t on t(substr(dt, 1, 8));

    源数据库要求

    • 由于PostgreSQL数据库比Oralce数据库多了一层schema结构,在视图创建语句中as子句中不能包含db.table的形式,否则视图迁移会失败。

      示例:将以下的语句一需要改写成语句二。

      语句一:

      create view v1 as select id from db1.t1;

      语句二:

      create view v1 as select id from t1;
    • timestamp和interval day to second类型支持的最大精度是6。
    • 数据类型不支持bfile、xmltype、sdo_geometry和自定义类型。
    • 源库不能存在只是大小写不同的表。
    • 库名、表名和视图名不支持的字符有:非ASCII字符、“. ”、 “>”、 “<”、 “\”、 “`”、 “|”、 “,”、 “? ”、 “! ”、 “"”和 “'”。
    • 目标库为PostgreSQL 11.x或者PostgreSQL增强版时,源库中同一个数据库下的触发器名称必须唯一。
    • 源数据库不允许含有空库。
    • 目前仅支持如下字符集:ZHS16GBK, AL32UTF8, UTF8, US7ASCII, WE8MSWIN1252。

    目标数据库要求

    • 目标库必须是本云RDS for PostgreSQL增强版实例。
    • 迁移前,需要手动在目标数据库端创建一个与源数据库名对应的全部以小写字母命名的数据库,且待迁移的对象不存在于该创建的数据库中。
    • 目标数据库中不能存在与源数据库转换成小写后相同的对象名。

Oracle数据库->RDS for GaussDB T迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表15 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表16中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、主外键关联表等。
    • 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库会出现乱码。
    • Oracle中表结构迁移到GaussDB T后表的字符集为utf8。
    • 由于无主键表缺乏行的唯一性标志,在网络不稳定情况下,迁移后,可能存在目标与源库数据不一致的情况。
    • 源库为oracle RAC环境时,不支持使用scanip创建任务,可以使用某一节点作为源库,除配置任务时使用的节点外,源库其他节点异常依然可以正常迁移。
    • 数据类型不兼容时,可能引起迁移失败。

    操作须知

    • 对于迁移中的数据库对象,在迁移期间,目标库不能进行写入操作,否则会导致数据不一致。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 迁移过程中,源库不能做DDL变更。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
    • 目前只支持单个数据库的迁移,且目标库的连接账号需要和源数据库的库名保持一致。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表16 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库端:需要具有CREATE SESSION、SELECT ANY TRANSACTION、SELECT ANY TABLE、SELECT ANY DICTIONARY权限。
      • 目标数据库端:提供的目标数据库帐号必须拥有如下权限:CREATE SESSION、 ALTER USER, CREATE USER、DROP USER、 CREATE ANY VIEW、 DROP ANY VIEW、ALTER ANY TABLE、CREATE ANY TABLE、DROP ANY TABLE、SELECT ANY TABLE、UPDATE ANY TABLE、INSERT ANY TABLE、DELETE ANY TABLE、ALTER ANY INDEX、CREATE ANY INDEX、DROP ANY INDEX。
    • 全量+增量迁移权限要求:
      • 源数据库端:需要具有CREATE SESSION、SELECT ANY TRANSACTION、SELECT ANY TABLE、SELECT ANY DICTIONARY权限和EXECUTE_CATALOG_ROLE角色,若Oracle为12C及以上版本还需要LOGMINING权限。
      • 目标数据库端:提供的目标数据库帐号必须拥有如下权限:CREATE SESSION、 ALTER USER, CREATE USER、DROP USER、 CREATE ANY VIEW、 DROP ANY VIEW、ALTER ANY TABLE、CREATE ANY TABLE、DROP ANY TABLE、SELECT ANY TABLE、UPDATE ANY TABLE、INSERT ANY TABLE、DELETE ANY TABLE、ALTER ANY INDEX、CREATE ANY INDEX、DROP ANY INDEX。

    目标数据库帐号需要加入白名单,即使用具备ALTER SYSTEM权限账号,执行sql: alter system add hba entry (hostssl [用户名] [rds所在的子网网段])。

    迁移对象约束

    • 支持库、表结构、视图、主键、唯一键、外键、索引、表数据的迁移,其他数据库对象暂不支持,如存储过程、触发器、函数、序列、包、同义词、用户等。
    • 增量迁移不支持DDL的同步。
    • 全量阶段不支持bfile,xml、sdo_geometry、urowid和自定义类型。
    • 增量阶段不支持bfile,xml、interval、sdo_geometry、urowid和自定义类型。

    源数据库要求

    • binary_float或者binary_double类型不支持设置Nan、Inf、-Inf三个值,因为GaussDB T不支持。
    • 库名、表名和视图名不支持的字符有:非ASCII字符、“. ”、 “>”、 “<”、 “\”、 “`”、 “|”、 “,”、 “? ”、 “! ”、 “"”和 “'”。
    • 不支持字段的默认值为表达式,例如:default(`id` + 1)。
    • Oracle到GaussDB T的增量迁移,要求源数据库打开归档日志。
    • 源数据库不允许含有空库。
    • 目前仅支持如下字符集:ZHS16GBK, AL32UTF8, UTF8, US7ASCII, WE8MSWIN1252。
    • 源数据库不允许存在索引列的长度之和超过目标库索引列长度限制的索引,具体长度要求请参见索引长度说明

    目标数据库要求

    • 迁移前,需要手动在目标数据库端创建一个与源数据库同名的空数据库。

MySQL分库分表->DDM迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表17 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表18中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建迁移任务。
    • 数据类型不兼容时,可能引起迁移失败。

    操作须知

    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 迁移过程中,不允许对源库需要迁移的表结构进行修改。
    • 增量迁移场景下,不支持源数据库进行恢复操作。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
    • 迁移过程中不支持DDL操作。
    • 建议将expire_log_day参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。
    • 如果源数据库为自建库,并且安装了Percona Server for MySQL 5.6.x或Percona Server for MySQL 5.7.x时,内存管理器必须使用Jemalloc库,以避免因系统表频繁查询带来的内存回收不及时,并最终导致数据库Out of Memory问题。
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表18 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源物理分片数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT。
      • 目标中间件帐户需要具备以下基本权限:CREATE、DROP、ALTER、 INDEX、 INSERT、DELETE、 UPDATE、 SELECT, 同时必须具备扩展权限:全表Select权限。
      • 目标中间件帐户必须具备对所迁移数据库的权限。
    • 全量+增量迁移权限要求:
      • 源物理分片数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
      • 目标中间件帐户需要具备以下基本权限:CREATE、DROP、ALTER、 INDEX、 INSERT、DELETE、 UPDATE、 SELECT, 同时必须具备扩展权限::全表Select权限。
      • 目标中间件帐户必须具备对所迁移数据库的权限。

    迁移对象约束

    • 目前只支持迁移源库的数据,不支持迁移源库表结构及其他数据库对象。
    • 用户需要在目标库根据源端逻辑库的表结构,自行在目标库创建对应的表结构及索引。未在目标库创建的对象,视为用户不选择这个对象进行迁移。
    • 源库在目标库创建的表结构, 必须与源库的表结构完全一致。
    • 源库为DDM时,则不允许存在拆分键为timestamp类型的表。
    • 不支持非Myisam和非InnoDB表的迁移。

    源数据库要求

    • 增量迁移时,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之间。
    • 源分库分表中间件中的库名、表名不能包含:'<>/\以及非ASCII字符。
    • MySQL源数据库建议开启skip-name-resolve,减少连接超时的可能性。
    • 源数据库GTID状态建议为开启状态。

    目标数据库要求

    • 目标库若已存在数据,DRS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
    • 目标实例及关联RDS实例的运行状态必须正常,若关联RDS实例是主备实例,复制状态也必须正常。
    • 目标库关联RDS实例必须有足够的磁盘空间。
    • 目标库关联RDS数据库的字符集必须与源数据库一致。
    • 目标库实例若选择将时间戳类型(TIMESTAMP,DATETIME)的列作为分片键,则源库数据在迁移到目标库之后,作为分片键的该时间戳类型列的秒精度将被丢弃。
    • 目标数据库存在表的AUTO_INCREMENT值至少不能小于源库表的AUTO_INCREMENT值。

MySQL->GaussDB(for MySQL)迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表19 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表20中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 支持数据库、表、视图、索引、约束、函数、存储过程、触发器和事件的迁移。
    • 不支持系统库的迁移以及事件状态的迁移。
    • 不支持迁移加密表。
    • 不支持非Myisam和非InnoDB表的迁移。

    操作须知

    • 在结束迁移任务时,将进行所选事件(event)和触发器(trigger)的迁移,请在结束任务时关注迁移日志上报的状态,确保数据库完整性。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 增量迁移场景下,不支持源数据库进行恢复到某个备份点的操作(PITR)。
    • 增量迁移过程中,若源库存在分布式事务,可能会导致迁移失败。
    • 为了保持数据一致性,不允许对正在迁移中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。
    • 增量迁移阶段,支持断点续传功能,在主机系统崩溃的情况下,对于非事务性的无主键的表可能会出现重复插入数据的情况。
    • 在迁移任务结束之前,不允许源数据库提前中断公网连接。
    • 迁移过程中,不允许源库写入binlog格式为statement的数据。
    • 迁移过程中,不允许源库执行清除binlog的操作。
    • 为了避免正在迁移的数据被其他事务锁死,导致读数据超时,建议在业务低峰期进行数据迁移。
    • 迁移过程中,Taurs会将Myisam表自动转换成InnoDB,转化失败则迁移失败。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作。
    • 建议将expire_log_day参数设置在合理的范围,确保恢复时断点处的binlog尚未过期,以保证服务中断后的顺利恢复。
    • 如果源数据库为自建库,并且安装了Percona Server for MySQL 5.6.x或Percona Server for MySQL 5.7.x时,内存管理器必须使用Jemalloc库,以避免因系统表频繁查询带来的内存回收不及时,并最终导致数据库Out of Memory问题。
  • 在使用数据复制服务进行在线迁移的过程中,对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表20 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT。
      • 目标数据库帐号必须拥有如下权限:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、WITH GRANT OPTION。
    • 全量+增量迁移权限要求:
      • 源数据库帐户需要具备如下权限:SELECT、SHOW VIEW、EVENT、LOCK TABLES、REPLICATION SLAVE、REPLICATION CLIENT。
      • 目标数据库帐号必须拥有如下权限:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、WITH GRANT OPTION。

    迁移对象约束

    • 支持数据库、表、视图、索引、约束、函数、存储过程、触发器和事件的迁移。
    • 不支持系统库的迁移以及事件状态的迁移。
    • 不支持迁移加密表。
    • 不支持非Myisam和非InnoDB表的迁移。

    源数据库要求

    • 源数据库中的库名、表名、视图名不能包含:'<>/\以及非ASCII字符。
    • 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之间。
    • MySQL源数据库建议开启skip-name-resolve,减少连接超时的可能性。
    • 源数据库GTID状态建议为开启状态。
    • 源数据库不能包含有空库。

    目标数据库要求

    • 建议MySQL目标库的binlog日志格式为Row格式,否则增量迁移可能出错。
    • 目标数据库实例的运行状态必须正常。
    • 除了MySQL系统数据库之外,目标数据库不能包含与源数据库同名的数据库。
    • 建议目标库的事务隔离级别至少保证在已提交读。

Oracle->GaussDB(for MySQL)迁移场景

  • 针对一些无法预知或人为因素及环境突变导致迁移失败的情况,数据复制服务提供以下常见的操作限制,供您在迁移过程中参考。
    表21 操作要求

    类型名称

    操作限制(需要人为配合)

    注意事项

    • 表22中的环境要求均不允许在迁移过程中修改,直至迁移结束。
    • 相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。常见的关联关系:视图引用表、视图引用视图、主外键关联表等。
    • 表、视图等对象名迁移到目标库后会转换成小写,如ABC和abc。
    • 源库和目标库时区设置必须一致。
    • 如有中文、日文等特殊字符,业务连接Oracle数据库使用的编码需和Oracle数据库服务端编码一致,否则目标库会出现乱码。
    • Oracle中表结构迁移到GaussDB(for MySQL)后表的字符集为utf8mb4。
    • 由于无主键表缺乏行的唯一性标志,在网络不稳定情况下,迁移后,可能存在目标与源库数据不一致的情况。
    • Oracle中表结构长度(所有列长字节数之和,char、varchar2等类型字节长度和编码有关)超过65535时,可能导致迁移失败。
    • 数据类型不兼容时,可能引起迁移失败。

    操作须知

    • 对于迁移中的数据库对象,在迁移期间,目标库不能进行写入操作,否则会导致数据不一致。
    • 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
    • 迁移过程中,源库不能做DDL变更。
    • 选择表级对象迁移时,增量迁移过程中不建议对表进行重命名操作
  • 在线迁移对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
    表22 环境要求

    类型名称

    使用限制(DRS自动检查)

    数据库权限设置

    • 全量迁移权限要求:
      • 源数据库端:需要具有CREATE SESSION、SELECT ANY TRANSACTION、SELECT ANY TABLE、SELECT ANY DICTIONARY权限。
      • 目标数据库端:提供的目标数据库帐号必须拥有如下权限:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、INDEX、EVENT、RELOAD、CREATE VIEW、CREATE ROUTINE、TRIGGER。
    • 全量+增量迁移权限要求:
      • 源数据库端:需要具有CREATE SESSION、SELECT ANY TRANSACTION、SELECT ANY TABLE、SELECT ANY DICTIONARY和EXECUTE_CATALOG_ROLE角色,若Oracle为12C及以上版本还需要LOGMINING权限。
      • 目标数据库端:提供的目标数据库帐号必须拥有如下权限:SELECT、CREATE、DROP、DELETE、INSERT、UPDATE、ALTER、INDEX、EVENT、RELOAD、CREATE VIEW、CREATE ROUTINE、TRIGGER。

    迁移对象约束

    • 支持库、表结构、视图、主键、唯一键、外键、索引、表数据的迁移,其他数据库对象暂不支持,如存储过程、触发器、函数、序列、包、同义词、用户等。
    • 增量迁移不支持DDL的同步。
    • 增量阶段不支持bfile,xml、interval、sdo_geometry和自定义类型。

    源数据库要求

    • Oracle单行记录不能超过8K(text、blob部分计算),原因是innodb引擎限制单行大小不能超过8K。
    • 不建议以字符串类型作为主键或唯一键,因为Oracle的字符串作为主键、唯一键时区分空格,而GaussDB(for MySQL)不区分,可能导致数据不一致和死锁问题。
    • binary_float或者binary_double类型不支持设置Nan、Inf、-Inf三个值,因为GaussDB(for MySQL)不支持。
    • Oracle中number字段的值不要超过(65,30)的精度表示范围,int字段的值不要超过(65,0)的精度表示范围。原因是GaussDB(for MySQL)数字的表示范围比Oracle小。
    • 库名、表名和视图名不支持的字符有:非ASCII字符、“. ”、 “>”、 “<”、 “\”、 “`”、 “|”、 “,”、 “? ”、 “! ”、 “"”和 “'”。
    • 不支持字段的默认值为表达式,例如:default(`id` + 1)。
    • 源库中将函数作为default值时,该函数需要在目标库中也支持。
    • 增量迁移,要求源数据库打开归档日志。
    • 目前仅支持如下字符集:ZHS16GBK, AL32UTF8, UTF8, US7ASCII, WE8MSWIN1252。
    • 源数据库不允许存在索引列的长度之和超过目标库索引列长度限制的索引,具体长度要求请参见索引长度说明
    • 默认值不支持default user,GaussDB(for MySQL)没有对应的语法。
    • 源数据库不允许含有空库。

    目标数据库要求

    • 目标数据库不能存在待迁移数据库。
    • DRS同步时会有大量数据写入目标库,目标库max_allowed_packet 参数过小会导致无法写入,建议将目标库max_allowed_packet参数值设置为大于100MB。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问