【譯】修復MySQL不合適的默認配置

Fixing Poor MySQL Default Configuration Values

原文地址:http://jeremy.zawodny.com/blog/archives/011421.html

[幾句廢話:本人英文很爛,今天很無奈地第一次認真地看英文文檔,很糾結,花了好長時間纔看了那麼一丁點兒,回過頭看,竟又忘記自己剛看的內容了~速度太慢,汗||於是想想試着翻譯並記下來吧,順便大家也給我指出錯誤啊~Thank you~]

    我最近一直在積累一些MySQL在大的生產環境會產生問題的默認配置變量。它們都具有相同的特性那就是,一兩次網絡波動就會觸發一些非常不想看到的結果。

max_connect_errors

    如果客戶端連接到MySQL時遇到問題,服務器過了connect_timeout 時間後將不再等待,並且增加連接主機錯誤的次數。當這個錯誤次數達到max_connect_errors後,客戶端將被拒絕連接,直到你執行FLUSH HOSTS命令。更加糟糕的是,如果你的網絡時不時地波動,並且沒有重新啓動MySQL,這個錯誤數就會日積月累,最後指不定哪天晚上突然出故障,讓你忙碌整夜。

        在MySQL的docs裏看到主機被阻止了,可悲的是,這時沒有辦法去徹底阻止這個檢查。卻不能實現設置變量爲0,你的真正解決方案只有(a)設置一個非常大的值(max_connect-error=1844674407370954751);(b)臨時運行FLUSH HOSTS命令。

connect_timeout

         這跟上面的問題相關,在網絡擁塞的情況下(不管是客戶端或者服務端),剛開始連接可能要花費幾秒才能完成,默認的connect_timeout 時間是5秒。當你被這種情況所牽絆,上面的這個max_connect_errors問題就會很有衝擊力。

        爲了避免這種情況,首先可以嘗試設置connect_timeout一個值像15 或 20。並且考慮設置thread_cache_size爲一個非零值。當服務器在非常短的時間週期裏,時常保持高的新連接數,這個設置將幫助改善這種情況。

skip-name-resolve

       在默認情況下,MySQL做一個反向DNS查詢對每個過來的連接,這就太糟糕了,似乎不論你有多麼好的基礎設施,在DNS服務器有標誌。 MySQL的主機緩存存在,讓那些查找降到最低值。我曾經見過由於這個原因導致了至今8年的麻煩。當這種情況發生的時候,我只能假定這個主機緩存存在一個bug或分析lib庫。

       我建議在/etc/my.cnf裏添加skip-name-resolve來完全跳過個DNS。僅僅用IP地址或你授權的範圍。似乎減緩從DNS服務器的回覆也能幫助你改善connect_timeout的牽絆。試想有2、3臺DNS服務器配置,但是第一個不可用。

slave_net_timeout

      當主從數據庫的網絡連接在某種程度上被中斷,任何一方都不能檢測(像防火牆或路由改變),你必須等待直到slave_net_timeout設置的時間過後,從數據數才知道連接錯誤了。它將嘗試再次連接主服務器並且採集哪裏使它停止。這真是太可怕了。

       然而,這個默認值是3600秒,整整一個小時!太不好了。

      誰會希望他們的從服務器在檢查它們哪裏出問題之前,閒置那麼長時間時間?我覺得任何人都不想要這種結果。

      我的建議,如果你處在一個繁忙的環境,設置你的值大約30秒。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章