问题现象
用户在创建迁移、同步或订阅任务时,源数据库或者目标数据库连通性测试失败。
可能原因
Telnet 测试不通过,可能原因如下。
Telnet 测试通过,Database Connect 失败,可能原因如下。
账号授权问题。
账号密码不正确。
排查思路
类别 | 接入方式 | 网络放通排查思路 | 处理说明 |
Telnet 不通过 | 公网/VPN/专线/云联网 | 检查网络层级,是否设置了网络 ACL 和安全组规则 检查部署服务器层级,是否设置了防火墙(如 iptables) 检查数据库层级,是否设置了访问 IP 规则(如仅授权内的主机地址可以访问数据库) | 在相应规则中,放通 DTS 服务 IP。 |
| 云主机自建 私有网络 VPC(CVM自建数据库) | 检查部署服务器层级,是否设置了防火墙(如 iptables) 检查数据库层级,是否设置了访问 IP 规则(如主机IP访问限制) | 在相应规则中,放通 DTS 服务 IP。 |
| 云数据库 私有网络 VPC(云数据库) | 检查数据库层级,是否设置了访问 IP 规则(如主机IP访问限制) | 在相应规则中,放通 DTS 服务 IP。 |
Telnet 通过,Database Connect 失败 | all | 检查数据库内账号层级,是否对 DTS 任务账号进行了限制(授权方式问题)。 账号密码不正确。 | 账号重新授权 重新输入账号密码 |
数据库所属网络是否设置了 ACL 策略和安全组规则
源/目标库为其他云厂商数据库时,需要进行本操作检查。如果设置了,则需要放通 DTS 服务 IP(连通性报错时弹窗中提示的 IP)。
网络 ACL 和安全组是云厂商提供控制网络访问的方式,网络 ACL 为访问控制列表,安全组是一种虚拟防火墙。
如下为腾讯云控制台上设置 ACL 和安全组的操作,其他云厂商控制台上的操作类似。
1. 在数据库所属网络的 ACL 规则 中,查看规则中是否限制了 DTS 访问。如果是则增加 DTS 服务 IP 到 ACL 规则中。
2. 在数据库关联的 安全组规则 中,查看是否限制了 DTS 访问。如果是则增加 DTS 服务 IP 到安全组规则中。
在实例管理页面,选择安全组页。
入站规则和出站规则中,都需要添加 DTS 服务 IP 地址。
部署服务器上是否设置了防火墙(如 iptables)
自建数据库场景,需要检查部署所在的服务器上是否设置了防火墙。
Linux 系统通常采用 iptables 设置防火墙,操作示例如下,如有其他防火墙设置,操作原则类似。
1. 检查服务器是否配置了防火墙策略。
iptables -L
2. 放通 DTS 服务 IP。
iptables -I INPUT -s 1xx.1xx.1xx.1xx -j ACCEPT
数据库内是否设置了访问 IP 规则
通用检测方法
在数据库部署的服务器上,使用 DTS 任务中填入的数据库账号和数据库密码连接数据库。如果连接正常,说明数据库可能限制了 DTS IP 地址的访问。
MySQL 处理方法
1. 检查云数据库实例上是否设置了访问 IP 限制规则。
如果有设置,则需要放通 DTS 访问 IP。
2. 如果是自建数据库,还需要在数据库上确认 bind-address 的配置,如果不是0.0.0.0,则 IP 受限,请参考如下指导修改。
2.1 在
/etc/my.cnf
文件中增加如下内容。说明:
my.cnf
配置文件的默认路径为 /etc/my.cnf
,现场以实际情况为准。bind-address=0.0.0.0 #全部地址或者指定的 IP 地址
2.2 重启数据库。
service mysqld restart
2.3 验证配置是否生效。
netstat -tln
SQL Server 处理方法
1. 检查源数据库中是否有 Endpoint 或 Trigger 限制了访问来源 IP 地址。
2. 如果有限制,可以关闭防火墙或禁用 trigger。
PostgreSQL 处理方法
1. 如果源端数据库为自建的 PostgreSQL 数据库,请进入 $PGDATA 目录下的 data 目录,找到
pg_hba.conf
文件。查看此文件中是否存在 deny 策略,或者仅允许部分网络端的 IP 地址访问。如果有,继续后续步骤2。# cat pg_hba.conflocal replication all trusthost replication all 127.x.x.1/32 trusthost replication all ::1/128 trusthost all all 0.0.0.0/0 md5host all all 172.x.x.0/20 md5
2. 请在
pg_hba.conf
文件中加入允许 DTS 网络段的访问策略。或者在迁移过程中临时放开所有网段的访问策略。如在此文件中添加一行:host all all 0.0.0.0/0 md5
3. 修改完成后,可重启数据库实例,让配置生效。
pg_ctl -D $PGDATA restart
MongoDB/Redis 处理方法
1. 如果是自建数据库,需要在数据库上确认 bind 的配置,如果不是0.0.0.0,则 IP 受限。
2. 参考 MySQL 中的方法配置 bind-address 为
0.0.0.0
。网络端口是否未放通
常见数据库默认端口如下,需要确认这些端口已放通。如果用户修改了默认端口,请按实际情况修改放通的端口。
如果源数据库为 SQL Server,还需要同时放通文件共享服务端口445。
MySQL:3306
SQL Server:1433
PostgreSQL:5432
MongoDB:27017
Redis:6379
网络冲突问题
网络冲突问题
账号授权问题
1. 对 DTS 任务账号进行授权时,如果仅对账号的指定 IP 进行了授权,则可能会限制 DTS 的访问。
举例如下:
在数据库中授权 DTS 任务账号,其中,@后面的“%”,表示该账号可通过所有 IP 访问数据库,如果不为“%”,则该账号仅可通过指定 IP 访问,其他 IP 访问会受限。
grant all privileges on . to '账号'@'%'; //授权账号可通过所有IP访问数据库。grant all privileges on . to '账号'@'1xx.1xx.1x.1x'; //授权账号仅可通过1xx.1xx.1x.1x访问数据库。
数据库账号或密码不正确
登录源数据库,验证账号和密码是否正确。
对接入类型进行了修改
对接入类型进行了修改
对于同一个源库和目标库,选择了一种接入类型(如“公网”)进行连通性校验通过后,不能再切换为其他的接入类型(如“公网”切换为“专线接入”),否则 DTS 后端网络代理识别异常,导致连通性校验报错。