记一次数据库链接失败问题,最后定位是 iptables 防火墙拦截了
先查看阿里云开放
阿里云后台,查看服务器入口白名单,3306(这个正常都开启的)
查看远程连接用户权限
mysql -h 121.40.234.122 -u root -p
##登录上去
##查询
use mysql;
select host, user from user;
#显示:
mysql> select host, user from user;
+-----------+----------+
| host | user |
+-----------+----------+
| % | hzbctest |
| % | jira |
| % | root |
| 127.0.0.1 | root |
| ::1 | root |
+-----------+----------+
5 rows in set (0.00 sec)
#%表示允许所有ip
配置文件限制绑定IP
#修改配置文件,
vi /etc/my.cnf
#在 [mysqld] 添加下面代码,:wq 保存
bind-address = 0.0.0.0
#登录 MySQL 后执行:
mysql -h 121.40.234.122 -u root -p
show variables like 'bind_address';
#显示
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| bind_address | 0.0.0.0 |
+---------------+-----------+
检查防火墙发现问题
iptables -L INPUT -n | grep 3306
#显示:
Chain INPUT (policy ACCEPT 1976M packets, 1382G bytes)
pkts bytes target prot opt in out source destination
16M 1850M ACCEPT tcp -- * * 121.40.234.122 0.0.0.0/0 tcp dpt:3306
68176 7141K ACCEPT tcp -- * * 47.98.33.47 0.0.0.0/0 tcp dpt:3306
35505 16M ACCEPT tcp -- * * 122.224.231.10 0.0.0.0/0 tcp dpt:3306
110K 6493K DROP tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
#122.224.231.10 老公司 ip没更新,查询
iptables -L INPUT --line-numbers | grep '122.224.231.10'
#结果:
3 ACCEPT tcp -- 122.224.231.10 anywhere tcp dpt:mysql
#删除 3
iptables -D INPUT 3 # 替换 3 为实际编号
# 插入新 IP 访问 3306 端口,插入到所有 DROP 规则之前
iptables -I INPUT -p tcp --dport 3306 -s 218.75.44.198 -j ACCEPT
#检查一下
iptables -L INPUT -n | grep 3306
ACCEPT tcp -- 218.75.44.198 0.0.0.0/0 tcp dpt:3306
ACCEPT tcp -- 121.40.234.122 0.0.0.0/0 tcp dpt:3306
ACCEPT tcp -- 47.98.33.47 0.0.0.0/0 tcp dpt:3306
DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306