2010年4月30日

非常糟糕的MySQL預設參數

MySQL有四個非常糟糕的預設參數,我今天就遇到其中一個,由於 MySQL 不是我們安裝的,加上對方的網管權限抓的相當緊,來回耗了不少時間溝通。最後問題竟然是因為 MySQL 會反解 client 的 DNS 名稱所導致,真的是令我傻眼。這也是我為什麼要趕快把這些問題紀錄下來的原因了。

skip-name-resolve

Client 每次連線到 MySQL 時,預設會反解 DNS 名稱,導致每次連線時,都會有短暫停頓的問題。你可以透過 HTTP watch 工具發現,只要連線到 MySQL 時,回應時間都爆高,但讀取 HTML 卻相當快。

max_connect_errors

max_connect_errors 的用途是當一個 client 錯誤連線次數達到設定的標準時,MySQL 將會阻擋該 client 直到你下達 FLUSH HOSTS 指令清除。倘若有個正常的 client (通常是 WEB 主機),因為某些原因導致連線錯誤時,一但達到此標準,該 client 就會被鎖死。更好笑得是這個參數不能關閉,你只能把設定值盡可能的調到最大。

connect_timeout

這個設定預設只有5秒,當你的網路狀況不是很穩定的時候,一旦超過5秒,就會發生類似 max_connect_errors 的問題。建議把這個設定值調整到 15 到 20 秒。

slave_net_timeout

這個參數的用途是當 master 與 slave 之間的網路因故中斷時,slave 要等待達到此設定值後才會發覺錯誤,進而嘗試修復這個問題。這樣的設計非常的好,但是預設值是3600秒,要整整一小時啊,相信 DBA 應該不希望要等這麼久才發現問題吧,建議把這個值改到30 ~ 60秒左右。

上述的設定我整理如下:

//my.cnf 新增如下設定
[mysqld]
max_connect_errors = 1844674407370954751
connect_timeout = 20
skip-name-resolve
slave_net_timeout = 30

參考文獻:

http://jeremy.zawodny.com/blog/archives/011421.html

沒有留言:

張貼留言