當 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 的>