18.2.1 MySQL server has gone away錯誤
本小節也涉及有關Lost connection to server during query的錯誤。
對MySQL server has gone away錯誤最常見的原因是伺服器逾時了並且關閉了串連。預設地,如果沒有事情發生,伺服器在 8個小時後關閉串連。你可在啟動mysqld時通過設定wait_timeout變數改變時間限制。
你可以通過執行mysqladmin version並且檢驗正常啟動並執行時間來檢查MySQL還沒死掉。
如果你有一個指令碼,你只須再發出查詢讓客護進行一次自動的重新串連。
在這種請下,你通常能獲得下列錯誤碼(你得到的是OS相關的):
CR_SERVER_GONE_ERROR 客戶不能發送一個問題給伺服器。
CR_SERVER_LOST 當寫伺服器時,客戶沒有出錯,但是它沒有得到對問題的一個完整的答案(或任何答案)。
如果你向伺服器發送不正確的或太大的查詢,你也可能得到這些錯誤。如果mysqld得到一個太大或不正常的包,它認為客戶出錯了並關閉串連。如果你需要較大的查詢(例如,如果你正在處理較大的BLOB列),你可以使用-O max_allowed_packet=#選項(預設1M)啟動mysqld以增加查詢限制。多餘的記憶體按需分配,這樣mysqld只有在你發出較大差詢時或mysqld必須返回較大的結果行時,才使用更多的記憶體!
18.2.2 Can’t connect to [local] MySQL server錯誤
一個MySQL客戶可以兩種不同的方式串連mysqld伺服器:Unix通訊端,它通過在檔案系統中的一個檔案(預設“/tmp/mysqld.sock”)進行串連;或TCP/IP,它通過一個連接埠號碼串連。Unix通訊端比TCP/IP更快,但是只有用在串連同一台電腦上的伺服器。如果你不指定主機名稱或如果你指定特殊的主機名稱localhost,使用Unix通訊端。
錯誤(2002)Can’t connect to ...通常意味著沒有一個MySQL伺服器運行在系統上或當試圖串連mysqld伺服器時,你正在使用一個錯誤的通訊端檔案或TCP/IP連接埠。
由檢查(使用ps)在你的伺服器上有一個名為mysqld的進程啟動!如果沒有任何mysqld過程,你應該啟動一個。見4.15.2 啟動MySQL伺服器的問題。
如果一個mysqld過程正在運行,你可以通過嘗試這些不同的串連來檢查伺服器(當然,連接埠號碼和通訊端路徑名可能在你的安裝中是不同的):
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h ’ip for your host’ version
shell> mysqladmin --socket=/tmp/mysql.sock version
注意hostname命令使用反引號“`”而非正引號“’”;這些導致hostname輸出(即,當前主機名稱)被代替進mysqladmin命令中。
這是可能造成Can’t connect to local MySQL server錯誤的一些原因:
mysqld不在運行。
你正在使用MIT-pthreads的一個系統上運行。如果正在運行在一個沒有原生線程的系統上,mysqld使用 MIT-pthreads 軟體包。見4.2 由MySQL支援的作業系統。然而,MIT-pthreads不支援Unix通訊端,因此當與伺服器串連時,在這樣一個系統上,你總是必須明確地指定主機名稱。試試使用這個命令檢查到伺服器的串連:
shell> mysqladmin -h `hostname` version