2020年6月27日 星期六

又忘記 root 密碼之 mysql 8 版

忘記 mysql 的 root 密碼是日常; 可是 去年找到的方法 今年又不適用了, 煩吶! 今天處理的是 ubuntu 20.04 上面的 mysql 8.0.20。

寫完才發現 8.0 的官方「重設密碼」教學文件。 算了, 這篇 「google 爬文自學版」 還是留著以防萬一。

首先停用系統正在運行中的 mysql 服務, 改以手動方式執行無密碼的 mysql 服務:

systemctl stop mysql
mysqld_safe --skip-grant-tables &

如果 mysql 抱怨找不到 /var/run/mysqld , 那麼 就手動建立、 再次手動啟動:

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
mysqld_safe --skip-grant-tables &

然後就可以免密碼登入: mysql -u root

在 mysql 客戶端的命令列上, 如果下這一句: update user set authentication_string=PASSWORD("你猜不到") where User='root'; 會造成這個錯誤: "... error in your SQL syntax ...", 因為 在 MySQL Server 8 以後, PASSWORD() 函數就不能用了。 至於 set password for root@localhost = '你猜不到'; 則會造成這個錯誤: ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 最後終於找到 這個問答

flush privileges;
update mysql.user set authentication_string=null where User='root';

這會取消 root 的密碼。

現在可以退出 mysql、 回 shel 底下把臨時的 mysql 服務砍掉、 用 systemctl 重新啟動 mysql server、 再以 root 登入。 現在就不會被問密碼了:

kill %1
systemctl start mysql
mysql -u root

終於就可以用 set password for root@localhost = '你猜不到'; 改密碼了; 或許在 shell 底下執行 mysql_secure_installation 強化 mysql 保護 (包含設定 root 密碼) 會更好。

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。