我已将 openSUSE 升级到最新的 13.1。在升级过程中,mysql 从 5.5 升级到了 5.6。在删除 /etc/my.cnf 后,我成功升级了服务器 (mysql_upgrade)
升级后,我的基于 PHP 的 Web 应用程序无法连接到服务器,并出现以下错误:拒绝用户 ''@'localhost' 访问(使用密码:是)
我的 PHP 文件中的相关条目(过去 2 年一直相同!)是:
(mysqli_real_connect($GLOBALS["___mysqli_ston"], "localhost", "<USERNAME>", "<password>", NULL, 3306, NULL, 196608))) ? $GLOBALS["___mysqli_ston"] : FALSE);
我发现的是:
- PHP/mysql连接器登录服务器
- PHP/mysqli 连接器无法连接到服务器
- mysql -u USERNAME -p 连接服务器
- mysql -u 用户名@localhost失败连接到服务器。
- mysql 监听标准 3306 端口。
netstat 确认了这一点:
netstat -anpt | grep -i mysql
tcp 0 0 :::3306 :::* LISTEN 8549/mysqld
升级后权限没有变化! DBuser
表中的相关条目mysql
为:
SELECT `Host` , `User` , `max_user_connections` , `password_expired`
-> FROM `user`
-> WHERE `User`='<username>'
+-----------+--------------+----------------------+------------------+
| Host | User | max_user_connections | password_expired |
+-----------+--------------+----------------------+------------------+
| localhost | <username> | 0 | N |
+-----------+--------------+----------------------+------------------+
显然,@localhost 是问题所在,但是为什么呢?
答案1
看起来您正尝试使用 username@localhost 作为用户名。这看起来不正确,默认情况下,mysql 客户端将尝试连接到 localhost,除非使用 -h 指定。
所以应该是 -u USER 而不是 -u USER@LOCALHOST