忘記 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 密碼) 會更好。
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。