最後更新日期:2024 年 12 月 26 日

環境

Ubuntu 24.04

MySQL 8.0.40

操作方法

將 MySQL 重新啟動為無需密碼的維護狀態

首先,我們得修改 MySQL 系統設定檔

檔案位置在 /etc/mysql/my.cnf,在 [mysqld] 的段落中,加入以下資料

<span class="line"><span style="color: #ECEFF4">[</span><span style="color: #D8DEE9FF">mysqld</span><span style="color: #ECEFF4">]</span></span>
<span class="line"><span style="color: #88C0D0">skip-grant-tables</span></span>

然後,重新啟動 mysql

<span class="line"><span style="color: #88C0D0">sudo</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">systemctl</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">restart</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">mysql</span></span>

將管理員 root 帳號設為無需密碼

此時,MySQL 伺服器會以怱略權限認證的方式啟動,我們可以使用 mysql 指令,以不認證的方式,直接本機登入 MySQL 伺服器。

<span class="line"><span style="color: #88C0D0">mysql</span></span>

然後在 MySQL 客戶端,輸入以下指令

<span class="line"><span style="color: #88C0D0">use</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">mysql</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #88C0D0">update</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">user</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">set</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">authentication_string</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">''</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">where</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">user</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">root</span><span style="color: #ECEFF4">'</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #88C0D0">FLUSH</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">PRIVILEGES</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #88C0D0">EXIT</span></span>

此時,管理員帳號 root 會被我們重新設定為無需密碼。

將 MySQL 伺服器,切換為一般模式啟動

修改 /etc/mysql/my.cnf,將原來 的 skip-grant-tables 加上註解

<span class="line"><span style="color: #ECEFF4">[</span><span style="color: #D8DEE9FF">mysqld</span><span style="color: #ECEFF4">]</span></span>
<span class="line"><span style="color: #616E88"># skip-grant-tables</span></span>

然後重新啟重 MySQL 伺服器

<span class="line"><span style="color: #88C0D0">sudo</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">systemctl</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">restart</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">mysql</span></span>

修改 root 密碼

正常啟動 MySQL 後,在 MySQL 客戶端,以 root 進行無密碼登入

<span class="line"><span style="color: #88C0D0">mysql</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">-u</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">root</span><span style="color: #D8DEE9FF"> </span></span>

登入後,使用以下指令,設定正式的 root 密碼了

<span class="line"><span style="color: #88C0D0">use</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">mysql</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">ALTER</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">USER</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">root@localhost</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">IDENTIFIED</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">WITH</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">caching_sha2_password</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">BY</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">你的密碼</span><span style="color: #ECEFF4">'</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88C0D0">FLUSH</span><span style="color: #D8DEE9FF"> </span><span style="color: #A3BE8C">PRIVILEGES</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #88C0D0">EXIT</span></span>

參考資料

How can I reset my MySQL root password in MySQL 8.0.36 on Red Hat 8 if ‘mysqld_safe’ is gone?

<MySQL> caching_sha2_password issue

MySQL 不能用 mysql_native_password 了

Last modified: 2024-12-26

Author

Comments

Write a Reply or Comment

Your email address will not be published.