[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking # 避免MySQL的外部鎖定,減少出錯幾率增強穩定性。
skip-networking # 開啟該選項可以徹底關閉MySQL的TCP/IP連接配接方式,如果WEB伺服器是以遠端連接配接的方式通路MySQL資料庫伺服器則不要開啟該選項!否則将無法正常連接配接!
skip-name-resolve # 禁止MySQL對外部連接配接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠端主機連接配接授權都要使用IP位址方式,否則MySQL将無法正常處理連接配接請求!
back_log = 384 ########### 我的1G記憶體沒有設定此項使用的預設值 50,目前觀察還不錯。
# 1. 指定MySQL可能的連接配接數量,當MySQL主線程在很短的時間内接收到非常多的連接配接請求,該參數生效,主線程花費很短的時間檢查連接配接并且啟動一個新線程。
# 2. back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間内多少個請求可以被存在堆棧中。 如果系統在一個短時間内有很多連接配接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接配接的偵聽隊列的大小。不同的作業系統在這個隊列大小上有它自己的限制。
# 3. 注意:試圖設定back_log高于你的作業系統的限制将是無效的。預設值為50。對于Linux系統推薦設定為小于512的整數。
key_buffer_size = 256M ########### 我設定的128M,目前觀察還不錯。
# 隻對MyISAM表起作用,指定用于索引的緩沖區大小,增加它可得到更好的索引處理性能。尤其是索引讀的速度。
# 1. 對于記憶體在4GB左右的伺服器該參數可設定為256M或384M。
# 2. 另外一個估計key_buffer_size的辦法 把你網站資料庫的每個表的索引所占空間大小加起來看看, 以此伺服器為例:比較大的幾個表索引加起來大概125M 這個數字會随着表變大而變大.
# 3. 一般我們設為16M,實際上稍微大一點的站點 這個數字是遠遠不夠的,通過檢查狀态值 Key_read_requests和Key_reads,可以知道key_buffer_size設定是否合理。比例 key_reads / key_read_requests應該盡可能的低,至少是1:100,1:1000更好(上述狀态值可以使用SHOW STATUS LIKE ‘key_read%’獲得)。
以下的狀态值都是本人(hexu.org)通過 Sqlyog 獲得的執行個體分析:
#> SHOW STATUS LIKE 'key_read%'
##> key_read_requests – 650759289
##> key_reads - 79112
##> 比例接近1:8000 健康狀況非常好
# 4. 注意:該參數值設定的過大反而會是伺服器整體效率降低!
query_cache_type = 1 # 指定是否使用查詢緩沖
query_cache_limit = 2M
query_cache_size = 64M ########### 我的1G記憶體設定為64M,目前觀察還不錯。
# 使用查詢緩沖,MySQL将Select語句和查詢結果存放在緩沖區中,今後對于同樣的Select語句(區分大小寫),将直接從緩沖區中讀取結果。
# 1. 根據MySQL使用者手冊,使用查詢緩沖最多可以達到238%的效率。 指定MySQL查詢緩沖區的大小。可以通過在MySQL控制台執行以下指令觀察:
#> SHOW VARIABLES LIKE '%query_cache%';
#> SHOW STATUS LIKE 'Qcache%';
# 1. 如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩沖不夠的情況,同時Qcache_hits的值非常大,則表明查詢緩沖使用非常頻繁,此時需要增加緩沖大小
# 2. 如果Qcache_hits的值不大,則表明你的查詢重複率很低,這種情況下使用查詢緩沖反而會影響效率,那麼可以考慮不用查詢緩沖。此外,在Select語句中加入SQL_NO_CACHE可以明确表示不使用查詢緩沖。
# 3. 如果Qcache_free_blocks的值非常大,則表明緩沖區中碎片很多
max_allowed_packet = 4M
thread_stack = 256K
table_cache = 256 ########### 我的1G記憶體設定為256,目前觀察還不錯。
# 指定表高速緩存的大小。每當MySQL通路一個表時,如果在表緩沖區中還有空間,該表就被打開并放入其中,這樣可以更快地通路表内容。
# 1. 對于有1G記憶體的機器,推薦值是128-256。
# 2. 通過檢查峰值時間的狀态值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。
# 3. 如果你發現open_tables等于table_cache,并且opened_tables在不斷增長,那麼你就需要增加table_cache的值了。
#> SHOW STATUS LIKE ’Open%tables‘;
# 1. Open tables 256
# 2. Opened tables 9046
# 雖然open_tables已經等于table_cache,但是相對于伺服器運作時間來說,已經運作了20 天,opened_tables的值也非常低。是以,增加table_cache的值應該用處不大。如果運作了6個小時就出現上述值 那就要考慮增大table_cache
# 4. 注意:不能盲目地把table_cache設定成很大的值。如果設定得太高,可能會造成檔案描述符不足,進而造成性能不穩定或者連接配接失敗。
sort_buffer_size = 6M # 查詢排序時所能使用的緩沖區大小。
read_buffer_size = 4M # 讀查詢操作所能使用的緩沖區大小。
join_buffer_size = 8M # 聯合查詢操作所能使用的緩沖區大小
# 注意:sort/read/join_buffer_size 三個參數對應的配置設定記憶體是每連接配接獨占!如果有100個連接配接,那麼實際配置設定的總共排序緩沖區大小為100 × 6 = 600MB。是以,對于記憶體在4GB左右的伺服器推薦設定為6-8M。
myisam_sort_buffer_size = 64M
table_cache = 512
tmp_table_size = 256M
max_connections = 768
# 指定MySQL允許的最大連接配接程序數。如果在通路論壇時經常出現Too Many Connections的錯誤提 示,則需要增大該參數值。
max_connect_errors = 10000000
wait_timeout = 10
# 指定一個請求的最大連接配接時間,對于4GB左右記憶體的伺服器可以設定為5-10。
thread_cache 32
# 沒找到具體說明,不過設定為32後 20天才建立了400多個線程 而以前一天就建立了上千個線程 是以還是有用的
thread_concurrency = 8
# 該參數取值為伺服器邏輯CPU數量×2,在本例中,伺服器有2顆實體CPU,而每顆實體CPU又支援H.T超線程,是以實際取值為4 × 2 = 8
thread_cache_size = 8
# 預設是 8 ,這個值表示可以重新利用儲存在緩存中線程的數量, 當斷開連接配接時:
# 1. 如果緩存中還有空間,那麼用戶端的線程将被放到緩存中,
# 2. 如果線程重新被請求,那麼請求将從緩存中讀取,
# 3. 如果緩存中是空的或者是新的請求,那麼這個線程将被重新建立,
# 4. 如果有很多新的線程,增加這個值可以改善系統性能.通過比較 Connections 和 Threads_created 狀态的變量,可以看到這個變量的作用。
# 5. 根據實體記憶體設定規則如下:
# Mem: 1G 可以設定為 8
# Mem: 2G 可以設定為 16
# Mem: 3G 可以設定為 32
# Mem: >3G 可以設定為 64
ft_min_word_len = 4 ########### 我的設定為2
#被全文檢索索引的最小的字長. 你也許希望減少它,如果你需要搜尋更短字的時候. 注意在你修改此值之後,你需要重建你的 FULLTEXT 索引
log-bin = /home/mysql/logs/binlog/mysql-bin
# 如果你不需要記錄2進制log 就把這個功能關掉,注意關掉以後就不能恢複出問題前的資料了,需要您手動備份,
# 1. 二進制日志包含所有更新資料的語句,其目的是在恢複資料庫時用它來把資料盡可能恢複到最後的狀态。
# 2. 另外,如果做同步複制( Replication )的話,也需要使用二進制日志傳送修改情況。
# 3. 如果不提供檔案名,MySQL将自己産生預設檔案名。MySQL會在檔案名後面自動添加數字引,每次啟動服務時,都會重新生成一個新的二進制檔案。
# 4. 此外說明:
# 1. 使用log-bin-index可以指定索引檔案;
# 2. 使用binlog-do-db可以指定記錄的資料庫;
# 3. 使用binlog-ignore- db可以指定不記錄的資料庫。
# 注意第一:binlog-do-db和binlog-ignore-db一次隻指定一個資料庫,指定多個資料庫需要多個語句。
# 注意第二:MySQL會将所有的資料庫名稱改成小寫,在指定資料庫時必須全部使用小寫名字,否則不會起作用。
log_slow_queries = /home/mysql/logs/slowlog/slow.query
# 指定日志檔案,如果不提供檔案名,MySQL将自己産生預設檔案名。
long_query_time = 2 ########### 我設定的如果查詢時間大于 2s,就記錄慢查詢到log_slow_querys指的檔案中
log_long_format
# 打開此項會記錄使得那些沒有使用索引的查詢也被作為到慢速查詢附加到慢速日志裡
log-queries-not-using-indexes
skip-innodb #去掉innodb支援