my.cnf 詳解

zping發表於2017-12-22
[client]
port =3306
socket =/tmp/mysql.sock

[mysqld]
port =3306
socket =/tmp/mysql.sock

basedir =/usr/local/mysql
datadir =/data/mysql
pid-file =/data/mysql/mysql.pid
user = mysql
bind-address =0.0.0.0
server-id =1#表示是本機的序號為1,一般來講就是master的意思

skip-name-resolve
# 禁止MySQL對外部連線進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,# 則所有遠端主機連線授權都要使用IP地址方式,否則MySQL將無法正常處理連線請求#skip-networking

back_log =600# MySQL能有的連線數量。當主要MySQL執行緒在一個很短時間內得到非常多的連線請求,這就起作用,# 然後主執行緒花些時間(儘管很短)檢查連線並且啟動一個新執行緒。back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆疊中。# 如果期望在一個短時間內有很多連線,你需要增加它。也就是說,如果MySQL的連線資料達到max_connections時,新來的請求將會被存在堆疊中,# 以等待某一連線釋放資源,該堆疊的數量即back_log,如果等待連線的數量超過back_log,將不被授予連線資源。# 另外,這值(back_log)限於您的作業系統對到來的TCP/IP連線的偵聽佇列的大小。# 你的作業系統在這個佇列大小上有它自己的限制(可以檢查你的OS文件找出這個變數的最大值),試圖設定back_log高於你的作業系統的限制將是無效的。

max_connections =1000# MySQL的最大連線數,如果伺服器的併發連線請求量比較大,建議調高此值,以增加並行連線數量,當然這建立在機器能支撐的情況下,因為如果連線數越多,介於MySQL會為每個連線提供連線緩衝區,就會開銷越多的記憶體,所以要適當調整該值,不能盲目提高設值。可以過'conn%'萬用字元檢視當前狀態的連線數量,以定奪該值的大小。

max_connect_errors =6000# 對於同一主機,如果有超出該引數值個數的中斷錯誤連線,則該主機將被禁止連線。如需對該主機進行解禁,執行:FLUSH HOST。

open_files_limit =65535# MySQL開啟的檔案描述符限制,預設最小1024;當open_files_limit沒有被配置的時候,比較max_connections*5和ulimit -n的值,哪個大用哪個,# 當open_file_limit被配置的時候,比較open_files_limit和max_connections*5的值,哪個大用哪個。

table_open_cache =128# MySQL每開啟一個表,都會讀入一些資料到table_open_cache快取中,當MySQL在這個快取中找不到相應資訊時,才會去磁碟上讀取。預設值64# 假定系統有200個併發連線,則需將此引數設定為200*N(N為每個連線所需的檔案描述符數目);# 當把table_open_cache設定為很大時,如果系統處理不了那麼多檔案描述符,那麼就會出現客戶端失效,連線不上

max_allowed_packet =4M# 接受的資料包大小;增加該變數的值十分安全,這是因為僅當需要時才會分配額外記憶體。例如,僅當你發出長查詢或MySQLd必須返回大的結果行時MySQLd才會分配更多記憶體。# 該變數之所以取較小預設值是一種預防措施,以捕獲客戶端和伺服器之間的錯誤資訊包,並確保不會因偶然使用大的資訊包而導致記憶體溢位。

binlog_cache_size =1M# 一個事務,在沒有提交的時候,產生的日誌,記錄到Cache中;等到事務提交需要提交的時候,則把日誌持久化到磁碟。預設binlog_cache_size大小32K

max_heap_table_size =8M# 定義了使用者可以建立的記憶體表(memory table)的大小。這個值用來計算記憶體表的最大行數值。這個變數支援動態改變

tmp_table_size =16M# MySQL的heap(堆積)表緩衝大小。所有聯合在一個DML指令內完成,並且大多數聯合甚至可以不用臨時表即可以完成。# 大多數臨時表是基於記憶體的(HEAP)表。具有大的記錄長度的臨時表 (所有列的長度的和)或包含BLOB列的表儲存在硬碟上。# 如果某個內部heap(堆積)表大小超過tmp_table_size,MySQL可以根據需要自動將記憶體中的heap表改為基於硬碟的MyISAM表。還可以通過設定tmp_table_size選項來增加臨時表的大小。也就是說,如果調高該值,MySQL同時將增加heap表的大小,可達到提高聯接查詢速度的效果

read_buffer_size =2M# MySQL讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySQL會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。# 如果對錶的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其效能

read_rnd_buffer_size =8M# MySQL的隨機讀緩衝區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀快取區。進行排序查詢時,# MySQL會首先掃描一遍該緩衝,以避免磁碟搜尋,提高查詢速度,如果需要排序大量資料,可適當調高該值。但MySQL會為每個客戶連線發放該緩衝空間,所以應儘量適當設定該值,以避免記憶體開銷過大

sort_buffer_size =8M# MySQL執行排序使用的緩衝大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。# 如果不能,可以嘗試增加sort_buffer_size變數的大小

join_buffer_size =8M# 聯合查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該引數對應的分配記憶體也是每連線獨享

thread_cache_size =8# 這個值(預設8)表示可以重新利用儲存在快取中執行緒的數量,當斷開連線時如果快取中還有空間,那麼客戶端的執行緒將被放到快取中,# 如果執行緒重新被請求,那麼請求將從快取中讀取,如果快取中是空的或者是新的請求,那麼這個執行緒將被重新建立,如果有很多新的執行緒,# 增加這個值可以改善系統效能.通過比較Connections和Threads_created狀態的變數,可以看到這個變數的作用。(–>表示要調整的值)# 根據實體記憶體設定規則如下:# 1G  —> 8# 2G  —> 16# 3G  —> 32# 大於3G  —> 64

query_cache_size =8M#MySQL的查詢緩衝大小(從4.0.1開始,MySQL提供了查詢緩衝機制)使用查詢緩衝,MySQL將SELECT語句和查詢結果存放在緩衝區中,# 今後對於同樣的SELECT語句(區分大小寫),將直接從緩衝區中讀取結果。根據MySQL使用者手冊,使用查詢緩衝最多可以達到238%的效率。# 通過檢查狀態值'Qcache_%',可以知道query_cache_size設定是否合理:如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況,# 如果Qcache_hits的值也非常大,則表明查詢緩衝使用非常頻繁,此時需要增加緩衝大小;如果Qcache_hits的值不大,則表明你的查詢重複率很低,# 這種情況下使用查詢緩衝反而會影響效率,那麼可以考慮不用查詢緩衝。此外,在SELECT語句中加入SQL_NO_CACHE可以明確表示不使用查詢緩衝

query_cache_limit =2M#指定單個查詢能夠使用的緩衝區大小,預設1M

key_buffer_size =4M#指定用於索引的緩衝區大小,增加它可得到更好處理的索引(對所有讀和多重寫),到你能負擔得起那樣多。如果你使它太大,# 系統將開始換頁並且真的變慢了。對於記憶體在4GB左右的伺服器該引數可設定為384M或512M。通過檢查狀態值Key_read_requests和Key_reads,# 可以知道key_buffer_size設定是否合理。比例key_reads/key_read_requests應該儘可能的低,# 至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE 'key_read%'獲得)。注意:該引數值設定的過大反而會是伺服器整體效率降低

ft_min_word_len =4# 分詞詞彙最小長度,預設4

transaction_isolation = REPEATABLE-READ
# MySQL支援4種事務隔離級別,他們分別是:# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.# 如沒有指定,MySQL預設採用的是REPEATABLE-READ,ORACLE預設的是READ-COMMITTED

log_bin = mysql-bin
binlog_format = mixed
expire_logs_days =30#超過30天的binlog刪除

log_error =/data/mysql/mysql-error.log #錯誤日誌路徑
slow_query_log =1
long_query_time =1#慢查詢時間 超過1秒則為慢查詢
slow_query_log_file =/data/mysql/mysql-slow.log

performance_schema =0
explicit_defaults_for_timestamp

#lower_case_table_names = 1 #不區分大小寫

skip-external-locking #MySQL選項以避免外部鎖定。該選項預設開啟default-storage-engine =InnoDB#預設儲存引擎

innodb_file_per_table =1# InnoDB為獨立表空間模式,每個資料庫的每個表都會生成一個資料空間# 獨立表空間優點:# 1.每個表都有自已獨立的表空間。# 2.每個表的資料和索引都會存在自已的表空間中。# 3.可以實現單表在不同的資料庫中移動。# 4.空間可以回收(除drop table操作處,表空不能自已回收)# 缺點:# 單表增加過大,如超過100G# 結論:# 共享表空間在Insert操作上少有優勢。其它都沒獨立表空間表現好。當啟用獨立表空間時,請合理調整:innodb_open_files

innodb_open_files =500# 限制Innodb能開啟的表的資料,如果庫裡的表特別多的情況,請增加這個。這個值預設是300

innodb_buffer_pool_size =64M# InnoDB使用一個緩衝池來儲存索引和原始資料, 不像MyISAM.# 這裡你設定越大,你在存取表裡面資料時所需要的磁碟I/O越少.# 在一個獨立使用的資料庫伺服器上,你可以設定這個變數到伺服器實體記憶體大小的80%# 不要設定過大,否則,由於實體記憶體的競爭可能導致作業系統的換頁顛簸.# 注意在32位系統上你每個程式可能被限制在 2-3.5G 使用者層面記憶體限制,# 所以不要設定的太高.

innodb_write_io_threads =4
innodb_read_io_threads =4# innodb使用後臺執行緒處理資料頁上的讀寫 I/O(輸入輸出)請求,根據你的 CPU 核數來更改,預設是4# 注:這兩個引數不支援動態改變,需要把該引數加入到my.cnf裡,修改完後重啟MySQL服務,允許值的範圍從 1-64

innodb_thread_concurrency =0# 預設設定為 0,表示不限制併發數,這裡推薦設定為0,更好去發揮CPU多核處理能力,提高併發量

innodb_purge_threads =1# InnoDB中的清除操作是一類定期回收無用資料的操作。在之前的幾個版本中,清除操作是主執行緒的一部分,這意味著執行時它可能會堵塞其它的資料庫操作。# 從MySQL5.5.X版本開始,該操作執行於獨立的執行緒中,並支援更多的併發數。使用者可通過設定innodb_purge_threads配置引數來選擇清除操作是否使用單# 獨執行緒,預設情況下引數設定為0(不使用單獨執行緒),設定為 1 時表示使用單獨的清除執行緒。建議為1

innodb_flush_log_at_trx_commit =2# 0:如果innodb_flush_log_at_trx_commit的值為0,log buffer每秒就會被刷寫日誌檔案到磁碟,提交事務的時候不做任何操作(執行是由mysql的master thread執行緒來執行的。# 主執行緒中每秒會將重做日誌緩衝寫入磁碟的重做日誌檔案(REDO LOG)中。不論事務是否已經提交)預設的日誌檔案是ib_logfile0,ib_logfile1# 1:當設為預設值1的時候,每次提交事務的時候,都會將log buffer刷寫到日誌。# 2:如果設為2,每次提交事務都會寫日誌,但並不會執行刷的操作。每秒定時會刷到日誌檔案。要注意的是,並不能保證100%每秒一定都會刷到磁碟,這要取決於程式的排程。# 每次事務提交的時候將資料寫入事務日誌,而這裡的寫入僅是呼叫了檔案系統的寫入操作,而檔案系統是有 快取的,所以這個寫入並不能保證資料已經寫入到物理磁碟# 預設值1是為了保證完整的ACID。當然,你可以將這個配置項設為1以外的值來換取更高的效能,但是在系統崩潰的時候,你將會丟失1秒的資料。# 設為0的話,mysqld程式崩潰的時候,就會丟失最後1秒的事務。設為2,只有在作業系統崩潰或者斷電的時候才會丟失最後1秒的資料。InnoDB在做恢復的時候會忽略這個值。# 總結# 設為1當然是最安全的,但效能頁是最差的(相對其他兩個引數而言,但不是不能接受)。如果對資料一致性和完整性要求不高,完全可以設為2,如果只最求效能,例如高併發寫的日誌伺服器,設為0來獲得更高效能

innodb_log_buffer_size =2M# 此引數確定些日誌檔案所用的記憶體大小,以M為單位。緩衝區更大能提高效能,但意外的故障將會丟失資料。MySQL開發人員建議設定為1-8M之間

innodb_log_file_size =32M# 此引數確定資料日誌檔案的大小,更大的設定可以提高效能,但也會增加恢復故障資料庫所需的時間

innodb_log_files_in_group =3# 為提高效能,MySQL可以以迴圈方式將日誌檔案寫到多個檔案。推薦設定為3

innodb_max_dirty_pages_pct =90# innodb主執行緒重新整理快取池中的資料,使髒資料比例小於90%

innodb_lock_wait_timeout =120# InnoDB事務在被回滾之前可以等待一個鎖定的超時秒數。InnoDB在它自己的鎖定表中自動檢測事務死鎖並且回滾事務。InnoDB用LOCK TABLES語句注意到鎖定設定。預設值是50秒

bulk_insert_buffer_size =8M# 批量插入快取大小, 這個引數是針對MyISAM儲存引擎來說的。適用於在一次性插入100-1000+條記錄時, 提高效率。預設值是8M。可以針對資料量的大小,翻倍增加。

myisam_sort_buffer_size =8M# MyISAM設定恢復表之時使用的緩衝區的尺寸,當在REPAIR TABLE或用CREATE INDEX建立索引或ALTER TABLE過程中排序 MyISAM索引分配的緩衝區

myisam_max_sort_file_size =10G# 如果臨時檔案會變得超過索引,不要使用快速排序索引方法來建立一個索引。註釋:這個引數以位元組的形式給出

myisam_repair_threads =1# 如果該值大於1,在Repair by sorting過程中並行建立MyISAM表索引(每個索引在自己的執行緒內)  

interactive_timeout =28800# 伺服器關閉互動式連線前等待活動的秒數。互動式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。預設值:28800秒(8小時)

wait_timeout =28800# 伺服器關閉非互動連線之前等待活動的秒數。線上程啟動時,根據全域性wait_timeout值或全域性interactive_timeout值初始化會話wait_timeout值,# 取決於客戶端型別(由mysql_real_connect()的連線選項CLIENT_INTERACTIVE定義)。引數預設值:28800秒(8小時)# MySQL伺服器所支援的最大連線數是有上限的,因為每個連線的建立都會消耗記憶體,因此我們希望客戶端在連線到MySQL Server處理完相應的操作後,# 應該斷開連線並釋放佔用的記憶體。如果你的MySQL Server有大量的閒置連線,他們不僅會白白消耗記憶體,而且如果連線一直在累加而不斷開,# 最終肯定會達到MySQL Server的連線上限數,這會報'too many connections'的錯誤。對於wait_timeout的值設定,應該根據系統的執行情況來判斷。# 在系統執行一段時間後,可以通過show processlist命令檢視當前系統的連線狀態,如果發現有大量的sleep狀態的連線程式,則說明該引數設定的過大,# 可以進行適當的調整小些。要同時設定interactive_timeout和wait_timeout才會生效。[mysqldump]
quick
max_allowed_packet =16M#伺服器傳送和接受的最大包長度[myisamchk]
key_buffer_size =8M
sort_buffer_size =8M
read_buffer =4M
write_buffer =4M
  1. MySQL 5.5.13  
  2. 引數說明:  
  3. [client]  
  4. character-set-server = utf8  
  5. port = 3306  
  6. socket = /data/mysql/3306/mysql.sock  
  7. [mysqld]  
  8. character-set-server = utf8  
  9. user = mysql  
  10. port = 3306  
  11. socket = /data/mysql/3306/mysql.sock  
  12. basedir = /usr/local/webserver/mysql  
  13. datadir = /data/mysql/3306/data  
  14. log-error = /data/mysql/3306/mysql_error.log  
  15. pid-file = /data/mysql/3306/mysql.pid  
  16. # table_cache 引數設定表快取記憶體的數目。每個連線進來,都會至少開啟一個表快取。#因此, table_cache 的大小應與 max_connections 的設定有關。例如,對於 200 個#並行執行的連線,應該讓表的快取至少有 200 × N ,這裡 N 是應用可以執行的查詢#的一個聯接中表的最大數量。此外,還需要為臨時表和檔案保留一些額外的檔案描述符。  
  17. #當 Mysql 訪問一個表時,如果該表在快取中已經被開啟,則可以直接訪問快取;如果#還沒有被快取,但是在 Mysql 表緩衝區中還有空間,那麼這個表就被開啟並放入表緩#衝區;如果表快取滿了,則會按照一定的規則將當前未用的表釋放,或者臨時擴大表快取來存放,使用表快取的好處是可以更快速地訪問表中的內容。執行 flush tables 會#清空快取的內容。一般來說,可以通過檢視資料庫執行峰值時間的狀態值 Open_tables #和 Opened_tables ,判斷是否需要增加 table_cache 的值(其中 open_tables 是當#前開啟的表的數量, Opened_tables 則是已經開啟的表的數量)。即如果open_tables接近table_cache的時候,並且Opened_tables這個值在逐步增加,那就要考慮增加這個#值的大小了。還有就是Table_locks_waited比較高的時候,也需要增加table_cache。  
  18. open_files_limit = 10240  
  19. table_cache = 512  
  20. #非動態變數,需要重啟服務  
  21. #指定MySQL可能的連線數量。當MySQL主執行緒在很短的時間內接收到非常多的連線請求,該引數生效,主執行緒花費很短的時間檢查連線並且啟動一個新執行緒。back_log引數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆疊中。如果系統在一個短時間內有很多連線,則需要增大該引數的值,該引數值指定到來的TCP/IP連線的偵聽佇列的大小。不同的作業系統在這個佇列大小上有它自己的限制。試圖設定back_log高於你的作業系統的限制將是無效的。預設值為50。對於Linux系統推薦設定為小於512的整數。  
  22. back_log = 600  
  23. #MySQL允許最大連線數  
  24. max_connections = 5000  
  25. #可以允許多少個錯誤連線  
  26. max_connect_errors = 6000  
  27. #使用–skip-external-locking MySQL選項以避免外部鎖定。該選項預設開啟  
  28. external-locking = FALSE  
  29. #設定最大包,限制server接受的資料包大小,避免超長SQL的執行有問題預設值為16M,當MySQL客戶端或mysqld伺服器收到大於max_allowed_packet位元組的資訊包時,將發出“資訊包過大”錯誤,並關閉連線。對於某些客戶端,如果通訊資訊包過大,在執行查詢期間,可能會遇到“丟失與MySQL伺服器的連線”錯誤。預設值16M。  
  30. #dev-doc: http://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html  
  31. max_allowed_packet = 32M  
  32. # Sort_Buffer_Size 是一個connection級引數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設定的記憶體。  
  33. #Sort_Buffer_Size 並不是越大越好,由於是connection級的引數,過大的設定+高併發可能會耗盡系統記憶體資源。例如:500個連線將會消耗 500*sort_buffer_size(8M)=4G記憶體  
  34. #Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行記憶體分配,導致效率降低。  
  35. #技術導讀 http://blog.webshuo.com/2011/02/16/mysql-sort_buffer_size/  
  36. #dev-doc: http://dev.mysql.com/doc/refman/5.5/en/server-parameters.html  
  37. #explain select*from table where order limit;出現filesort  
  38. #屬重點優化引數  
  39. sort_buffer_size = 8M  
  40. #用於表間關聯快取的大小  
  41. join_buffer_size = 1M  
  42. #伺服器執行緒快取這個值表示可以重新利用儲存在快取中執行緒的數量,當斷開連線時如果快取中還有空間,那麼客戶端的執行緒將被放到快取中,如果執行緒重新被請求,那麼請求將從快取中讀取,如果快取中是空的或者是新的請求,那麼這個執行緒將被重新建立,如果有很多新的執行緒,增加這個值可以改善系統效能.通過比較 Connections 和 Threads_created 狀態的變數,可以看到這個變數的作用  
  43. thread_cache_size = 300  
  44. #設定thread_concurrency的值的正確與否, 對mysql的效能影響很大, 在多個cpu(或多核)的情況下,錯誤設定了thread_concurrency的值, 會導致mysql不能充分利用多cpu(或多核), 出現同一時刻只能一個cpu(或核)在工作的情況。thread_concurrency應設為CPU核數的2倍. 比如有一個雙核的CPU, 那麼thread_concurrency的應該為42個雙核的cpu, thread_concurrency的值應為8  
  45. #屬重點優化引數  
  46. thread_concurrency = 8  
  47. #對於使用MySQL的使用者,對於這個變數大家一定不會陌生。前幾年的MyISAM引擎優化中,這個引數也是一個重要的優化引數。但隨著發展,這個引數也爆露出來一些問題。機器的記憶體越來越大,人們也都習慣性的把以前有用的引數分配的值越來越大。這個引數加大後也引發了一系列問題。我們首先分析一下query_cache_size的工作原理:一個SELECT查詢在DB中工作後,DB會把該語句快取下來,當同樣的一個SQL再次來到DB裡呼叫時,DB在該表沒發生變化的情況下把結果從快取中返回給Client。這裡有一個關建點,就是DB在利用Query_cache工作時,要求該語句涉及的表在這段時間內沒有發生變更。那如果該表在發生變更時,Query_cache裡的資料又怎麼處理呢?首先要把Query_cache和該表相關的語句全部置為失效,然後在寫入更新。那麼如果Query_cache非常大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎麼這麼慢了。所以在資料庫寫入量或是更新量也比較大的系統,該引數不適合分配過大。而且在高併發,寫入量大的系統,建系把該功能禁掉。  
  48. #重點優化引數(主庫 增刪改-MyISAM)  
  49. query_cache_size = 512M  
  50. #指定單個查詢能夠使用的緩衝區大小,預設為1M  
  51. query_cache_limit = 2M  
  52. #預設是4KB,設定值大對大資料查詢有好處,但如果你的查詢都是小資料查詢,就容易造成記憶體碎片和浪費  
  53. #查詢快取碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%  
  54. #如果查詢快取碎片率超過20%,可以用FLUSH QUERY CACHE整理快取碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小資料量的話。  
  55. #查詢快取利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%  
  56. #查詢快取利用率在25%以下的話說明query_cache_size設定的過大,可適當減小;查詢快取利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。  
  57. #查詢快取命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%  
  58. query_cache_min_res_unit = 2k  
  59. default-storage-engine = MyISAM  
  60. #限定用於每個資料庫執行緒的棧大小。預設設定足以滿足大多數應用  
  61. thread_stack = 192K  
  62. # 設定預設的事務隔離級別.可用的級別如下:  
  63. # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE  
  64. 1.READ UNCOMMITTED-讀未提交2.READ COMMITTE-讀已提交3.REPEATABLE READ -可重複讀4.SERIALIZABLE -序列  
  65. transaction_isolation = READ-COMMITTED  
  66. # tmp_table_size 的預設大小是 32M。如果一張臨時表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,如果你做很多高階 GROUP BY 查詢,增加 tmp_table_size 值。  
  67. tmp_table_size = 246M  
  68. max_heap_table_size = 246M  
  69. #索引快取大小: 它決定了資料庫索引處理的速度,尤其是索引讀的速度  
  70. key_buffer_size = 512M  
  71. # MySql讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySql會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。如果對錶的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其效能。  
  72. read_buffer_size = 4M  
  73. # MySql的隨機讀(查詢操作)緩衝區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀快取區。進行排序查詢時,MySql會首先掃描一遍該緩衝,以避免磁碟搜尋,提高查詢速度,如果需要排序大量資料,可適當調高該值。但MySql會為每個客戶連線發放該緩衝空間,所以應儘量適當設定該值,以避免記憶體開銷過大。  
  74. read_rnd_buffer_size = 16M  
  75. #批量插入資料快取大小,可以有效提高插入效率,預設為8M  
  76. bulk_insert_buffer_size = 64M  
  77. # MyISAM表發生變化時重新排序所需的緩衝  
  78. myisam_sort_buffer_size = 128M  
  79. # MySQL重建索引時所允許的最大臨時檔案的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).  
  80. # 如果檔案大小比此值更大,索引會通過鍵值緩衝建立(更慢)  
  81. myisam_max_sort_file_size = 10G  
  82. # 如果一個表擁有超過一個索引, MyISAM 可以通過並行排序使用超過一個執行緒去修復他們.  
  83. # 這對於擁有多個CPU以及大量記憶體情況的使用者,是一個很好的選擇.  
  84. myisam_repair_threads = 1  
  85. #自動檢查和修復沒有適當關閉的 MyISAM 表  
  86. myisam_recover  
  87. interactive_timeout = 120  
  88. wait_timeout = 120  
  89. innodb_data_home_dir = /data/mysql/3306/data  
  90. #表空間檔案 重要資料  
  91. innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend  
  92. #這個引數用來設定 InnoDB 儲存的資料目錄資訊和其它內部資料結構的記憶體池大小,類似於Oracle的library cache。這不是一個強制引數,可以被突破。  
  93. innodb_additional_mem_pool_size = 16M  
  94. #這對Innodb表來說非常重要。Innodb相比MyISAM表對緩衝更為敏感。MyISAM可以在預設的 key_buffer_size 設定下執行的可以,然而Innodb在預設的 innodb_buffer_pool_size 設定下卻跟蝸牛似的。由於Innodb把資料和索引都快取起來,無需留給作業系統太多的記憶體,因此如果只需要用Innodb的話則可以設定它高達 70-80% 的可用記憶體。一些應用於 key_buffer 的規則有 — 如果你的資料量不大,並且不會暴增,那麼無需把 innodb_buffer_pool_size 設定的太大了  
  95. innodb_buffer_pool_size = 512M  
  96. #檔案IO的執行緒數,一般為 4,但是在 Windows 下,可以設定得較大。  
  97. innodb_file_io_threads = 4  
  98. # 在InnoDb核心內的允許執行緒數量.  
  99. # 最優值依賴於應用程式,硬體以及作業系統的排程方式.  
  100. # 過高的值可能導致執行緒的互斥顛簸.  
  101. innodb_thread_concurrency = 8  
  102. #如果將此引數設定為1,將在每次提交事務後將日誌寫入磁碟。為提供效能,可以設定為02,但要承擔在發生故障時丟失資料的風險。設定為0表示事務日誌寫入日誌檔案,而日誌檔案每秒重新整理到磁碟一次。設定為2表示事務日誌將在提交時寫入日誌,但日誌檔案每次重新整理到磁碟一次。  
  103. innodb_flush_log_at_trx_commit = 2  
  104. #此引數確定些日誌檔案所用的記憶體大小,以M為單位。緩衝區更大能提高效能,但意外的故障將會丟失資料.MySQL開發人員建議設定為1-8M之間  
  105. innodb_log_buffer_size = 16M  
  106. #此引數確定資料日誌檔案的大小,以M為單位,更大的設定可以提高效能,但也會增加恢復故障資料庫所需的時間  
  107. innodb_log_file_size = 128M  
  108. #為提高效能,MySQL可以以迴圈方式將日誌檔案寫到多個檔案。推薦設定為3M  
  109. innodb_log_files_in_group = 3  
  110. #推薦閱讀 http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html  
  111. # Buffer_Pool中Dirty_Page所佔的數量,直接影響InnoDB的關閉時間。引數innodb_max_dirty_pages_pct可以直接控制了Dirty_Page在Buffer_Pool中所佔的比率,而且幸運的是innodb_max_dirty_pages_pct是可以動態改變的。所以,在關閉InnoDB之前先將innodb_max_dirty_pages_pct調小,強制資料塊Flush一段時間,則能夠大大縮短MySQL關閉的時間。  
  112. innodb_max_dirty_pages_pct = 90  
  113. # InnoDB 有其內建的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別死鎖。為消除這種可能性,可以將innodb_lock_wait_timeout設定為一個整數值,指示 MySQL在允許其他事務修改那些最終受事務回滾的資料之前要等待多長時間(秒數)  
  114. innodb_lock_wait_timeout = 120  
  115. #獨享表空間(關閉)  
  116. innodb_file_per_table = 0  
  117. #start mysqld with –slow-query-log-file=/data/mysql/3306/slow.log  
  118. slow_query_log  
  119. long_query_time = 1  
  120. replicate-ignore-db = mysql  
  121. replicate-ignore-db = test  
  122. replicate-ignore-db = information_schema  
  123. #配置從庫上的更新操作是否寫二進位制檔案,如果這臺從庫,還要做其他從庫的主庫,那麼就需要打這個引數,以便從庫的從庫能夠進行日誌同步這個引數要和—logs-bin一起使用  
  124. log-slave-updates  
  125. log-bin = /data/mysql/3306/binlog/binlog  
  126. binlog_cache_size = 4M  
  127. #STATEMENT,ROW,MIXED  
  128. #基於SQL語句的複製(statement-based replication, SBR),基於行的複製(row-based replication, RBR),混合模式複製(mixed-based replication, MBR)。相應地,binlog的格式也有三種:STATEMENT,ROW,MIXED。  
  129. binlog_format = MIXED  
  130. max_binlog_cache_size = 64M  
  131. max_binlog_size = 1G  
  132. relay-log-index = /data/mysql/3306/relaylog/relaylog  
  133. relay-log-info-file = /data/mysql/3306/relaylog/relaylog  
  134. relay-log = /data/mysql/3306/relaylog/relaylog  
  135. expire_logs_days = 30  
  136. skip-name-resolve  
  137. #master-connect-retry = 10  
  138. slave-skip-errors = 1032,1062,126,1114,1146,1048,1396  
  139. server-id = 1  
  140. [mysqldump]  
  141. quick  
  142. max_allowed_packet = 32M  
  143. [myisamchk]  
  144. key_buffer_size = 256M  
  145. sort_buffer_size = 256M  
  146. read_buffer = 2M  
  147. write_buffer = 2M  
  148. [mysqlhotcopy]  
  149. interactive-timeout  

相關文章