在 CentOS 上 MySQL / MariaDB 无法登录 的原因很多,下面按常见原因 → 排查方法 → 解决办法给你一个系统性的排查清单。
请先确认你用的是:
mysql -u root -p
还是
mysql -u root
现象
ERROR 2002 (HY000): Can't connect to local MySQL server
检查
systemctl status mysqld
# 或
systemctl status mariadb
解决
systemctl start mysqld
systemctl enable mysqld
现象
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
默认可能 无密码登录(socket 认证):
mysql -u root
systemctl stop mariadb
mysqld_safe --skip-grant-tables &
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
systemctl restart mariadb
现象
mysql -u root -p
# 报错
Access denied
但这样能进:
sudo mysql -u root
原因
root 用户使用 unix_socket 插件
解决(改为密码登录)
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password;
SET PASSWORD = PASSWORD('你的密码');
现象
ERROR 2003 (HY000): Can't connect to MySQL server on 'IP'
检查
firewall-cmd --list-all
解决
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
并确认:
SELECT host FROM mysql.user WHERE user='root';
如果不是 %,需授权:
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;
临时测试
setenforce 0
如果可以登录,说明是 SELinux 问题:
setsebool -P mysql_connect_any 1
检查:
/etc/my.cnf
/etc/my.cnf.d/*
常见问题:
skip-grant-tables # 忘了注释
bind-address=127.0.0.1
你可以把下面命令的输出发给我,我可以直接帮你判断:
cat /etc/os-release
mysql --version
systemctl status mariadb
mysql -u root -p
CentOS 上 MySQL 登录不了,90% 是服务没起、密码/socket 认证问题、或 SELinux/防火墙。
如果你愿意,可以直接把 报错完整信息 发出来,我可以精确告诉你怎么改。