在 CentOS 上连不上 MySQL,原因有很多种,最常见的可以按下面几类来排查。你可以对照看看属于哪一种。
现象:ERROR 2002 (HY000): Can't connect to local MySQL server through socket
检查服务状态:
systemctl status mysqld
# 或
systemctl status mariadb
如果没启动:
systemctl start mysqld
systemctl enable mysqld
mysql -u root 连不上可能是:
查看 socket 位置:
grep socket /etc/my.cnf
一般:
socket=/var/lib/mysql/mysql.sock
如果文件不存在,说明服务没正常启动。
现象:ERROR 2003 (HY000): Can't connect to MySQL server on 'IP' (113)
默认 MySQL 只监听 127.0.0.1
检查:
netstat -lntp | grep 3306
如果是:
127.0.0.1:3306
说明不允许远程
修改 /etc/my.cnf:
bind-address=0.0.0.0
然后重启:
systemctl restart mysqld
即使端口通了,也可能被拒绝:
SELECT host FROM mysql.user WHERE user='root';
如果只有 localhost,需要授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;
CentOS 7+:
firewall-cmd --list-ports
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
或临时关闭测试:
systemctl stop firewalld
临时关闭测试:
setenforce 0
如果这样能连,说明是 SELinux 问题。
现象:ERROR 1045 (28000): Access denied
确认:
grep port /etc/my.cnf
客户端连接时指定:
mysql -h IP -P 端口 -u 用户 -p
如果你愿意,可以把具体报错信息贴出来(比如 ERROR 2003、2002、1045),我可以直接帮你定位是哪一步的问题。