文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


B.3.3.2 如何重設 root 密碼

如果您從未為 MySQL 指派 root 密碼,則伺服器根本不要求以 root 身分連線時輸入密碼。然而,這是不安全的。如需指派密碼的說明,請參閱第 2.9.4 節,「保護初始 MySQL 帳戶」

如果您知道 root 密碼並想要變更它,請參閱第 15.7.1.1 節,「ALTER USER 陳述式」第 15.7.1.10 節,「SET PASSWORD 陳述式」

如果您先前指派了 root 密碼,但忘記了,您可以指派新的密碼。以下章節提供 Windows 和 Unix 以及類 Unix 系統的說明,以及適用於任何系統的一般說明。

B.3.3.2.1 重設 root 密碼:Windows 系統

在 Windows 上,使用以下程序重設 MySQL 'root'@'localhost' 帳戶的密碼。若要變更具有不同主機名稱部分的 root 帳戶的密碼,請修改說明以使用該主機名稱。

  1. 以系統管理員身分登入您的系統。

  2. 如果 MySQL 伺服器正在執行,請停止它。對於以 Windows 服務形式執行的伺服器,請前往服務管理員:從「開始」功能表中,選取「控制台」,然後選取「系統管理工具」,然後選取「服務」。在清單中找到 MySQL 服務並停止它。

    如果您的伺服器未以服務形式執行,您可能需要使用工作管理員強制停止它。

  3. 建立一個文字檔,其中包含單行上的密碼指派陳述式。將密碼取代為您想要使用的密碼。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  4. 儲存該檔案。此範例假設您將檔案命名為 C:\mysql-init.txt

  5. 開啟主控台視窗以進入命令提示字元:從「開始」功能表中,選取「執行」,然後輸入 cmd 作為要執行的命令。

  6. 啟動 MySQL 伺服器,並將 init_file 系統變數設定為命名該檔案(請注意,選項值中的反斜線會加倍)

    C:\> cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
    C:\> mysqld --init-file=C:\\mysql-init.txt

    如果您將 MySQL 安裝到不同的位置,請相應地調整 cd 命令。

    伺服器會在啟動時執行 init_file 系統變數所命名檔案的內容,變更 'root'@'localhost' 帳戶密碼。

    若要讓伺服器輸出顯示在主控台視窗中,而不是在記錄檔中,請將 --console 選項新增至 mysqld 命令。

    如果您使用 MySQL 安裝精靈安裝 MySQL,您可能需要指定 --defaults-file 選項。例如

    C:\> mysqld
             --defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.4\\my.ini"
             --init-file=C:\\mysql-init.txt

    可以使用「服務管理員」找到適當的 --defaults-file 設定:從「開始」功能表中,選取「控制台」,然後選取「系統管理工具」,然後選取「服務」。在清單中找到 MySQL 服務,按一下滑鼠右鍵,然後選擇「屬性」選項。「可執行檔的路徑」欄位包含 --defaults-file 設定。

  7. 伺服器成功啟動後,請刪除 C:\mysql-init.txt

您現在應該可以使用新密碼以 root 身分連線到 MySQL 伺服器。停止 MySQL 伺服器並正常重新啟動。如果您以服務形式執行伺服器,請從 Windows「服務」視窗啟動它。如果您手動啟動伺服器,請使用您通常使用的任何命令。

B.3.3.2.2 重設 root 密碼:Unix 和類 Unix 系統

在 Unix 上,使用以下程序重設 MySQL 'root'@'localhost' 帳戶的密碼。若要變更具有不同主機名稱部分的 root 帳戶的密碼,請修改說明以使用該主機名稱。

這些說明假設您從您通常用於執行 MySQL 伺服器的 Unix 登入帳戶啟動伺服器。例如,如果您使用 mysql 登入帳戶執行伺服器,則您應該以 mysql 身分登入,然後再使用這些說明。或者,您可以以 root 身分登入,但在這種情況下,您必須使用 --user=mysql 選項啟動 mysqld。如果您以 root 身分啟動伺服器,而不使用 --user=mysql,則伺服器可能會在資料目錄中建立 root 擁有的檔案 (例如記錄檔),而這些檔案可能會導致未來伺服器啟動時發生權限相關問題。如果發生這種情況,您必須將檔案的所有權變更為 mysql 或將它們移除。

  1. 以執行 MySQL 伺服器的 Unix 使用者身分登入您的系統 (例如,mysql)。

  2. 如果 MySQL 伺服器正在執行,請先停止它。找到包含伺服器程序 ID 的 .pid 檔案。此檔案的確切位置和名稱取決於您的發行版、主機名稱和設定。常見的位置包括 /var/lib/mysql//var/run/mysqld//usr/local/mysql/data/。一般而言,檔案名稱的副檔名為 .pid,且開頭為 mysqld 或您系統的主機名稱。

    透過向 mysqld 程序傳送正常的 kill(而不是 kill -9)來停止 MySQL 伺服器。在以下命令中使用 .pid 檔案的實際路徑名稱

    $> kill `cat /mysql-data-directory/host_name.pid`

    使用反引號(不是正引號)搭配 cat 命令。這些會將 cat 的輸出替換到 kill 命令中。

  3. 建立一個文字檔,其中包含單行上的密碼指派陳述式。將密碼取代為您想要使用的密碼。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  4. 儲存該檔案。此範例假設您將檔案命名為 /home/me/mysql-init。該檔案包含密碼,因此請勿將其儲存在其他使用者可以讀取的位置。如果您不是以 mysql(伺服器執行的使用者)身分登入,請確保該檔案具有允許 mysql 讀取的權限。

  5. 使用設定為指定檔案名稱的 init_file 系統變數來啟動 MySQL 伺服器

    $> mysqld --init-file=/home/me/mysql-init &

    伺服器會在啟動時執行 init_file 系統變數所命名檔案的內容,變更 'root'@'localhost' 帳戶密碼。

    根據您通常啟動伺服器的方式,可能也需要其他選項。例如,在 init_file 引數之前可能需要 --defaults-file

  6. 伺服器成功啟動後,請刪除 /home/me/mysql-init

現在您應該能夠以新的密碼使用 root 身分連線到 MySQL 伺服器。停止伺服器並正常重新啟動。

B.3.3.2.3 重設 Root 密碼:通用說明

前面的章節提供了專門針對 Windows 和 Unix 及類 Unix 系統的密碼重設說明。或者,在任何平台上,您都可以使用 mysql 客戶端重設密碼(但此方法安全性較低)

  1. 如果需要,請停止 MySQL 伺服器,然後使用 --skip-grant-tables 選項重新啟動它。這會使任何人都能夠在沒有密碼且具有所有權限的情況下連線,並停用帳戶管理語句,例如 ALTER USERSET PASSWORD。因為這是不安全的,所以如果伺服器是使用 --skip-grant-tables 選項啟動的,它也會透過啟用 skip_networking 來停用遠端連線。在 Windows 平台上,這表示您還必須啟用 shared_memorynamed_pipe;否則伺服器無法啟動。

  2. 使用 mysql 客戶端連線到 MySQL 伺服器;由於伺服器是使用 --skip-grant-tables 啟動的,因此不需要密碼

    $> mysql
  3. mysql 客戶端中,告知伺服器重新載入授權表,以便帳戶管理語句可以運作

    mysql> FLUSH PRIVILEGES;

    然後變更 'root'@'localhost' 帳戶的密碼。將密碼替換為您要使用的密碼。若要變更具有不同主機名稱部分的 root 帳戶的密碼,請修改指示以使用該主機名稱。

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

現在您應該能夠以新的密碼使用 root 身分連線到 MySQL 伺服器。停止伺服器並正常重新啟動(不使用 --skip-grant-tables 選項,且不啟用 skip_networking 系統變數)。