如果您從未為 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 9.0\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 9.0\\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。如果您在不使用 --user=mysql
的情況下以 root
身分啟動伺服器,伺服器可能會在資料目錄中建立 root
擁有的檔案,例如記錄檔,而這些檔案可能會導致未來伺服器啟動時出現與權限相關的問題。如果發生這種情況,您必須將檔案的所有權變更為 mysql
或將它們移除。
以 MySQL 伺服器執行的 Unix 使用者身分登入您的系統(例如,
mysql
)。如果 MySQL 伺服器正在執行,請停止它。找到包含伺服器程序 ID 的
.pid
檔案。此檔案的確切位置和名稱取決於您的發行版本、主機名稱和組態。常見的位置為/var/lib/mysql/
、/var/run/mysqld/
和/usr/local/mysql/data/
。一般而言,檔案名稱的副檔名為.pid
,並以mysqld
或您系統的主機名稱開頭。藉由將正常的
kill
(而不是kill -9
)傳送至 mysqld 程序來停止 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
系統變數)。