先确认3306端口是否监听:用sudo ss -tuln | grep :3306或sudo lsof -i :3306,若无输出则MySQL未启动,若有非mysqld进程则端口被占;再查服务状态systemctl status mysql/mysqld;最后检查防火墙及bind-address配置是否放行远程连接。

先看3306有没有在监听,再判断是MySQL没起来,还是被别的程序占了,或是防火墙拦了——三步就能定位问题根源。
确认3306端口是否真在监听
执行命令查看端口状态:
-
推荐用 ss(系统自带):
sudo ss -tuln | grep :3306 - 或用 lsof:
sudo lsof -i :3306
如果有输出且进程名不是 mysqld(比如显示 docker-proxy、java、phpstorm),说明端口被其他程序占用;如果完全没输出,大概率是 MySQL 服务根本没启动,不是端口冲突。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
检查 MySQL 服务是否运行
别跳过这步,很多“连不上”其实是服务压根没跑:
- 查状态:
systemctl status mysql(Debian/Ubuntu)或systemctl status mysqld(CentOS/RHEL) - 若显示 inactive (dead) 或 failed,直接启动:
sudo systemctl start mysql - 启动失败时,看日志:
sudo journalctl -u mysql --since "1 hour ago" -n 50
检查防火墙是否放行3306
本地能连但远程连不上?十有八九是防火墙挡着:
- 查防火墙状态:
sudo systemctl status firewalld(CentOS)或sudo ufw status(Ubuntu) - 临时开放(测试用):
sudo firewall-cmd --add-port=3306/tcp(CentOS)或sudo ufw allow 3306(Ubuntu) - 永久生效别忘加
--permanent并 reload,例如:sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reload
顺带检查 bind-address 配置
MySQL 默认可能只监听本地回环地址,导致远程无法连接:
- 打开配置文件:
sudo grep -E "bind-address|skip-networking" /etc/mysql/my.cnf /etc/mysql/mysql.conf.d/mysqld.cnf 2>/dev/null - 如果看到
bind-address = 127.0.0.1或skip-networking = 1,需注释或改为bind-address = 0.0.0.0(注意安全,生产环境建议限制 IP 段) - 改完必须重启 MySQL:
sudo systemctl restart mysql

















