本節提供關於啟動伺服器時問題的疑難排解建議。如需 Windows 系統的其他建議,請參閱第 2.3.4 節,「疑難排解 Microsoft Windows MySQL 伺服器安裝」。
如果您在啟動伺服器時遇到問題,以下是一些可以嘗試的方法
檢查錯誤記錄,以查看伺服器為何無法啟動。記錄檔位於資料目錄中 (在 Windows 上通常為
C:\Program Files\MySQL\MySQL Server 8.4\data
,對於 Unix/Linux 二進位發行版本為/usr/local/mysql/data
,對於 Unix/Linux 原始碼發行版本為/usr/local/var
)。在資料目錄中尋找名稱格式為
和主機名稱
.err
的檔案,其中主機名稱
.log主機名稱
是您的伺服器主機名稱。然後檢查這些檔案的最後幾行。使用tail
來顯示它們$> tail host_name.err $> tail host_name.log
指定您正在使用的儲存引擎所需的任何特殊選項。您可以建立
my.cnf
檔案,並為您計畫使用的引擎指定啟動選項。如果您要使用支援交易表格的儲存引擎 (InnoDB
、NDB
),請確保在啟動伺服器之前已按照您想要的方式設定它們。如果您使用InnoDB
表格,請參閱 第 17.8 節,「InnoDB 組態設定」以取得指南,並參閱 第 17.14 節,「InnoDB 啟動選項和系統變數」以取得選項語法。雖然儲存引擎會對您省略的選項使用預設值,但 Oracle 建議您檢查可用的選項,並為任何預設值不適合您安裝的選項指定明確的值。
請確保伺服器知道在哪裡可以找到資料目錄。mysqld 伺服器使用此目錄作為其目前目錄。這是它預期找到資料庫的地方,也是它預期寫入記錄檔的地方。伺服器也會將 pid (處理序 ID) 檔案寫入資料目錄。
伺服器編譯時,預設資料目錄位置是硬式編碼的。若要判斷預設路徑設定是什麼,請使用
--verbose
和--help
選項呼叫 mysqld。如果資料目錄位於您系統上的其他位置,請使用--datadir
選項在命令列上或在選項檔案中指定 mysqld 或 mysqld_safe。否則,伺服器將無法正常運作。作為--datadir
選項的替代方案,您可以指定 mysqld 安裝 MySQL 的基本目錄位置 (使用--basedir
),而 mysqld 會在那裡尋找data
目錄。若要檢查指定路徑選項的效果,請使用這些選項叫用 mysqld,接著加上
--verbose
和--help
選項。例如,如果您將位置變更至安裝 mysqld 的目錄,然後執行下列命令,它會顯示以/usr/local
作為基礎目錄啟動伺服器的效果。$> ./mysqld --basedir=/usr/local --verbose --help
您也可以指定其他選項,例如
--datadir
,但--verbose
和--help
必須是最後的選項。一旦您決定好想要的路徑設定後,請啟動伺服器,不要加上
--verbose
和--help
。如果 mysqld 目前正在執行,您可以執行此命令來找出它正在使用的路徑設定。
$> mysqladmin variables
或
$> mysqladmin -h host_name variables
host_name
是 MySQL 伺服器主機的名稱。請確保伺服器可以存取資料目錄。資料目錄及其內容的所有權和權限必須允許伺服器讀取和修改它們。
如果您在啟動 mysqld 時收到
Errcode 13
(表示Permission denied
),這表示資料目錄或其內容的權限不允許伺服器存取。在這種情況下,您可以變更相關檔案和目錄的權限,以便伺服器有權使用它們。您也可以以root
身分啟動伺服器,但這會引發安全性問題,應避免這樣做。將位置變更至資料目錄,並檢查資料目錄及其內容的所有權,以確保伺服器具有存取權。例如,如果資料目錄是
/usr/local/mysql/var
,請使用此命令。$> ls -la /usr/local/mysql/var
如果資料目錄或其檔案或子目錄不屬於您用於執行伺服器的登入帳戶,請將它們的所有權變更為該帳戶。如果帳戶名稱為
mysql
,請使用這些命令。$> chown -R mysql /usr/local/mysql/var $> chgrp -R mysql /usr/local/mysql/var
即使擁有正確的所有權,如果您的系統上執行其他安全軟體來管理應用程式對檔案系統各個部分的存取,MySQL 也可能無法啟動。在這種情況下,請重新設定該軟體,以啟用 mysqld 來存取它在正常操作期間使用的目錄。
確認伺服器想要使用的網路介面可用。
如果發生以下任何一個錯誤,表示某些其他程式(可能另一個 mysqld 伺服器)正在使用 mysqld 嘗試使用的 TCP/IP 連接埠或 Unix socket 檔案。
Can't start server: Bind on TCP/IP port: Address already in use Can't start server: Bind on unix socket...
使用 ps 來判斷您是否正在執行另一個 mysqld 伺服器。如果是,請在再次啟動 mysqld 之前關閉伺服器。(如果另一個伺服器正在執行,而且您真的想執行多個伺服器,您可以在第 7.8 節,"在單一機器上執行多個 MySQL 執行個體" 中找到有關如何執行的資訊。)
如果沒有其他伺服器正在執行,請執行命令
telnet
。(預設的 MySQL 連接埠號碼是 3306。)然後按 Enter 鍵幾次。如果您沒有收到像your_host_name
tcp_ip_port_number
telnet: Unable to connect to remote host: Connection refused
這樣的錯誤訊息,則表示某些其他程式正在使用 mysqld 嘗試使用的 TCP/IP 連接埠。找出這是哪個程式並停用它,或告知 mysqld 使用--port
選項來監聽不同的連接埠。在這種情況下,當使用 TCP/IP 連接到伺服器時,請為用戶端程式指定相同的非預設連接埠號碼。連接埠無法存取的另一個原因是您正在執行防火牆,而該防火牆會封鎖連線到該連接埠。如果是這樣,請修改防火牆設定以允許存取該連接埠。
如果伺服器啟動但您無法連接到它,請確保您在
/etc/hosts
中有一個看起來像這樣的項目。127.0.0.1 localhost
如果您無法啟動 mysqld,請嘗試使用
--debug
選項來建立追蹤檔案以找出問題。請參閱第 7.9.4 節,"DBUG 套件"。