华为云用户手册

  • 处理建议 如果源数据库为云上RDS实例,可通过RDS管理界面的参数配置,将binlog_row_image修改为FULL,完成修改后重启源数据库即可。 如果源数据库为本地自建库,请参考如下步骤修复。 登录MySQL源数据库所在服务器。 手动修改my.cnf配置文件,将binlog_row_image参数值修改为FULL后保存。 binlog_row_image=full 为防止继续生成非全镜像日志导致任务失败,需选择一个非业务时间段,重启源数据库即可。
  • 场景描述 增量迁移或同步期间DRS任务报错,日志提示信息:service INCREMENT failed, cause by: write table %s.%s failed: record tid:%s,seqno:%s with PK applied failed in table %s.%s, The MySQL server is running with the --super-read-only option so it cannot execute this statement
  • PostgreSQL为源同步场景 表1 同步对象中是否存在包含bytea、text类型字段的表 预检查项 同步对象中是否存在包含bytea、text类型字段的表。 描述 bytea、text类型的字段在同步过程中可能会导致DRS任务OOM。 待确认提示及处理建议 待确认原因:同步对象中是表包含bytea、text类型的字段,bytea、text类型的字段在同步过程中可能会导致DRS任务OOM。 处理建议:同步对象中如果存在包含bytea、text类型字段的表,建议创建大规格及以上规格的DRS任务进行同步。
  • 场景描述 增量迁移或同步期间DRS任务报错,日志提示信息:service LOG MANAGER failed, cause by: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Slave has more GTIDs than the master has, using the master's SERVER_UUID. This may indicate that the end of the binary log was truncated or that the last binary log file was lost, e.g., after a power or disk failure when sync_binlog != 1. The master may or may not have rolled back transactions that were already replicated to the slave. Suggest to replicate any transactions that master has rolled back from slave to master, and/or commit empty transactions on master to account for transactions that have been.
  • 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。 处理建议:请选择其他可同步的表。
  • 解决方案 联系客户运维工程师检查源库表结构是否正常,常用命令: SELECT * FROM `%s`.`%s` LIMIT 1 SHOW CREATE TABLE `%s`.`%s` 请联系源数据库管理员检查源库database和table是否删除,如果已删除,可参考MySQL迁移使用须知,重建任务。 检查迁移使用的账号对源库的表是否有执行SHOW CREATE TABLE操作的权限,如果不具备则参考MySQL迁移使用须知,为源库迁移账户赋予操作权限,然后在任务列表中,单击任务对应操作列的“续传”,重新提交任务。
  • 处理建议 在使用DRS进行迁移或同步时,连接目标数据库的账号需要满足一定的权限要求,才能启动任务。不同引擎的任务,需要的账号权限也不同。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 以MySQL的迁移为例,目标数据用户权限要求如下: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFEREN CES 、WITH GRANT OPTION。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 参考语句:GRANT SELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER, REFERENCES ON [待迁移数据库].* TO 'user1' WITH GRANT OPTION;
  • PostgreSQL迁移场景 表1 源库的schema名是否合法 预检查项 源库的schema名是否合法。 描述 源数据库的schema名不支持 '" .字符,检查源数据库schema名是否合法,若存在不合法的字符,会导致实时同步失败。 不通过提示及处理建议 不通过原因:源数据库schema名包含不支持的字符。 处理建议:通过执行如下语句,在源数据库修改包含不支持字符的schema名。 alter schema old_name rename to new_name;
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=account, index=0, schema_name=mysql, object_name='***']reason:[CANNOT UPDATE USER WITH NULL PASSWORD]。
  • 场景描述 全量同步期间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任务。 登录源库,执行如下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任务。
  • 解决方案 在源库执行以下SQL语句,查询密码为空的用户。 MySQL 5.7及以上版本: SELECT USER,HOST,authentication_string FROM MYSQL.user WHERE authentication_string IS NULL OR authentication_string=''; MySQL 5.6以及下版本 SELECT USER,HOST,`password` FROM MYSQL.user WHERE `password` IS NULL OR `password`=''; 执行以下SQL语句,删除掉源库密码为空的用户,或者给用户添加密码。 删除密码为空的用户 DROP USER ***@***; 给用户添加密码 ALTER USER ***@*** IDENTIFIED BY ***;
  • 操作场景 客户创建备份迁移任务,提示空间不足,可能出现以下报错: The disk space of the target database is insufficient。 The disk space of the destination database must be 1.5 times larger than the size of the backup file。 The disk space of the destination database is insufficient. Check whether the backup is compressed。
  • 场景描述 增量同步期间DRS任务报错,同步日志界面提示:service INCREMENT failed, cause by: Unable to connect to DBMS: url=%s user=%s, Caused by: FATAL: remaining connection slots are reserved for non-replication superuser connections
  • 场景描述 全量同步期间DRS任务报错,同步日志界面提示:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=table_structure, index=0, schema_name=%s, object_name=%s]reason:[ERROR: permission denied for schema %s]
  • 处理建议 如果源数据库为本地自建MySQL,可通过如下方法,修改源数据库Binlog格式: 方法一:手动修改my.cnf或my.ini配置文件,然后重启数据库。 binlog_format=row 方法二:执行如下命令,中断所有业务连接。 set global binlog_format='ROW' 然后手动修改my.cnf或my.ini配置文件。 binlog_format=row 在row模式下,日志增长速率会变大,注意磁盘使用情况。 如果源数据库为云上RDS for MySQ L实例 ,请使用修改实例参数功能,将源数据库参数binlog_format修改为row,重启数据库后生效。
  • 场景描述 全量迁移期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: retry structures failed events=the fail structures are [type=view, index=2, schema_name=%s, object_name=%s]reason:[Table '%s.%s' doesn't exist]
  • MongoDB迁移场景 表1 源库和目标库数据库固定集合一致性检查 预检查项 源库和目标库数据库固定集合一致性检查。 描述 检查源库和目标库数据库固定集合是否一致,若不一致,则导致迁移失败。 不通过提示及处理建议 不通过原因:源数据库的集合是固定集合,但是目标数据库存在和源库固定集合名称相同的集合。 处理建议:为了保证数据的一致性,可以删除目标库已经存在的和源数据库选择的固定集合的同名集合,或者选择不迁移这些冲突的固定集合。 不通过原因:用户选择迁移集合在目标库已经存在,并且是固定集合。 处理建议:为了保证数据的一致性,可以删除目标库已经存在的和用户选择迁移的同名集合,或者选择不迁移这些冲突的集合。
  • 场景描述 全量迁移或同步期间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 DATAMOVE failed, cause by: Unable to connect to DBMS: url=jdbc:mysql://*** user=root, Caused 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。
  • MongoDB迁移场景 表1 源数据库账号依赖检查 预检查项 源数据库账号依赖检查。 描述 在进行用户迁移时,若所选迁移的用户与某些角色存在依赖关系,需要同时选择迁移该用户及所依赖的角色,否则会导致迁移失败。 不通过提示及处理建议 不通过原因:源数据库账号依赖的数据库在目标数据库中不存在,并且也不在所选的对象选择列表中。 处理建议:在角色选择中选择账号依赖的角色一起迁移,或者不迁移这些依赖检查不通过的账号。 不通过原因:源数据库账号依赖的数据库在目标库中不存在,并且也不在用户的对象选择列表中。 处理建议:在对象选择中选择账号依赖的数据库一起迁移,或者不迁移这些依赖检查不通过的账号。
  • 场景描述 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.
  • 解决方案 修改位于$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; 然后重启数据库生效。
  • 解决方案 通过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添加或修改成功后,选择一个非业务时间段,重启源数据库即可。
  • MySQL迁移场景 表1 Definer迁移权限检查 预检查项 Definer迁移权限检查。 描述 入云场景Definer迁移需要源库账号具有all privileges权限,出云场景的Definer迁移需要目标库账号具有all privileges权限。 不通过提示及处理建议 不通过原因:目标库的指定账号当前权限不足。 处理建议:选择Definer指定为目标数据库连接用户账号,或者赋予目标数据库用户all privileges权限。 可参考如下语句: grant all privileges on *.* to ‘user’@’host’ 不通过原因:源库的指定账号当前权限不足。 处理建议: 将所有Definer迁移到指定目标库用户下:在配置目标库时选择“所有Definer迁移到该用户下”,使得所有对象Definer均在该指定用户下。 保留原Definer设置,但需要赋予源数据库用户all privileges权限。 可参考如下语句: grant all privileges on *.* to ‘user’@’host’
  • 处理建议 建议议在启动同步前,将目标数据库参数“session_replication_role”设置为replica。同步结束后,将该参数的值改为origin。 自建PostgreSQL可参考以下SQL命令: SET session_replication_role TO 'replica'; 云数据RDS for PostgreSQL,可参考“修改RDS for PostgreSQL实例参数”章节进行修改。
  • 处理建议 删除源库表中名称字母相同但大小写不同的列,或者变更源库表中名称字母相同但大小写不同的列名称。 表在目标库不存在时请在目标库中创建上述表,并确保与源库的表结构一致。建表语句参考: CREATE TABLE table_name (column_name data_type); 与源库的表结构不一致时请在目标库表中创建缺失的列,或把目标库表中已存在名称字母相同但大小写不同的列转为小写,或删除源库表中多余的列。 目标库和源库约束保持一致,或确认不一致的约束不影响后续数据迁移。
  • 场景描述 全量迁移或同步期间DRS任务报错,日志提示信息:service DATAMOVE failed, cause by: com.continuent.tungsten.replicator.ReplicatorException: Unable to connect to DBMS: url=jdbc:mysql://*** user=***, Caused by: failed to create new session。
  • 场景描述 全量迁移或同步期间,日志界面提示信息: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]。
  • MongoDB迁移场景 表1 源数据库的实例类型检查 预检查项 源数据库的实例类型检查。 描述 源数据库的实例类型需要和目标数据库的实例类型一致,若不一致,会导致迁移失败。 不通过提示及处理建议 不通过原因:目标数据库是集群但是源数据库是副本集。 处理建议:建议更换源数据库实例类型或者目标数据库实例类型。 不通过原因:目标数据库是副本集但是源数据库是集群。 处理建议:建议更换源数据库实例类型或者目标数据库实例类型。
共100000条