本節提供關於啟動伺服器時的問題排除建議。如需 Windows 系統的其他建議,請參閱第 2.3.4 節,「排除 Microsoft Windows MySQL 伺服器安裝問題」。
如果您在啟動伺服器時遇到問題,以下是一些可以嘗試的方法:
檢查錯誤日誌,查看伺服器無法啟動的原因。日誌檔位於資料目錄中(在 Windows 上通常為
C:\Program Files\MySQL\MySQL Server 9.0\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
選項的替代方法,您可以透過--basedir
指定安裝 MySQL 的基礎目錄位置給 mysqld,而 mysqld 會在那裡尋找data
目錄。若要檢查指定路徑選項的效果,請在這些選項之後,加上
--verbose
和--help
選項,叫用 mysqld。例如,如果您將位置變更為安裝 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 套件」。