MySQL 5.7 忘記root密碼,使用--skip-grant-tables重置root密碼的通用方法

這裏主要介紹在不知MySQL的root密碼的情況下,使用--skip-grant-tables關閉MySQL服務器的認證,從而可以重置root的密碼。MySQL版本爲5.7。

1、關閉MySQL

sudo service mysqld stop

2、使用--skip-grant-tables 和 --skip-networking 重啓MySQL

sudo mysqld --skip-grant-tables  --skip-networking &

--skip-grant-tables:此選項會讓MySQL服務器跳過驗證步驟,允許所有用戶以匿名的方式,無需做密碼驗證直接登陸MySQL服務器,並且擁有所有的操作權限。

--skip-networking:此選項會關門MySQL服務器的遠程連接。這是因爲以--skip-grant-tables方式啓動MySQL服務器會有很大的安全隱患,爲了降低風險,需要禁止遠程客戶端的連接。

3、本地連接mysql

shell> mysql

--skip-grant-tables已經關閉MySQL服務器的認證,以匿名方式,無需密碼即可連接。

4、重置密碼

在重置密碼前,先要重載授權表:

mysql> FLUSH PRIVILEGES;

MySQL 5.7.6+:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

MySQL 5.7.6以及之後的版本,使用ALTER USER語法來修改密碼。

MySQL 5.7.5以及之前的版本

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

MySQL 5.7.5以及之前的版本使用SET PASSWORD語法修改密碼。

如果上面的方法修改密碼有錯,可以直接修改mysql.user表:

UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass')
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

注意:mysql5.7 user表裏已經去掉了password字段,改爲了authentication_string。

5、重啓服務器

service mysqld restart

因爲之前使用--skip-grant-tables啓動,所以需要重啓mysql服務器,去掉--skip-grant-tables。

參考:https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章