问题原因
ECS通过内网连接不上RDS For MySQL
回答
ECS和RDS内网连接条件
- 相同地域
- 相同网络类型,如果是VPC,需要在相同的VPC下
- ECS内网IP在RDS白名单中。注意,如果RDS开启了高安全白名单模式,RDS是VPC环境,需要将ECS内网IP加到RDS白名单专有网络分组,否则加到经典网络分组
1、数据库连接信息
从RDS控制台获取数据库外网连接地址、端口、账号,与配置的连接地址、端口、账号是否一致。另外,需要核实密码是否正确。
客户端/代码连接:可能需要核实地址和端口之间的间隔符号是否为半角冒号
命令行连接:参数(大P端口,小p密码)和格式(小p和密码之间不能有空格、命令行最后不能有分号)是否正确
mysql -h地址 -P端口 -u账号 -p密码
2、RDS白名单
ECS内网IP是否在RDS白名单中,如果RDS开通了高安全白名单模式,那么专有网络RDS需要将ECS内网IP设置到白名单“专有网络”类型下,否则设置到“经典网络”类型下。如截图,
3、常见错误信息
数据库连接常见错误:
报错信息 |
原因 |
|
网络不通,一般是链接条件不满足 |
|
白名单设置错误 |
|
用户名或密码错误 |
|
DNS解析问题,将DNS修改为阿里云DNS服务器地址 223.5.5.5和223.6.6.6 |
4、ping和telnet
- ping不通,大概率是被处罚了
- telnet不通,ECS没有安装telnet、ECS防火墙\安全组有拦截、RDS端口填写错误,RDS端口不通
5、以上都没问题
- 是否RDS的问题:DMS登录,成功的话,可以确认RDS是没有问题的。
- 是否链路的问题:更换客户端登录,成功的话,可以确认非链路问题,应该是客户端\代码的问题。
- 客户端\代码问题:重新安装客户端\更换客户端\检查代码配置和驱动版本等。
6、抓包
抓包进行分析
抓包步骤:
Windows(需要安装wireshark):
- 在Wireshark 界面中,选择 Capture -》 Interface ,选择对应连接云数据库的内网网卡后 > Option > 在 File 输入框中输入要保存的文件 1.cap,然后点击 start 开始抓包。
- 连接RDS,复现问题。
- 问题复现后,停止抓包。
- 分析报文。
Linux:
- 打开一个到ECS的ssh连接,并以root身份登录。
在该窗口运行下列命令
tcpdump -i any -s 0 host 实例的链接地址域名 -C 200 -W 10 -w /tmp/error_get.pcap
#200M一个包, 一共10个包 循环,遇到异常stop
- 连接RDS, 复现问题。
- 使用 ctrl + c 终止窗口1 的 tcpdump 命令。
- 分析报文。