为何能SSH访问服务器却无法连接MySQL数据库?
解决MySQL SQLSTATE[HY000] [1045] 访问被拒问题
按照以下步骤逐一排查:
检查root用户的TCP/IP访问权限
登录MySQL(用你能成功连接的方式,比如mysql -u root -p),执行以下命令查看root用户的权限条目:SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';确认是否存在
host为127.0.0.1的条目:- 如果没有,创建该用户并授权:
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '你的数据库密码'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES; - 如果已有该条目,对比
authentication_string值是否和root@localhost的一致,不一致的话重新设置密码:ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;
- 如果没有,创建该用户并授权:
验证TCP/IP连接是否正常
手动用TCP/IP方式连接MySQL,模拟服务器程序的连接方式:mysql -u root -p -h 127.0.0.1 -P 3360如果这个命令连接失败,说明MySQL的TCP/IP配置有问题;如果能成功连接,问题出在你的服务器程序配置上。
检查MySQL的网络监听配置
执行以下命令查看MySQL监听的端口和地址:netstat -tulpn | grep mysql确认输出中包含
127.0.0.1:3360或0.0.0.0:3360:- 如果没有,修改MySQL配置文件(通常是
/etc/my.cnf或/etc/mysql/my.cnf),添加或修改以下内容:
保存后重启MySQL服务:bind-address = 127.0.0.1 port = 3360 skip-networking = offsystemctl restart mysql(或service mysql restart)
- 如果没有,修改MySQL配置文件(通常是
核对服务器程序的数据库配置
确保程序配置文件中的以下参数完全正确:- 主机地址:
127.0.0.1(不要写localhost,避免默认用socket连接) - 端口:
3360(确认没有写成默认的3306) - 用户名:
root - 密码:和你手动连接时用的完全一致,注意特殊字符的转义(比如密码含
$、#时,要确保配置文件中没有被解析成变量或注释)
- 主机地址:
排查程序配置缓存问题
如果修改了配置文件,确保服务器程序已重启,避免使用旧的缓存配置。
内容的提问来源于stack exchange,提问作者Danail Mihov
相关产品推荐
相关产品推荐

