我安装了mysql并为root设置了密码,但无法登录,为什么?

时间:2018-11-12 04:33:49

标签: mysql login

我搜索了许多类似的问题,并重设了密码。 我是如此好奇,想知道为什么会这样。 大多数问题与远程登录和匿名用户有关,我遇到的情况有所不同。

安装后,我执行了

$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

$ sudo service mysql start
 * Starting MySQL database server mysqld
No directory, logging in with HOME=/

$ sudo mysql_secure_installation
Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: n
Please set the password for root here.

New password:

Re-enter new password:
...


Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

然后,我尝试登录并获得

~$ mysql -u root -p
Enter password:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我确定我使用了正确的密码。

这是用户表:

+------------------+-----------+-----------------------+
| User             | host      | plugin                |
+------------------+-----------+-----------------------+
| root             | localhost | auth_socket           |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| debian-sys-maint | localhost | mysql_native_password |
+------------------+-----------+-----------------------+

有人可以解释吗?

1 个答案:

答案 0 :(得分:0)

只需按照以下步骤重置密码即可。

来源-MYSQL Reference Manual

1。)以运行MySQL服务器的Unix用户(例如mysql)登录到系统。

  1. 如果MySQL服务器正在运行,请停止它。找到包含服务器的进程ID的.pid文件。该文件的确切位置和名称取决于您的分发,主机名和配置。常见位置是/ var / lib / mysql /,/ var / run / mysqld /和/ usr / local / mysql / data /。通常,文件名的扩展名为.pid,以mysqld或系统的主机名开头。

通过向mysqld进程发送正常的kill(不是kill -9)来停止MySQL服务器。在以下命令中使用.pid文件的实际路径名:

  

shell>杀死cat /mysql-data-directory/host_name.pid 1

在cat命令中使用反引号(而不是正引号)。这些导致cat的输出被替换为kill命令。

  1. 在一行上创建一个包含以下语句的文本文件。用您要使用的密码替换密码。
  

为'root'@'localhost'设置密码= PASSWORD('MyNewPass'); 1

  1. 保存文件。本示例假定您将文件命名为/ home / me / mysql-init。该文件包含密码,因此请勿将其保存在其他用户可以读取的位置。如果您未以mysql(服务器运行的用户)身份登录,请确保该文件具有允许mysql读取该文件的权限。

  2. 使用特殊的--init-file选项启动MySQL服务器:

  

shell> mysqld --init-file = / home / me / mysql-init&1

服务器在启动时执行由--init-file选项命名的文件的内容,更改'root'@'localhost'帐户密码。

根据正常启动服务器的方式,可能还需要其他选项。例如,在--init-file之前可能需要--defaults-file。

  1. 服务器成功启动后,删除/ home / me / mysql-init。

您现在应该可以使用新密码以root用户身份连接到MySQL服务器。停止服务器并正常重启。