华为云用户手册

  • Oracle为源同步场景 表1 源库表字段类型检查 预检查项 源库表字段类型检查。 描述 对源数据库待同步表字段进行检查。 不通过提示及处理建议 不通过原因:源数据库表含有不支持的表字段类型。支持的表字段类型有: VARCHAR,VARCHAR2,NVARCHAR2,NUMBER,FLOAT,LONG,DATE,BINARY_FLOAT,BINARY_DOUBLE,RAW,LONG RAW,CHAR,NCHAR,CLOB,NCLOB,BLOB,ROWID,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE。 处理建议:请选择其他可同步的表。
  • 处理建议 目标数据库是RDS for MySQ L实例 时,GTID默认为开启状态且不支持关闭。如果GTID未开启,需要联系RDS for MySQL运维人员进行处理。 目标数据库为MySQL 5.5版本,则不支持设置GTID,无法使用DRS进行灾备,请创建迁移任务或联系运维人员进行处理。 目标数据库为MySQL 5.6及以上版本,通过修改数据库配置文件中如下参数开启GTID,然后重启数据库。 参考命令如下: gtid_mode = onlog_slave_updates = true enforce_gtid_consistency = on
  • PostgreSQL为源同步场景 表1 源库是否包含无日志表(UN LOG GED TABLE) 预检查项 源库包含无日志表(UNLOGGED TABLE)。 描述 检查源库包含无日志表(UNLOGGED TABLE),若存在无日志表,则导致同步失败。 待确认提示及处理建议 待确认原因:源数据库包含无日志表(UNLOGGED TABLE),对无日志表的修改不会记录日志, 因此进入增量同步后,UNLOGGED类型的表将无法同步增量数据。 处理建议:请确认这些无日志表是否需要同步增量数据,如果需要,请将这些表的UNLOGGED属性去掉,参考命令:ALTER TABLE TABLE_NAME SET LOGGED。
  • MariaDB同步场景 表2 目标库是否存在与源库同名的表 预检查项 目标数据库是否存在与源数据库同名的表(表名冲突)。 描述 校验用户提供的目标数据库是否存在与源数据库同名的表,避免已存在的表被覆盖。若存在,则无法迁移。 特殊情况:如果源和目标数据库中的表,其表名和表结构均相同,针对这种情况,系统判定为不冲突。 不通过提示及处理建议 不通过原因:目标数据库存在与源数据库同名的表。 处理建议:请先检查目标数据库的这些同名表是否需要保留,然后删除同名表或者使用新的目标库再重试。 不通过原因:目标数据库存在与对象编辑新增的表同名的表。 处理建议:请先检查目标数据库的这些同名表是否需要保留,然后删除同名表或者重新进行对象编辑。 不通过原因:源库和目标库是相同的RDS实例,且存在没有映射的库。 处理建议:对没有映射的数据库创建映射。
  • MySQL迁移场景 表1 目标数据库SSL证书类型检查 预检查项 目标数据库SSL证书类型检查。 描述 检查云内数据库迁移出云时,目标数据库的SSL证书类型是否正确,如不符合要求,会导致迁移失败。 不通过提示及处理建议 不通过原因:目标数据库SSL证书不存在。 处理建议:请在“源库及目标库”页面,目标库信息处开启SSL安全连接并上传内容只包含一段以“BEGIN CERTIFICATE”开始和“END CERTIFICATE”结束的SSL加密证书。 不通过原因:不支持目标数据库SSL证书类型。 处理建议:请在“源库及目标库”页面,目标库信息处开启SSL安全连接并上传内容只包含一段以“BEGIN CERTIFICATE”开始和“END CERTIFICATE”结束的SSL加密证书。
  • MySQL同步场景 表1 目标数据库是否存在与源数据库同名的表 预检查项 目标数据库是否存在与源数据库同名的表(表名冲突)。 描述 校验用户提供的目标数据库是否存在与源数据库同名的表,避免已存在的表被覆盖。若存在,则无法迁移。 特殊情况:如果源和目标数据库中的表,其表名和表结构均相同,针对这种情况,系统判定为不冲突。 不通过提示及处理建议 不通过原因:目标数据库存在与源数据库同名的表。 处理建议:请先检查目标数据库的这些同名表是否需要保留,然后删除同名表或者使用新的目标库再重试。 不通过原因:目标数据库存在与对象编辑新增的表同名的表。 处理建议:请先检查目标数据库的这些同名表是否需要保留,然后删除同名表或者重新进行对象编辑。 不通过原因:源库和目标库是相同的RDS实例,且存在没有映射的库。 处理建议:对没有映射的数据库创建映射。 待确认原因:目标库存在与源库不同SRID列值的表。 处理建议:请检查目标库该表使用地理类型坐标系是否符合预期。如源端已指定地理类型列坐标系属性,请修改目标库表结构与源端保持一致。
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: apply event=[type=table_data, batch_index_in_shard=***, table_schema=%s, table_name=%s, record_num=***] occur error, msg=apply data of table=`%s `.`%s ` failed: Java heap space。
  • 场景描述 全量或增量阶段,DRS迁移或同步任务报错,日志提示信息:service %s failed, cause by: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=account, index=0, schema_name=mysql, object_name='***']reason:[Access denied for user '***' to database '***']
  • 处理建议 源数据库是RDS for MySQL实例时,GTID默认为开启状态且不支持关闭。如果GTID未开启,需要联系RDS for MySQL运维人员进行处理。 源数据库为MySQL 5.5版本,则不支持设置GTID,无法使用DRS进行同步、灾备任务,请创建迁移任务或联系运维人员进行处理。 源数据库为MySQL 5.6及以上版本,通过修改数据库配置文件中如下参数开启GTID,然后重启数据库。 参考命令如下: gtid_mode = onlog_slave_updates = trueenforce_gtid_consistency = on
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: target engine postgresql client initialize failed, detail: Unable to connect to DBMS: url=%s/position3.0?client_encoding=UTF-8&autosave=always&stringtype=unspecified&ssl=false&sslmode=prefer user=%s, Caused by: ERROR: invalid locale name: 'Chinese (Simplified)_China.936'
  • 解决方案 缺少的函数可能属于某个插件,也可能是用户自建的函数。可按照如下步骤在源库检查函数的来源,并在目标库创建对应插件或者自建函数后,重试DRS任务。 登录源库,执行如下SQL查询函数所属的插件,其中f_name为对应函数名称。 select extname, nspname, proname,pg_get_function_arguments(c.oid) as funcargs from pg_extension e join pg_depend d on (d.refobjid=e.oid) join pg_proc c on (d.objid=c.oid) join pg_namespace n on c.pronamespace=n.oid where proname ='f_name'; 有查询结果,表示函数属于某个插件,结果中的extname字段即为插件名称,继续执行2。 无查询结果,表示函数不属于任何插件,为用户自建函数,执行3。 如果函数属于某个插件,则在目标库RDS for PostgreSQL的管理页面中选择插件管理,安装对应的插件。 如果函数为用户自建函数,则在目标库创建与源库相同的函数,函数定义语句可参考如下SQL在源库执行的结果,其中f_name为对应函数名称。 select n.nspname,p.proname,pg_get_functiondef(p.oid) as funcdef from pg_proc p left join pg_namespace n on p.pronamespace=n.oid where proname ='f_name'; 重试DRS任务。
  • 解决方案 通过MySQL官方客户端或者其它工具登录源数据库。 在源数据库上执行全局参数设置命令。 set global binlog_format = ROW; 在源数据库上执行如下命令确认上面操作已执行成功。 select @@global.binlog_format; 您可以通过如下两种方式确保修改后的源库binlog_format格式立即生效。 方法一: 选择一个非业务的时间段,中断当前数据库上的所有业务连接。 通过如下命令查询当前数据库上的所有业务连接(所有的binlog Dump连接及当前连接除外)。 show processlist; 中断上面查出的所有业务连接。 在上述操作未结束之前,请不要创建或者启动迁移任务,否则会导致数据不一致。 为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。 binlog_format=ROW 方法二: 为了避免源库binlog_format格式因为数据库重启失效,请在源库的启动配置文件(my.ini或my.cnf等)中添加或修改配置参数binlog_format并保存。 binlog_format=ROW 确保上述配置参数binlog_format添加或修改成功后,选择一个非业务时间段,重启源数据库即可。
  • 场景描述 全量或增量阶段,DRS迁移或同步任务报错,日志提示信息:service %s failed, cause by: The background process is unavailable. Maybe it has been killed manually or by the operating system. Please restart the task if possible or wait for restarting by itself within 5 minutes.
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: apply event=[type=table_structure, index=%s, schema_name=%s, object_name=%s] occur error, msg=ERROR: function *** does not exist Hint: No function matches the given name and argument types. You might need to add explicit type casts.
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=constraint_data, index=0, schema_name=%s, object_name=%s]reason:[Temporary file write failure.]
  • 解决方案 方法一:重新创建任务,并在使用时遵循以下DRS使用规则: 若选择同步DDL,请勿在源库执行DRS不支持的DDL。 若不选择同步DDL时,请勿在源库执行DDL,或在源库执行DDL前,先在目标库执行相同的DDL。 全量同步及增量同步期间,请勿在目标库执行写入操作,否则可能导致数据不一致或同步失败. 方法二:采取以下办法,尝试恢复DRS任务: 可能原因:同步任务没有选择同步DDL,源库的建表DDL未能同步至目标库。 解决方案:按照源库的表结构,在目标库创建对应的表,然后重试DRS任务。 可能原因:同步任务选择了同步DDL,但源库使用了DRS不支持同步的DDL语句创建了表。 解决方案:按照源库的表结构,在目标库创建对应的表,然后重试DRS任务。 可能原因:目标库删除了表。 解决方案:按照被删除的表结构,在目标库重新创建对应的表,然后重试DRS任务。 目标库删除表的同时,也删除了表中的数据,因此即使重新建表恢复任务,也可能导致该表数据不一致或任务再次失败。
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=account, index=0, schema_name=dummy, object_name=%s]reason:[ERROR: password must not equal user name]
  • MySQL迁移场景 表1 源端是否存在触发器或事件 预检查项 源端是否存在触发器或事件。 描述 为了避免触发器或事件的自动触发机制导致非预期数据操作,从而引起两边数据的不一致,DRS任务将在用户结束任务时启动触发器或事件的迁移,如果您在任务运行中,关闭或断开了源数据库连接,则会导致触发器或事件未迁移。 待确认提示及处理建议 待确认原因:源数据库存在触发器或事件。 处理建议:此警告仅为迁移操作提示,请您先结束任务后再断开源端网络,则可确保迁移完整性。
  • 解决方案 检查源库复制槽数量是否达到最大复制槽数的限制。如果是,建议删除源库不再使用的复制槽,或者增大max_replication_slots后重启源库。 查询逻辑复制槽数量: select count(1) from pg_replication_slots; 查询最大复制槽数量: select setting as number from pg_settings where name = 'max_replication_slots'; 确定源库是否存在长事务未提交,如果有,则会建槽超时,导致任务失败。 查询事务情况: select pid, datname, state, backend_xid, xact_start, (now() - xact_start) as cost from pg_stat_activity where backend_xid is not null order by xact_start; 如果需要停止长事务执行: select pg_terminate_backend(pid);
  • 解决方案 方法一: 在目标库执行对应SQL语句,将对应列的字符排序规则修改为utf8mb4_0900_ai_ci。例如,将表test_collation_1 的c1列的字符排序规则修改为utf8mb4_0900_ai_ci: ALTER TABLE test_collation_1 MODIFY COLUMN c1 VARCHAR(16) COLLATE utf8mb4_0900_ai_ci; 修改完成后,在任务列表中,单击任务对应操作列的“续传”,重新提交任务。 方法二: 修改源库表结构,将表中带有collate utf8mb4_general_ci 的列都去掉。 修改完成后,在任务列表中,单击任务对应操作列的“重置”,重新开始任务;或重新创建DRS任务进行迁移。 方法三: 在目标库执行对应SQL语句,将目标库字符排序规则修改为utf8mb4_0900_ai_ci SET GLOBAL default_collation_for_utf8mb4='utf8mb4_general_ci'; 修改完成后,在任务列表中,单击任务对应操作列的“重置”,重新开始任务;或重新创建DRS任务进行迁移。
  • 解决方案 修改位于$ORACLE_HOME/network/admin目录的sqlnet.ora文件,允许DRS任务IP访问。 如果使用白名单,则TCP.INVITED_NODES配置项中需要包含DRS的任务IP。 如果使用黑名单,则TCP.EXCLUDED_NODES中不能包含DRS的任务IP。 查看源数据库信息(例如IP,端口,或者service name/sid)是否发生修改,如果源库信息发生改变,可选择以下操作: 恢复修改的源数据库信息,DRS任务会自动重试继续同步任务。 重新创建任务进行同步。 执行以下命令查看源数据库连接数,连接数已经达到上限。 查看当前连接数: select count(*) from v$process; 查看最大连接数: select value from v$parameter where name ='processes'; 如果源数据库连接已达到上限,执行以下命令修改数据库允许的最大连接数: alter system set processes = 300 scope = spfile; 然后重启数据库生效。
  • 场景描述 全量迁移或同步期间,日志界面提示信息:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=constraint_data, index=0, schema_name=DB, object_name=TABLE]reason:[Too many keys specified; max 64 keys allowed]。
  • 场景描述 全量或增量同步期间DRS任务报错,同步日志界面提示:retry structures failed events=the fail structures are [type=index, index=***, schema_name=***, object_name=***]reason:[ERROR: memory required is *** MB, maintenance_work_mem is *** MB]。
  • 场景描述 Oracle为源全量或增量同步期间DRS任务报错,同步日志界面提示:service LOGMANAGER failed, cause by: Unable to connect to DBMS: url=jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*.*.*.*)(PORT=1521))(CONNECT_DATA=*)) user=*, Caused by: IO Error: Got minus one from a read call.
  • 处理建议 修改源数据库或者目标数据库的collation_server参数,使其保持一致。 如果为自建的MySQL数据库,可通过命令行方式修改。 通过以下命令查看数据库的字符集。 SHOW VARIABLES LIKE "collation_server"; 使用命令修改服务器的字符集。 SET collation_server='utf8_unicode_ci'; 如果为RDS for MySQL实例,可通过修改数据库collation_server参数实现,详情请参考修改实例参数章节。 更多其他类型数据库修改collation_server的方法,可参考对应数据库的使用说明。
  • PostgreSQL为源同步 表1 源库对象关联关系检查 预检查项 源库对象关联关系检查。 描述 源库对象关联关系检查,若不符合迁移要求,则导致迁移失败。 不通过提示及处理建议 不通过原因:已选择的对象中存在含外键的表,且未选择迁移该外键依赖的表。 处理建议:请在对象选择页面选择依赖的对象。 不通过原因:已选择的对象中存在视图,且未选择迁移该视图依赖的表或视图。 处理建议:请在对象选择页面选择依赖的对象。 不通过原因:已选择的对象中存在继承表,且未选择迁移该继承表依赖的表。 处理建议:请在对象选择页面选择依赖的对象。
  • Oracle为源同步场景 表1 源库是否正确开启补充日志 预检查项 源库是否正确开启补充日志。 描述 Oracle源库未开启库级补充日志或级别不满足要求,会导致同步失败。 不通过提示及处理建议 不通过原因:源库补充日志级别告警,源库补充日志设定为库的主键和唯一键级别,可能在UPDATE目标库不存在的数据时丢失部分字段数据。 处理建议:建议设置库或表补充日志为ALL级别。 修改库补充日志为ALL级别语句参考: alter database add supplemental log data (all) columns; 查看库补充日志为ALL级别是否打开: select supplemental_log_data_all as allLog from v$database;
  • 文件系统性能数据 SFS Turbo文件系统的性能主要有IOPS和吞吐量等指标,具体各指标数据参见表1。 表1 性能数据表 参数 HPC型 20MB/s/TiB 40MB/s/TiB 125MB/s/TiB 250MB/s/TiB 500MB/s/TiB 1000MB/s/TiB 最大容量 1PB 1PB 1PB 1PB 1PB 1PB 最大IOPS 25万 25万 100万 100万 400万 400万 最大吞吐量 8GB/s 8GB/s 20GB/s 20GB/s 80GB/s 80GB/s IOPS性能计算公式 IOPS=min(250000,600×容量) 其中,容量单位为TB IOPS=min(250000,1200×容量) 其中,容量单位为TB IOPS=min(1000000,6000×容量) 其中,容量单位为TB IOPS=min(1000000,12500×容量) 其中,容量单位为TB IOPS=min(4000000,25000×容量) 其中,容量单位为TB IOPS=min(4000000,50000×容量) 其中,容量单位为TB
  • 通用测试配置样例 以下提供的预估值为单台弹性 云服务器ECS 测试的结果。建议使用多台E CS 测试,以达到弹性文件服务的性能指标。 本文以SFS Turbo性能型,云服务器规格如下为例说明。 规格:通用计算增强型 | c3.xlarge.4 | 4vCPUs | 16GB 镜像:CentOS 7.564bit fio命令: fio --randrepeat=1 --ioengine=libaio --name=test -output=output.log --direct=1 --filename=/mnt/nfs/test_fio --bs=1M --iodepth=128 --size=10240M --readwrite=rw --rwmixwrite=30 --fallocate=none 其中,“/mnt/nfs/test_fio”为待测试的目标文件的挂载路径,需具体到文件名,即这里要测试的是“/mnt/nfs”目录下的“test_fio”文件,请根据实际填写。 fio结果: fio命令: fio --randrepeat=1 --ioengine=libaio --name=test -output=output.log --direct=1 --filename=/mnt/nfs/test_fio --bs=1M --iodepth=128 --size=10240M --readwrite=rw --rwmixwrite=70 --fallocate=none 其中,“/mnt/nfs/test_fio”为待测试的目标文件的挂载路径,需具体到文件名,即这里要测试的是“/mnt/nfs”目录下的“test_fio”文件,请根据实际填写。 fio结果: 顺序读IOPS fio命令: fio --ioengine=libaio --direct=1 --fallocate=none --time_based=1 --group_reporting=1 --name=iops_fio --directory=/mnt/sfs-turbo/ --rw=read --bs=4k --size=1G --iodepth=128 --runtime=120 --numjobs=10 其中,“/mnt/sfs-turbo/”为待测试的目标文件的挂载路径,需具体到文件名,请根据实际填写。 fio结果: 随机读IOPS fio命令: fio --ioengine=libaio --direct=1 --fallocate=none --time_based=1 --group_reporting=1 --name=iops_fio --directory=/mnt/sfs-turbo/ --rw=randread --bs=4k --size=1G --iodepth=128 --runtime=120 --numjobs=10 其中,“/mnt/sfs-turbo/”为待测试的目标文件的挂载路径,需具体到文件名,请根据实际填写。 fio结果: 顺序写IOPS fio命令: fio --ioengine=libaio --direct=1 --fallocate=none --time_based=1 --group_reporting=1 --name=iops_fio --directory=/mnt/sfs-turbo/ --rw=write --bs=4k --size=1G --iodepth=128 --runtime=120 --numjobs=10 其中,“/mnt/sfs-turbo/”为待测试的目标文件的挂载路径,需具体到文件名,请根据实际填写。 fio结果: 随机写IOPS fio命令: fio --ioengine=libaio --direct=1 --fallocate=none --time_based=1 --group_reporting=1 --name=iops_fio --directory=/mnt/sfs-turbo/ --rw=randwrite --bs=4k --size=1G --iodepth=128 --runtime=120 --numjobs=10 其中,“/mnt/sfs-turbo/”为待测试的目标文件的挂载路径,需具体到文件名,请根据实际填写。 fio结果: 顺序读带宽 fio命令: fio --randrepeat=1 --ioengine=libaio --name=test -output=output.log --direct=1 --filename=/mnt/sfs-turbo/test_fio --bs=1M --iodepth=128 --size=10240M --readwrite=read --fallocate=none 其中,“/mnt/sfs-turbo/test_fio”为待测试的目标文件的挂载路径,需具体到文件名,即这里要测试的是“/mnt/sfs-turbo”目录下的“test_fio”文件,请根据实际填写。 fio结果: 随机读带宽 fio命令: fio --ioengine=libaio --direct=1 --fallocate=none --time_based=1 --group_reporting=1 --name=iops_fio --directory=/mnt/sfs-turbo/ --rw=randread --bs=1M --size=10G --iodepth=128 --runtime=120 --numjobs=1 其中,“/mnt/sfs-turbo/”为待测试的目标文件的挂载路径,需具体到文件名,请根据实际填写。 fio结果: 顺序写带宽 fio命令: fio --ioengine=libaio --direct=1 --fallocate=none --time_based=1 --group_reporting=1 --name=iops_fio --directory=/mnt/sfs-turbo/ --rw=write --bs=1M --size=10G --iodepth=128 --runtime=120 --numjobs=1 其中,“/mnt/sfs-turbo/”为待测试的目标文件的挂载路径,需具体到文件名,请根据实际填写。 fio结果: 随机写带宽 fio命令: fio --ioengine=libaio --direct=1 --fallocate=none --time_based=1 --group_reporting=1 --name=iops_fio --directory=/mnt/sfs-turbo/ --rw=randwrite --bs=1M --size=10G --iodepth=128 --runtime=120 --numjobs=1 其中,“/mnt/sfs-turbo/”为待测试的目标文件的挂载路径,需具体到文件名,请根据实际填写。 fio结果:
共99354条