更改密码后无法登录MySQL

时间:2014-09-11 17:25:35

标签: mysql

我正在尝试设置用户密码,但在设置之后,我仍然无法以该用户身份登录。

$ mysql -uroot -p mydb
Enter password:

mysql> select user,host,password from mysql.user;
...
webapp | % | *.... |

mysql> show grants for webapp@'%';
GRANT USAGE ON *.* TO 'webapp'@'%' IDNETIFIED BY PASSWORD '*...'
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON 'mydb'.* TO 'webapp'@'%'

mysql> set password for webapp@'%'=PASSWORD('mypassword');
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

$ mysql -uwebapp -p mydb
Enter password:
ERROR 1045 (28000): Access denied for user 'webapp'@'localhost' (using password: YES)

我只是设置密码,它不起作用,发生了什么?

顺便说一下,用户的表只有一个名为'webapp'的条目,其主机是'%'

我正在使用mysql 5.1.67。我也试过重启mysqld,但它仍然不起作用。

1 个答案:

答案 0 :(得分:0)

在我们对评论进行的所有测试之后,您遇到的问题是您的服务器上有skip-networking,这使得它根本不会监听TCP / IP连接。

由于它没有收听TCP / IP连接,因此您的MySQL服务器正在使用套接字进行连接,因此当套接字使用localhost时,您需要有一个包含localhost的用户条目。

正如您所测试的那样,添加localhost授权使用可以解决问题,并且它还定义了这样一个事实:无论您是否拥有localhost这样的用户,它确实会产生影响。例如,特定的服务器配置。

在您的情况下,运行以完成localhost授权使用的命令是:

        GRANT SELECT, 
              INSERT, 
              UPDATE, 
              DELETE, 
              EXECUTE 
           ON 'your_database_name_here'.* 
           TO 'your_username_here'@'localhost' 
IDNETIFIED BY 'your_password_here';
FLUSH PRIVILEGES;

正如进一步参考:

  

skip-networking:根本不要监听TCP / IP连接。所有与mysqld的交互必须通过Unix套接字完成。对于仅允许本地请求的系统,强烈建议使用此选项。由于您需要允许远程连接,因此应从my.cnf中删除此行或将其置于注释状态。

http://dev.mysql.com/doc/refman/5.5/en/server-options.html#option_mysqld_skip-networking