top
Loading...
2.9.2.3.啟動MySQL服務器以及其故障診斷和排除
2.9.2.3. 啟動MySQL服務器以及其故障診斷和排除

如果啟動服務器時有問題,可以嘗試:

·         指定你使用的儲存引擎需要的任何特殊選項。

·         確保服務器知道從哪里找到數據目錄。

·         確保服務器可以使用數據目錄。數據目錄和內容的所有權和允許必須設置成服務器可以訪問和修改它們。

·         檢查錯誤日志查看服務器為何不啟動。

·         驗證服務器想要使用的網絡接口可用。

一些儲存引擎有一些選項可以控制其行為。你可以創建一個my.cnf文件并為計劃使用的引擎設置啟動選項。如果你將要使用支持事務處理表 (InnoDBBDB)的儲存引擎,應確保啟動服務器之前按照你的期望對它們進行了配置:

·         如果你正使用InnoDB表,參閱InnoDB-specific啟動選項。如果你未指定選項,InnoDB使用默認值作為配置選項。請參見15.2.3節,“InnoDB配置”。

·         如果你正使用BDB (Berkeley DB)表,你應當熟悉不同的BDB-specific啟動選項。請參見15.5.3節,“BDB啟動選項”。

mysqld服務器啟動時,它進入數據目錄。在這里它可以找到數據庫并寫入日志文件。在Unix中,服務器還在數據目錄中寫pid(過程 ID)文件。

當編譯服務器時確定數據目錄。這是服務器默認尋找數據目錄的位置。如果數據目錄位于系統中的其它位置,服務器不能正確工作。用--verbose--help選項調用mysqld你可以找出默認路徑設定值。

如果默認值與你的系統中的MySQL安裝布局不匹配,你可以在命令行中為mysqld mysqld_safe指定選項來覆蓋它們。你還可以在選項文件中列出選項。

要想明顯指定數據目錄的位置,使用--datadir選項。一般情況下,你可以告訴mysqld基本目錄的位置,MySQL安裝在該目錄下,并且它在該目錄中尋找數據目錄。你可以使用--basedir選項來實現。

要想檢查指定路徑選項的結果,用--verbose--help選項調用mysqld。例如,如果你進入mysqld的安裝目錄,然后運行下面的命令,它顯示啟動服務器的結果,基本目錄為/usr/local

shell> ./mysqld --basedir=/usr/local --verbose --help

你可以指定其它選項,例如--datadir,但是請注意--verbose--help必須為最后的選項。

一旦你確定了你想要的路徑設定值,用--verbose-- help啟動服務器。

如果mysqld正在運行,執行下列命令你可以找出它所使用的路徑設定值:

shell> mysqladmin variables

或:

shell> mysqladmin -h host_name variables

host_nameMySQL服務器主機的名稱。

如果啟動mysqld時遇到Errcode 13(意味著Permission denied),這意味著數據目錄或其內容的訪問權限不允許服務器訪問。此時,你需要更改所調用文件和目錄的權限,使服務器有權使用它們。你還可以用root啟動服務器,但是這樣會造成安全問題,應當避免。

Unix中,進入數據目錄,檢查數據目錄和其內容的所有權,確保服務器可以訪問。例如,如果數據目錄是/usr/local/mysql/var,使用命令:

shell> ls -la /usr/local/mysql/var

如果數據目錄或其文件或子目錄不屬于你運行服務器使用的賬戶,將所有權改為該賬戶:

shell> chown R mySQL /usr/local/mysql/var
shell> chgrp R mySQL /usr/local/mysql/var

如果服務器不能正確啟動,檢查錯誤日志文件,看看是否可以找到原因。日志文件位于數據目錄(Windows中一般為C:Program FilesMySQLMySQL Server 5.1dataUnix二進制分發版為/usr/local/mysql/dataUnix源碼分發版為/usr/local/var)。查找數據目錄中的host_name.errhost_name.log文件,其中host_name是你的服務器主機名。然后檢查文件的最后幾行。在Unix中,可以使用tail來顯示:

shell> tail host_name.err
shell> tail host_name.log

錯誤日志包含指示服務器不能啟動的信息。例如,你可以看見日志中:

000729 14:50:10  bdb:  Recovery function for LSN 1 27595 failed
000729 14:50:10  bdb:  warning: ./test/t1.db: No such file or directory
000729 14:50:10  Can't init databases

這意味著你沒有用--bdb-no-recover選項啟動mysqldBerkeley DB恢復數據庫時發現其日志文件有一些問題。要想繼續,你應當將舊的Berkeley DB 日志文件從數據庫目錄移到其它地方,以后你可以在那兒檢查它們。BDB日志文件以log.0000000001開頭,按順序命名。

如果你運行支持BDB 表的mysqld,mysqld啟動時內核崩潰,該可能是由于BDB 恢復日志的問題。此時,你可以嘗試用--bdb-no-recover啟動mysqld。如果有幫助,你應當從數據目錄移走所有BDB日志文件并嘗試不用--bdb-no-recover選項重新啟動mysqld

如果出現下面的錯誤,說明其它程序(也許是另一個mysqld服務器)正使用mysqld正試圖使用的TCP/IP端口或Unix 套接字文件:

Can't start server: Bind on TCP/IP port: Address already in use
Can't start server: Bind Unix socket...

使用ps來確定是否另有一個mysqld服務器正在運行。如果如此,關閉服務器重新啟動mysqld(如果另一個服務器正運行,你的確想要運行多個服務器,你可以在5.12節,“在同一臺機器上運行多個MySQL服務器”中發現相關信息)

如果沒有其它服務器在運行,嘗試執行命令 telnet your-host-name tcp-ip-port-number(默認MySQL端口號是3306然后按兩次Enter(回車)鍵。如果出現telnet: Unable to connect to remote host: Connection refused錯誤消息,其它程序正使用mysqld試圖使用的 TCP/IP端口。你需要跟蹤這是哪個程序并禁用它,或讓mysqld--port選項幀聽其它端口。此時,當通過TCP/IP協議連接服務器時,你還需要為客戶端程序指定端口號。

端口不能訪問的另一個原因可能是防火墻正運行,阻擋了與它的連接。如果如此,修改防火墻設置允許對該端口的訪問。

如果服務器已經啟動但是你不能與它連接,你應當確保在/etc/hosts中有下面所示條目:

127.0.0.1       localhost

該問題只發生在沒有工作線程庫,并且MySQL必須配置為使用MIT-pthreads的系統。

如果你不能啟動mysqld,你可以使用--debug選項嘗試編寫一個跟蹤文件來找到問題。請參見E.1.2節,“創建跟蹤文件”。

關于在Windows安裝中排錯的詳細信息,參見2.3.14節,“在Windows環境下對MySQL安裝的故障診斷與排除”。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/installing.html
北斗有巢氏 有巢氏北斗