[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支援