最後更新日期:2024 年 12 月 26 日
Table of Contents
環境
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?
Comments