数据传输服务DTS

MySQL迁移/同步到MySQL

2023-10-24 06:41:09

数据库参数检查

1、 源数据库binlog日志是否开启

失败原因处理建议
源库Binlog未开启。
  1. 请在配置文件的[mysqld]标签下配置上log_bin参数:

    log_bin=mysql_bin

  2. 后重启mysqld服务。

2、源库binlog模式检查

失败原因处理建议

源库Binlog模式不是ROW。

  1. 请在配置文件的[mysqld]标签下配置上log_bin参数:

    binlog_format=row

  2. 后重启mysqld服务。

3、源库binlog影像类型检查

失败原因处理建议
源库binlog_row_image设置不正确。
  1. 请在配置文件的[mysqld]标签下配置上log_bin参数:

    binlog_row_image=full

  2. 后重启mysqld服务。

4、源库binlog存在性检查

失败原因处理建议
源库Binlog文件被误删除。
  • 如果该Binlog文件不重要,则登录MySQL源数据库,清除报错Binlog以及之前的所有Binlog文件。

  • 如果该Binlog文件较重要,请联系MySQL源数据库的管理员,尝试恢复该Binlog文件。

5、源库和目标库字符集一致性检查

失败原因处理建议
源数据库和目标数据库字符集不一致。
  1. 查看源数据库和目标数据库的字符集是否一致:

    show global variables like "character_set_server";

  2. 使用命令修改服务器的字符集:

    set global character_set_server='<字符集>';

6、源库和目标库时区一致性检查

失败原因处理建议
源库和目标库的时区设置不一致。
  • 请将目标库的时区设置为和源库一致:

    set global time_zone = '具体时区(如东八区';

    flush privileges;

7、sql_mode参数一致性检查

失败原因处理建议
源库和目标库的sql_mode设置不一致。
  1. 登录源库,查看源库的sql_mode取值:

    show global variables like '%sql_mode%';

  2. 登录目标数据库,将sql_mode设置为和源库一致:

    set global sql_mode='<源库的sql_mode>';

8、源库server_id检查

失败原因处理建议
查看源库的server_id是否大于1。
  • 请执行以下SQL语句修改源库server_id的值:

    set global server_id=<my_id>;

9、lower_case_table_names一致性检查

失败原因处理建议
源库和目标库lower_case_table_names设置不一致。
  1. 请登录源库和目标库检查各自lower_case_table_names的值,并选择目标库,在配置文件的[mysqld]标签下明确添加lower_case_table_names的值和对方一致;

  2.  然后重启mysqld服务。

10、log_slave_updates参数检查

失败原因处理建议
源库为集群的从节点,且log_slave_updates参数不为ON,期间源库重放集群主节点的事务将不会同步到目标库。
  • 如果所连接的源库为集群的从节点,需要将源库的log_slave_updates设置为ON。

11、gtid_mode参数检查

失败原因处理建议
源库和目标库的gtid_mode参数不为ON,将不支持同步过程中源库的主备切换。
  • 如果源库为主从架构,建议将源库主从节点和目标库的gtid_mode都设置为ON。

12、目标库日志包大小检查

失败原因处理建议
源库和目标lower_case_table_names设置不一致。
  1. 请登录源库和目标库检查各自lower_case_table_names的值,并选择目标库,在配置文件的[mysqld]标签下明确添加lower_case_table_names的值和对方一致;

  2. 然后重启mysqld服务。

13、源库连接数检查

失败原因处理建议
源库的最大连接数配置小于300。
  1. 在源库执行执行以下语句:

    set global max_connections=300;

  2. 然后重新进行预检查。

14、目标库连接数检查

失败原因处理建议
目标库的最大连接数配置小于300。
  1. 在源库执行执行以下语句:

    set global max_connections=300;

  2. 然后重新进行预检查。

15、待迁移表主键检查

失败原因处理建议
待迁移对象中存在无主键的表。待迁移对象中的表在列名映射中,主键未被勾选。
  • 当一张表的主键不存在,或者一张表的主键列未被选中时,将不能够对张表进行同步,只能做迁移!如果该表需要做同步,请给该表添加主键。

  • 如果联合主键或者联合唯一键约束只被部分选中时,对于DTS任务而言不合法,请要么勾选上所有联合约束列,要么都不勾选,同时评估是否会对业务产生影响。

数据库用户权限检查

1、源库用户权限检查

失败原因处理建议
  • 源库迁移账号没有对MySQL库的查询权限;

  • 源库迁移账号没有对某些待迁移库的查询权限;

  • 源库迁移账号缺少部分全局权限。

  • 执行以下命令为源库迁移账号赋予正确权限:

    GRANT SELECT ON mysql.* TO '迁移账号'@'%';

    GRANT SELECT ON 待迁移的库.* TO '迁移账号'@'%';

    GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW,PROCESS ON*.* TO '迁移账号'@'%';

2、目标库用户权限检查

失败原因处理建议
目标库迁移账号缺少部分全局权限。
  • 登录MySQL目标数据库,执行以下命令赋予迁移账号以下全局权限:

    GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES,CREATE USER, CREATE VIEW,DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT,LOCK TABLES,PROCESS, REFERENCES, RELOAD, SELECT, SHOW DATABASES, SHOW VIEW,TRIGGER, UPDATE ON*.*TO '迁移账号'@'%';

数据库版本检查

1、MySQL版本检查

失败原因处理建议
  • 源库的版本号不符合要求,大版本号不能低于5.6;

  • 目标库的版本号不符合要求,大版本号不能低于5.6;

  • 源库和目标库的版本大小不符合要求,当前源库的大版本号大于目标库的大版本号。

  • 请确保源库和目标库的MySQL版本在要求范围内,且目标库版本不小于源库版本,如果是双向同步则要求源库和目标库大版本号一致。

网络情况检查

1、源库连通性检查

失败原因处理建议
源数据库账号或密码不正确。
输入正确的数据库账号和密码后重新执行预检查。
源数据库所在网络或服务器设置了防火墙。查看数据库所在的网络防火墙是否限制了DTS的IP地址段,如果有,关闭防火墙或者将DTS的IP地址加入防火墙白名单中。
源库迁移账号登录权限不足。登录源库,为迁移账号添加相应的远程访问权限。
网络互通问题。联系数据库所在机器管理人员和DTS部署机器管理人员排查问题。

2、目标库连通性检查

失败原因处理建议
目标数据库账号或密码不正确。
输入正确的数据库账号和密码后重新执行预检查。
目标数据库所在网络或服务器设置了防火墙。查看数据库所在的网络防火墙是否限制了DTS的IP地址段,如果有,关闭防火墙或者将DTS的IP地址加入防火墙白名单中。
目标库迁移账号登录权限不足。登录目标库,为迁移账号添加相应的远程访问权限。
网络互通问题。联系数据库所在机器管理人员和DTS部署机器管理人员排查问题。

数据库对象检查

1、约束完整性检查

失败原因处理建议
待迁移子表依赖的父表没有被选择为迁移对象。    
  1. 在迁移对象中加入相应父表;

  2. 在迁移对象中移除相应子表;

  3. 删除相关外键依赖。

2、视图依赖关系检查

失败原因处理建议
待迁移视图依赖的表不存在或相应库表列已被更名。   
  1. 在迁移对象中加入视图依赖的表

  2. 在迁移对象中移除相应视图;

  3. 将待迁移视图所依赖的库表列更名取消。

3、同名对象存在性检查

失败原因处理建议
目标库存在和待迁移对象同名的表、视图、函数或者存储过程。
  • 忽略警告并开始执行DTS任务,该方法会在结构迁移中跳过那些同名对象,且在全量迁移过程中覆盖同名表中相同主键的数据;

  • 将目标库存在的同名对象删除或更名;

  • 取消选中这些同名的待迁移对象;

  • 如果只存在表同名对象,可对这些表进行表名映射。

注意

如果表结构不一致,可能导致全量任务失败。

4、schema默认字符集检查

失败原因处理建议
  • 源库的字符集设置不是支持中文编码的字符集;

  • 目标库以存在同名库对象时,目标库的字符集设置不是支持中文编码的字符集。

  • 当数据库的默认字符集设置不是支持中文编码的字符集时,可能会在任务完成后发现目标库中的中文字符为乱码

  • 为安全起见,请修改这些库的字符集为支持中文的字符集(utf8、gbk、latin1或utf8mb4),再启动任务。

5、存储引擎检查

失败原因处理建议
部分待迁移表的存储引擎不是InnoDB或MyISAM。
  1. 将不支持的表更换到支持的存储引擎:

    alter table <表名> engine=InnoDB;

  2. 根据失败详情,从待迁移对象中移出那些存储引擎不支持的表。


uhVxSpGNhctS