本页介绍MySQL迁移/同步到MySQL时各种预检查不通过情况的故障排除方法。
数据库参数检查
1、 源数据库binlog日志是否开启
失败原因 | 处理建议 |
---|
源库Binlog未开启。 | 请在配置文件的[mysqld]标签下配置上log_bin参数: log_bin=mysql_bin
然后重启mysqld服务。
|
2、源库binlog模式检查
失败原因 | 处理建议 |
---|
| 请在配置文件的[mysqld]标签下配置上log_bin参数: binlog_format=row 然后重启mysqld服务。
|
3、源库binlog影像类型检查
失败原因 | 处理建议 |
---|
源库binlog_row_image设置不正确。 | 请在配置文件的[mysqld]标签下配置上log_bin参数: binlog_row_image=full 然后重启mysqld服务。
|
4、源库binlog存在性检查
5、源库和目标库字符集一致性检查
失败原因 | 处理建议 |
---|
源数据库和目标数据库字符集不一致。 | 查看源数据库和目标数据库的字符集是否一致: show global variables like "character_set_server"; 使用命令修改服务器的字符集: set global character_set_server='<字符集>';
|
6、源库和目标库时区一致性检查
7、sql_mode参数一致性检查
失败原因 | 处理建议 |
---|
源库和目标库的sql_mode设置不一致。 | 登录源库,查看源库的sql_mode取值: show global variables like '%sql_mode%'; 登录目标数据库,将sql_mode设置为和源库一致: set global sql_mode='<源库的sql_mode>';
|
8、源库server_id检查
失败原因 | 处理建议 |
---|
查看源库的server_id是否大于0。 | |
9、lower_case_table_names一致性检查
失败原因 | 处理建议 |
---|
源库和目标库lower_case_table_names设置不一致。 | 请登录源库和目标库检查各自lower_case_table_names的值,并选择目标库,在配置文件的[mysqld]标签下明确添加lower_case_table_names的值和对方一致。 然后重启mysqld服务。
|
10、log_slave_updates参数检查
失败原因 | 处理建议 |
---|
源库为集群的从节点,且log_slave_updates参数不为ON,期间源库重放集群主节点的事务将不会同步到目标库。 | |
11、gtid_mode参数检查
失败原因 | 处理建议 |
---|
源库和目标库的gtid_mode参数不为ON,将不支持同步过程中源库的主备切换。 | |
12、目标库日志包大小检查
失败原因 | 处理建议 |
---|
目标库max_allowed_packet的值设置小于500M。 | set global max_allowed_packet=500M;
然后重新进行预检查。
|
13、待迁移表主键检查
失败原因 | 处理建议 |
---|
待迁移对象中存在无主键的表。 待迁移对象中的表在列名映射中,主键未被勾选。
| |
数据库用户权限检查
1、源库用户权限检查
失败原因 | 处理建议 |
---|
源库迁移账号没有对MySQL库的查询权限。 源库迁移账号没有对某些待迁移库的查询权限。 源库迁移账号缺少部分全局权限。
| 源库为MySQL5.7时,执行以下命令为源库迁移账号赋予正确权限:
GRANT SELECT ON mysql.* TO '迁移账号'@'%'; GRANT SELECT, EVENT,TRIGGER ON 待迁移的库.* TO '迁移账号'@'%'; GRANT REPLICATION CLIENT, REPLICATION SLAVE, SHOW VIEW, PROCESS ON *.* TO '迁移账号'@'%';
源库为MySQL8.0时,执行以下命令为源库迁移账号赋予正确权限: GRANT SELECT ON mysql.* TO '迁移账号'@'%'; GRANT SELECT, EXECUTE, EVENT, TRIGGER ON 待迁移的库.* TO '迁移账号'@'%'; GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT, SHOW VIEW, SHOW_ROUTINE ON *.* TO '迁移账号'@'%';
|
2、目标库用户权限检查
失败原因 | 处理建议 |
---|
目标库迁移账号缺少部分全局权限。 | 登录MySQL目标数据库,执行以下命令赋予迁移账号以下全局权限: GRANT SELECT ON mysql.* TO '迁移账号'@'%'; GRANT SHOW DATABASES,PROCESS,CREATE USER ON *.* TO '迁移账号'@'%'; GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES,CREATE VIEW, DELETE ,DROP, EVENT, EXECUTE, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE ON `待迁移库`.* TO '迁移账号'@'%';
|
数据库版本检查
1、MySQL版本检查
网络情况检查
1、源库连通性检查
失败原因 | 处理建议 |
---|
源数据库账号或密码不正确。
| 输入正确的数据库账号和密码后重新执行预检查。 |
源数据库所在网络或服务器设置了防火墙。 | 查看数据库所在的网络防火墙是否限制了DTS的IP地址段,如果有,关闭防火墙或者将DTS的IP地址加入防火墙白名单中。 |
源库迁移账号登录权限不足。 | 登录源库,为迁移账号添加相应的远程访问权限。 |
网络互通问题。 | 联系数据库所在机器管理人员和DTS部署机器管理人员排查问题。 |
2、目标库连通性检查
失败原因 | 处理建议 |
---|
目标数据库账号或密码不正确。
| 输入正确的数据库账号和密码后重新执行预检查。 |
目标数据库所在网络或服务器设置了防火墙。 | 查看数据库所在的网络防火墙是否限制了DTS的IP地址段,如果有,关闭防火墙或者将DTS的IP地址加入防火墙白名单中。 |
目标库迁移账号登录权限不足。 | 登录目标库,为迁移账号添加相应的远程访问权限。 |
网络互通问题。 | 联系数据库所在机器管理人员和DTS部署机器管理人员排查问题。 |
数据库对象检查
1、同名对象存在性检查
失败原因 | 处理建议 |
---|
目标库存在和待迁移对象同名的表、视图、函数或者存储过程。 | |
2、schema默认字符集检查
3、存储引擎检查
失败原因 | 处理建议 |
---|
部分待迁移表的存储引擎不是InnoDB或MyISAM。
| 将不支持的表更换到支持的存储引擎: alter table <表名> engine=InnoDB; 根据失败详情,从待迁移对象中移出那些存储引擎不支持的表。
|
鼠标选中文档,精准反馈问题
选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理
知道了