当 UNIX 套接字文件的 varrunmysqld 不存在时,重置 root 密码

如果我忘记了密码,那么我会收到错误。

$ mysql -u root -p    

输入密码:

ERROR 1045(28000):用户’root’@’localhost’拒绝访问(使用密码:YES)

我试图通过首先了解状态来解决问题:

$ systemctl status mysql.service

mysql.service - MySQL 社区服务器已加载:已加载(/lib/systemd/system/mysql.service;已启用;供应商预设:已激活:已激活(正在运行)自星期四 2017-06-08 14:31:33 IST; 38s ago

然后我使用代码 mysqld_safe --skip-grant-tables & 但我收到错误:

mysqld_safe UNIX 套接字文件的目录’/ var / run / mysqld’不存在。

$ systemctl stop  mysql.service
$ ps -eaf|grep mysql
$ mysqld_safe --skip-grant-tables &

我解决了:

$ mkdir -p /var/run/mysqld
$ chown mysql:mysql /var/run/mysqld

现在我使用相同的代码 mysqld_safe --skip-grant-tables & 并获取

mysqld_safe 使用/ var / lib / mysql 中的数据库启动 mysqld 守护程序

如果我使用 $ mysql -u root,我会得到:

服务器版本:5.7.18-0ubuntu0.16.04.1(Ubuntu)

版权所有(c)2000,2017,Oracle 和/或其附属公司。版权所有。

Oracle 是 Oracle Corporation 和/或其附属公司的注册商标。其他名称可能是其各自所有者的商标。

输入’help;’ 或’\ h’寻求帮助。输入’\ c’清除当前输入语句。

MySQL 的>

现在是时候更改密码了:

mysql> use mysql
mysql> describe user;

读取表信息以完成表名和列名你可以关闭此功能以使用 -A 更快地启动

数据库已更改

mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('newpwd');

或者如果你有一个可以从任何地方连接的 mysql root 帐户,你还应该这样做:

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

替代方法:

   USE mysql
   UPDATE user SET Password = PASSWORD('newpwd')
   WHERE Host = 'localhost' AND User = 'root';

如果你有一个可以从任何地方访问的 root 帐户:

 USE mysql
 UPDATE user SET Password = PASSWORD('newpwd')
 WHERE Host = '%' AND User = 'root';`enter code here

现在需要从 mysql quit 并停止/启动

FLUSH PRIVILEGES;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

现在再次`mysql -u root -p’并使用新密码来获取

MySQL 的>