同時在線訪問量繼續增大 對於1G內存的服務器明顯感覺到吃力嚴重時甚至每天都會死機 或者時不時的服務器卡一下 這個問題曾經困擾了我半個多月MySQL使用是很具伸縮性的算法,因此你通常能用很少的內存運行或給MySQL更多的被存以得到更好的性能。 安裝好mysql後,配制文件應該在/usr/local/mysql/share/mysql目錄中,配制文件有幾個,有 my- huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的網站和不同配制的服務器環境,當然需要有不同的配制文件了。 一般的情況下,my-medium.cnf這個配制文件就能滿足我們的大多需要;一般我們會把配置文件拷貝到/etc/my.cnf 只需要修改這個配置文件就可以了,使用 mysqladmin variables extended-status Cu root Cp 可以看到目前的參數,有3個配置參數是最重要的,即key_buffer_size,query_cache_size,table_cache。 key_buffer_size只對MyISAM表起作用, key_buffer_size 指定索引緩沖區的大小,它決定索引處理的速度,尤其是索引讀的速度。一般我們設為16M,實際上稍微大一點的站點 這個數字是遠遠不夠的,通過檢查狀態值 Key_read_requests和Key_reads,可以知道key_buffer_size設置是否合理。比例 key_reads / key_read_requests應該盡可能的低,至少是1:100,1:1000更好(上述狀態值可以使用 SHOW STATUS LIKE ‘key_read%’獲得)。 或者如果你裝了phpmyadmin 可以通過服務器運行狀態看到,筆者推薦用phpmyadmin管理MySQL,以下的狀態值都是本人通過PHPmyadmin獲得的實例分析: 這個服務器已經運行了20天 key_buffer_size C 128M
key_read_requests C 650759289
key_reads - 79112
得到以下狀態: Open tables 256
Opened tables 9046 雖然open_tables已經等於table_cache,但是相對於服務器運行時間來說,已經運行了20天,opened_tables的值也非常低。因此,增加table_cache的值應該用處不大。如果運行了6個小時就出現上述值 那就要考慮增大table_cache。 如果你不需要記錄2進制log 就把這個功能關掉,注意關掉以後就不能恢復出問題前的數據了,需要您手動備份,二進制日志包含所有更新數據的語句,其目的是在恢復數據庫時用它來把數據盡可能恢復到最後的狀態。另外,如果做同步復制( Replication )的話,也需要使用二進制日志傳送修改情況。 [Page]log_bin指定日志文件,如果不提供文件名,MySQL將自己產生缺省文件名。MySQL會在文件名後面自動添加數字引,每次啟動服務時,都會重新生成一個新的二進制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db 可以指定記錄的數據庫;使用binlog-ignore-db可以指定不記錄的數據庫。注意的是:binlog-do-db和binlog- ignore-db一次只指定一個數據庫,指定多個數據庫需要多個語句。而且,MySQL會將所有的數據庫名稱改成小寫,在指定數據庫時必須全部使用小寫名字,否則不會起作用。 關掉這個功能只需要在他前面加上#號 #log-bin 開啟慢查詢日志( slow query log ) 慢查詢日志對於跟蹤有問題的查詢非常有用。它記錄所有查過long_query_time的查詢,如果需要,還可以記錄不使用索引的記錄。下面是一個慢查詢日志的例子: 開啟慢查詢日志,需要設置參數log_slow_queries、long_query_times、log-queries-not-using-indexes。 log_slow_querIEs 指定日志文件,如果不提供文件名,MySQL將自己產生缺省文件名。long_query_times指定慢查詢的阈值,缺省是10秒。log- querIEs-not-using-indexes是4.1.0以後引入的參數,它指示記錄不使用索引的查詢。筆者設置 long_query_time=10 筆者設置: sort_buffer_size = 1M
max_connections=120
wait_timeout =120
back_log=100
read_buffer_size = 1M
thread_cache=32
interactive_timeout=120
thread_concurrency = 4 參數說明: back_log 要求MySQL能有的連接數量。當主要MySQL線程在一個很短時間內得到非常多的連接請求,這就起作用,然後主線程花些時間(盡管很短) 檢查連接並且啟動一個新線程。back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。只有如果期望在一個短時間內有很多連接,你需要增加它,換句話說,這值對到來的TCP/IP連接的偵聽隊列的大小。你的操作系統在這個隊列大小上有它自己的限制。 Unix listen(2)系統調用的手冊頁應該有更多的細節。檢查你的OS文檔找出這個變量的最大值。試圖設定back_log高於你的操作系統的限制將是無效的。