在预检查阶段,系统会检查DTS服务器是否能够连通源端数据库。本文将介绍源库连接性检查失败的可能原因及修复方法。
当源库连接性预检查失败时,可能是以下几种原因。
数据库账号名或密码不正确
报错示例
Access denied for user 'XXX'@'XXX' (using password: YES)
检测方法
使用命令行或客户端连接源数据库,验证数据库账号名和密码是否正确。
常见错误:
填写了阿里云账号。请填写数据库账号。
填写的数据库账号不存在。
填写的密码错误。
修复方法
在数据传输控制台修改数据迁移任务,填入正确的数据库账号和密码后重新执行预检查。
若源端为Tair/Redis,请按正确格式填写账号密码:
默认账号(以实例ID命名):直接填写密码。
新建账号:密码格式为
<自定义账号>:<密码>
,例如:Redis自定义用户名为admin,密码为Rp829dlwa,则填入密码admin:Rp829dlwa。
源数据库对来源IP进行了限制
检测方法
使用命令行或客户端连接源数据库,如果连接正常,说明源数据库可能限制了DTS服务器IP地址。
如果源数据库为自建MySQL,可以使用客户端连接源数据库后执行下述命令进行检查。
SELECT HOST FROM mysql.user WHERE user='username',password='password';
说明将username和password替换为数据迁移任务中填写的数据库账号和数据库密码。
检查输出结果中的授权IP地址列表是否包含DTS服务器IP地址,详情请参见迁移、同步或订阅本地数据库时需添加的IP白名单。
如果源数据库为SQL Server,那么检查SQL Server所在服务器是否设置了防火墙,或者检查源数据库中是否有endpoint或trigger限制了访问来源IP。
如果源数据库为Oracle,那么检查源数据库的配置文件sqlnet.ora。如果配置项
TCP.VALIDNODE_CHECKING
为yes
,说明源数据库限制了访问来源IP。
修复方法
如果源数据库为自建MySQL,您可以在源数据库中执行以下命令为数据迁移使用的数据库账号重新授权。
GRANT ALL ON *.* TO 'username'@'%';
说明将username替换为数据迁移任务中填写的数据库账号。
如果源数据库为SQL Server,关闭防火墙或禁用trigger。
如果源数据库为Oracle,修改
TCP.VALIDNODE_CHECKING
为no
并重启进程。
执行了上述修复操作后,登录数据传输控制台,重新执行预检查。
源数据库服务器设置了防火墙
检测方法
如果安装源数据库的服务器为Windows,那么在控制面板中查找到Windows防火墙,查看是否配置了防火墙。
如果安装源数据库的服务器为Linux,那么使用
iptables -L
命令检查服务器是否配置了防火墙。
修复方法
关闭相关防火墙限制后,登录数据传输控制台,重新执行预检查。
网络互通问题
经过上述排查后仍然无法通过源库连接性检查,可能是DTS服务器与源数据库网络互通问题。