1. 程式人生 > 其它 >MYSQL忘記密碼-重置密碼

MYSQL忘記密碼-重置密碼

問題 -忘記密碼:

登入Mysql,密碼錯誤的時候出現錯誤ERROR 1045 (28000)

mysql -u root -p 

  Enter Password > 'password'

  錯誤:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

密碼忘記了,這樣來重置。

解決方法 - 重置密碼:

  1. 修改my.cnf配置檔案(預設位置:/etc/my.cnf):
  • 在[mysqld]下新增skip-grant-tables
  1. 重啟mysql服務
  • systemctl restart mysql
  1. 登入mysql
 mysql -u root -p
 不用輸入密碼,直接回車即可登入成功
  1. 修改root的密碼

MySQL 5.7 的版本,user表中沒有password欄位,通過下面的方法來重置root密碼

use mysql
update user set authentication_string = password(“root”) where user = “root”;

Mysql 5.7.9以後廢棄了password欄位和password()函式,authentication_string欄位表示使用者密碼,只能是mysql加密後的41位字串密碼。通過下面方法來重置。

  • 先檢查root對應的host
mysql> select user,host from user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| root          | localhost |
| mysql.session | localhost |
| mysql.sys     | localhost |
| test          | %         |
+---------------+-----------+
5 rows in set (0.00 sec)
  • 修改root密碼:
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password  BY 'newpassword';

MySql8.0開始修改密碼又有了變化,user表中加了欄位authentication_string,修改密碼前要先檢查authentication_string是否為空

  • 如果authentication_string不為空
update user set authentication_string='' where user='root';--將欄位置為空
 
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password  BY 'rootpwd';--修改密碼為rootpwd
  • 如果authentication_string為空,直接修改
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password  BY 'rootpwd';--修改密碼為rootpwd

如果遇到一下錯誤

mysql> ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password  BY 'rootpwd';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'

則先執行

flush privileges;

然後再執行

ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password  BY 'rootpwd';

親測修改成功