如果您從未為 MySQL 指派 root
密碼,則伺服器根本不要求以 root
身分連線時輸入密碼。然而,這是不安全的。如需指派密碼的說明,請參閱第 2.9.4 節,「保護初始 MySQL 帳戶」。
如果您知道 root
密碼並想要變更它,請參閱第 15.7.1.1 節,「ALTER USER 陳述式」和第 15.7.1.10 節,「SET PASSWORD 陳述式」。
如果您先前指派了 root
密碼,但忘記了,您可以指派新的密碼。以下章節提供 Windows 和 Unix 以及類 Unix 系統的說明,以及適用於任何系統的一般說明。
在 Windows 上,使用以下程序重設 MySQL 'root'@'localhost'
帳戶的密碼。若要變更具有不同主機名稱部分的 root
帳戶的密碼,請修改說明以使用該主機名稱。
以系統管理員身分登入您的系統。
如果 MySQL 伺服器正在執行,請停止它。對於以 Windows 服務形式執行的伺服器,請前往服務管理員:從
功能表中,選取 ,然後選取 ,然後選取 。在清單中找到 MySQL 服務並停止它。如果您的伺服器未以服務形式執行,您可能需要使用工作管理員強制停止它。
建立一個文字檔,其中包含單行上的密碼指派陳述式。將密碼取代為您想要使用的密碼。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
儲存該檔案。此範例假設您將檔案命名為
C:\mysql-init.txt
。開啟主控台視窗以進入命令提示字元:從cmd 作為要執行的命令。
功能表中,選取 ,然後輸入啟動 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
設定。伺服器成功啟動後,請刪除
C:\mysql-init.txt
。
您現在應該可以使用新密碼以 root
身分連線到 MySQL 伺服器。停止 MySQL 伺服器並正常重新啟動。如果您以服務形式執行伺服器,請從 Windows「服務」視窗啟動它。如果您手動啟動伺服器,請使用您通常使用的任何命令。
在 Unix 上,使用以下程序重設 MySQL 'root'@'localhost'
帳戶的密碼。若要變更具有不同主機名稱部分的 root
帳戶的密碼,請修改說明以使用該主機名稱。
這些說明假設您從您通常用於執行 MySQL 伺服器的 Unix 登入帳戶啟動伺服器。例如,如果您使用 mysql
登入帳戶執行伺服器,則您應該以 mysql
身分登入,然後再使用這些說明。或者,您可以以 root
身分登入,但在這種情況下,您必須使用 --user=mysql
選項啟動 mysqld。如果您以 root
身分啟動伺服器,而不使用 --user=mysql
,則伺服器可能會在資料目錄中建立 root
擁有的檔案 (例如記錄檔),而這些檔案可能會導致未來伺服器啟動時發生權限相關問題。如果發生這種情況,您必須將檔案的所有權變更為 mysql
或將它們移除。
以執行 MySQL 伺服器的 Unix 使用者身分登入您的系統 (例如,
mysql
)。如果 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
命令中。建立一個文字檔,其中包含單行上的密碼指派陳述式。將密碼取代為您想要使用的密碼。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
儲存該檔案。此範例假設您將檔案命名為
/home/me/mysql-init
。該檔案包含密碼,因此請勿將其儲存在其他使用者可以讀取的位置。如果您不是以mysql
(伺服器執行的使用者)身分登入,請確保該檔案具有允許mysql
讀取的權限。使用設定為指定檔案名稱的
init_file
系統變數來啟動 MySQL 伺服器$> mysqld --init-file=/home/me/mysql-init &
伺服器會在啟動時執行
init_file
系統變數所命名檔案的內容,變更'root'@'localhost'
帳戶密碼。根據您通常啟動伺服器的方式,可能也需要其他選項。例如,在
init_file
引數之前可能需要--defaults-file
。伺服器成功啟動後,請刪除
/home/me/mysql-init
。
現在您應該能夠以新的密碼使用 root
身分連線到 MySQL 伺服器。停止伺服器並正常重新啟動。
前面的章節提供了專門針對 Windows 和 Unix 及類 Unix 系統的密碼重設說明。或者,在任何平台上,您都可以使用 mysql 客戶端重設密碼(但此方法安全性較低)
如果需要,請停止 MySQL 伺服器,然後使用
--skip-grant-tables
選項重新啟動它。這會使任何人都能夠在沒有密碼且具有所有權限的情況下連線,並停用帳戶管理語句,例如ALTER USER
和SET PASSWORD
。因為這是不安全的,所以如果伺服器是使用--skip-grant-tables
選項啟動的,它也會透過啟用skip_networking
來停用遠端連線。在 Windows 平台上,這表示您還必須啟用shared_memory
或named_pipe
;否則伺服器無法啟動。使用 mysql 客戶端連線到 MySQL 伺服器;由於伺服器是使用
--skip-grant-tables
啟動的,因此不需要密碼$> mysql
在
mysql
客戶端中,告知伺服器重新載入授權表,以便帳戶管理語句可以運作mysql> FLUSH PRIVILEGES;
然後變更
'root'@'localhost'
帳戶的密碼。將密碼替換為您要使用的密碼。若要變更具有不同主機名稱部分的root
帳戶的密碼,請修改指示以使用該主機名稱。mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
現在您應該能夠以新的密碼使用 root
身分連線到 MySQL 伺服器。停止伺服器並正常重新啟動(不使用 --skip-grant-tables
選項,且不啟用 skip_networking
系統變數)。