连通性测试不通过

最近更新时间:2024-04-30 14:45:11

我的收藏

问题现象

用户在创建迁移、同步或订阅任务时,源数据库或者目标数据库连通性测试失败。




可能原因

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 限制规则。
部分腾讯云数据库实例(如 MySQL),支持限制账号的访问 IP,设置后,用户只能通过允许的主机地址访问数据库,MySQL 的功能详情可参见修改授权访问的主机地址
如果有设置,则需要放通 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.conf
local replication all trust
host replication all 127.x.x.1/32 trust
host replication all ::1/128 trust
host all all 0.0.0.0/0 md5
host 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

网络冲突问题

选择 VPN/专线 接入、云联网 接入方式的可以参考相应链接指导进行检查。

账号授权问题

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访问数据库。

2. 请参考 数据迁移数据同步 中的对应场景,重新对账号授权。

数据库账号或密码不正确

登录源数据库,验证账号和密码是否正确。

对接入类型进行了修改

对于同一个源库和目标库,选择了一种接入类型(如“公网”)进行连通性校验通过后,不能再切换为其他的接入类型(如“公网”切换为“专线接入”),否则 DTS 后端网络代理识别异常,导致连通性校验报错。