答案是权限、配置、防火墙 或安全组未正确设置导致 mysql 无法远程连接;需检查并修改 MySQL 用户远程访问权限,将 bind-address 设为 0.0.0.0,开放防火墙及 云服务 器安全组 3306端口,并重启服务使配置生效。

MySQL 在 linux 中无法远程连接,通常是因为权限、配置或 防火墙 设置问题。下面分几个关键点来排查和解决。
1. 检查 MySQL 用户是否允许远程访问
MySQL 默认只允许本地登录(localhost),需要创建或修改用户,使其可以从远程 IP 连接。
登录 MySQL:
mysql -u root -p
查看当前用户权限:
select host, user FROM mysql.user;
如果看到 root 用户的 host 是 localhost,就需要修改或新增一个允许远程连接的用户。
例如,允许 root 从任意 IP 连接(不推荐生产环境):
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘your_password‘ WITH GRANT OPTION;
或者更安全的方式,指定某个 IP:
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’192.168.1.100’ IDENTIFIED BY ‘your_password’ WITH GRANT OPTION;
刷新权限:
FLUSH PRIVILEGES;
2. 修改 MySQL配置文件 绑定地址
MySQL 默认可能只监听 127.0.0.1,导致外部无法访问。
/etc/mysql/mysql.conf.d/mysqld.cnf
或
/etc/my.cnf
找到 bind-address 这一行:
bind-address = 127.0.0.1
改为:
bind-address = 0.0.0.0
sudo systemctl restart mysql
或
sudo service mysql restart
3. 检查防火墙设置
确保系统防火墙放行了 MySQL 的默认 端口3306。
如果是使用 ufw:
sudo ufw allow 3306
如果是使用 firewalld:
sudo firewall-cmd –permanent –add-port=3306/tcpsudo firewall-cmd –reload
如果是 云服务 器(如 阿里云 、 腾讯 云),还需检查安全组规则,确保入方向开放了 3306 端口。
4. 确认 MySQL 服务正在运行并监听正确端口
运行以下命令查看 MySQL 是否在监听 3306 端口:
sudo netstat -tulnp | grep :3306
应看到类似输出:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1234/mysqld
如果没有输出,说明 MySQL 没启动或配置有问题。
基本上就这些。按顺序检查用户权限、配置文件、防火墙和服务状态,大多数远程连接问题都能解决。关键是别漏掉安全组或云服务商的网络策略。


