解决问题
Lost connection to MySQL server at ‘reading authorization packet’, system error: 0
通过修改 connect_timeout 的值来解决
http://hi.baidu.com/279713119/blog/item/d7cdd7533ba9c82e42a75b0f.html
參考了一篇:『Fixing Poor MySQL Default Configuration Values』,裡面提到了四個 MySQL 預設值相當沒有意義,所以 Jeremy Zawodny 提出了修改,也解釋了為什麼這四個會降低 MySQL 的效能。
1. max_connect_errors:
當使用者連接 MySQL 出現錯誤,伺服器就會根據 connect_timeout 所設定時間之後,而放棄等待,放棄之後會有 counter 來紀錄連接失敗的次數,當達到 max_connect_errors 設定值,伺服器就會 locked out client 端,這會衍生一個問題,那就是可以惡搞同一台網站,把 MySQL 搞爛,造成封鎖,不過解決方法就是把 max_connect_errors 設定成 (max_connect_errors=1844674407370954751)
2. connect_timeout:
這跟上面 max_connect_errors 是有相當大的關係,MySQL 預設 connect_timeout 是五秒,可是在網路繁忙的時候,也許需要花費比較多的時間來做連接, 但是預設值是五秒的話,這樣會一直 time out,造成 counter 持續增加,屆時會超過 max_connect_errors 設定值,所以必須把 connect_timeout 設定提高到 15 or 20,這樣就可以了 (connect_timeout = 20)
3. skip-name-resolve:
在每次的 MySQL 連線,伺服器端會偵測 Client 的 DNS 反解,這步驟真的有點多餘
綜合上面結論,請加入 my.cnf 一些設定
max_connections = 6000
wait_timeout = 5
max_connect_errors = 1844674407370954751
connect_timeout = 20
skip-name-resolve
slave_net_timeout = 30