本文為其它文章的一部份

0x00 前言:

在打算重置mysql密碼的時候發現好多教學都有坑或是太舊了,在踩完坑之後決定記録一下自己驗證過的步驟。

0x01 環境:

  1. Ubuntu 22.04 LTS
  2. MySQL 8

(我的環境,可能 mysql > 5.75都能用)

0x02 步驟:

1. 在 /etc/mysql/my.cnf 加入以下內容

[mysqld]
skip-grant-tables

2. 重啟mysql

systemctl restart mysql

3. 無密碼登入mysql

mysql -u root

4. 執行以下查詢,觀察密碼字段的標題是 password 還是 authentication_string

select * from mysql.user where user = 'root';

5. 更改密碼, $1為上一步得到的字段標題(password / authentication_string), $2為新的密碼

*這步有坑,有些教學會使用PASSWORD()函數來生成密碼,但該函數已在mysql 5.7.5 後被移除。

UPDATE mysql.user set $1 = CONCAT('*', UPPER(SHA1(UNHEX(SHA1('$2'))))) where user = 'root' and host = 'localhost';

6. 刷新權限, 退出

FLUSH PRIVILEGES;
exit;

7. (重要)把在步驟一在 /etc/mysql/my.cnf 新增的兩行刪除

8. 重啟mysql

systemctl restart mysql

9. 完成,可以用新密碼登入了

0x03 參考資料:

  1. https://stackoverflow.com/questions/16556497/mysql-how-to-reset-or-change-the-mysql-root-password
  2. https://stackoverflow.com/questions/52320576/in-mysql-server-8-0-the-password-function-not-working


祝願你能找到僅屬於你的,幸福的未來