MySQL之cnf文件

MySQL之cnf文件

本文詳細(xì)解讀了mysql數(shù)據(jù)庫(kù)cnf文件中的配置參數(shù),讓你能夠在眾多的設(shè)置中根據(jù)自己的需要調(diào)整適合mysql性能的最好配置。
MySQL之cnf文件

1.  [client]   
     default-character-set=utf8
2.  port = 3309  
3.  socket = /home/mysql/mysql/tmp/mysql.sock   
4.  [mysqld]   
     character_set_server=utf8
5.  !include /home/mysql/mysql/etc/mysqld.cnf 
 
#包含的配置文件 ,把用戶(hù)名,密碼文件單獨(dú)存放

6.  port = 3309  
7.  socket = /home/mysql/mysql/tmp/mysql.sock   
8.  pid-file = /longxibendi/mysql/mysql/var/mysql.pid   
9.  basedir = /home/mysql/mysql/   
10. datadir = /longxibendi/mysql/mysql/var/   
11. # tmp dir settings   
 
12 #  此目錄被 MySQL 用來(lái)保存臨時(shí) 文件.例如, 
#  它被用來(lái)處理基于磁盤(pán)的大型排序,和內(nèi)部排序一樣. 
#  以及簡(jiǎn)單的臨時(shí)表. 
#  如果你不創(chuàng)建非常大的臨時(shí)文件,將其放置到  swapfs/tmpfs  文件系統(tǒng)上也許比較好 
#  另一種選擇是你也可以將其放置在獨(dú)立的磁盤(pán)上. 
#  你可以使用”;”來(lái)放置多個(gè)路徑 
#  他們會(huì)按照 roud-robin 方法被輪詢(xún)使用. 


13. tmpdir = /home/mysql/mysql/tmp/   
14. slave-load-tmpdir = /home/mysql/mysql/tmp/  
 
 15. #當(dāng) slave 執(zhí)行 load data infile 時(shí)用   
16. #language = /home/mysql/mysql/share/mysql/english/   
17. character-sets-dir = /home/mysql/mysql/share/mysql/charsets/   
18. # skip options  
19. skip-name-resolve #grant 時(shí),必須使用 ip 不能使用主機(jī)名  
 

20. #禁止 MySQL 對(duì)外部連接進(jìn)行 DNS 解析,使用這一選項(xiàng)可以消除 MySQL 進(jìn)行 DNS 解析的時(shí)間。但需要注意,如果開(kāi)啟該選項(xiàng),則所有遠(yuǎn)程主機(jī)連接授權(quán)都要使用 IP 地址方式,否則 MySQL 將無(wú)法正常處理連接請(qǐng)求!  
21. skip-symbolic-links #不能使用連接文件   
 
22. skip-external-locking #不使用系統(tǒng)鎖定,要使用 myisamchk,必須關(guān)閉服務(wù)器 ,避免 MySQL的外部鎖定,減少出錯(cuò)幾率增強(qiáng)穩(wěn)定性。 
23. #多個(gè)客戶(hù)可能會(huì)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù),因此這防止外部客戶(hù)鎖定 MySQL 服務(wù)器。該選項(xiàng)默認(rèn)開(kāi)啟  
24. skip-slave-start #啟動(dòng) mysql,不啟動(dòng)復(fù)制   
 
25. #開(kāi)啟該選項(xiàng)可以徹底關(guān)閉 MySQL 的 TCP/IP 連接方式,如果 WEB 服務(wù)器是以遠(yuǎn)程連接的方式訪問(wèn) MySQL 數(shù)據(jù)庫(kù)服務(wù)器則不要開(kāi)啟該選項(xiàng)!否則將無(wú)法正常連接!如果所有的進(jìn)程都是在同一臺(tái)服務(wù)器連接到本地的 mysqld,  這樣設(shè)置將是增強(qiáng)安全的方法 
26. skip-networking  
27. #sysdate-is-now 
 
28. # res settings   
29. #指定 MySQL 可能的連接數(shù)量。當(dāng) MySQL 主線程在很短的時(shí)間內(nèi)接收到非常多的連接請(qǐng)求,該參數(shù)生效,主線程花費(fèi)很短的時(shí)間檢查連接并且啟動(dòng)一個(gè)新線程。 如果你有非常高的連接率并且出現(xiàn)”connection refused” 報(bào)錯(cuò),你就應(yīng)該增加此處的值. back_log 參數(shù)的值指出在 MySQL 暫時(shí)停止響應(yīng)新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。如果系統(tǒng)在一個(gè)短時(shí)間內(nèi)有很多連接,則需要增大該參數(shù)的值,該參數(shù)值指定到來(lái)的 TCP/IP 連接的偵聽(tīng)隊(duì)列的大小。不同的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。  試圖設(shè)定 back_log 高于你的操作系統(tǒng)的限制將是無(wú)效的。默認(rèn)值為 50。對(duì)于 Linux 系統(tǒng)推薦設(shè)置為小于 512 的整數(shù)。  
30. back_log = 50 #接受隊(duì)列,對(duì)于沒(méi)建立 tcp 連接的請(qǐng)求隊(duì)列放入緩存中,隊(duì)列大小為 back_log,受限制于 OS 參數(shù)   
 
31. #指定 MySQL 允許的最大連接進(jìn)程數(shù)。如果在訪問(wèn)數(shù)據(jù)庫(kù)時(shí)經(jīng)常出現(xiàn) Too Many Connections 的錯(cuò)誤提  示,則需要增大該參數(shù)值。  
32. max_connections = 1000 #最大并發(fā)連接數(shù) ,增大該值需要相應(yīng)增加允許打開(kāi)的文件描述符數(shù)   
33. max_connect_errors = 10000 #如果某個(gè)用戶(hù)發(fā)起的連接 error 超過(guò)該數(shù)值,則該用戶(hù)的下次連接將被阻塞,直到管理員執(zhí)行 flush hosts ; 命令或者服務(wù)重啟,防止黑客 ,非法的密碼以及其他在鏈接時(shí)的錯(cuò)誤會(huì)增加此值 
 
34. #open_files_limit = 10240  
35. connect-timeout = 10 #連接超時(shí)之前的最大秒數(shù),在 Linux 平臺(tái)上,該超時(shí)也用作等待服務(wù)器首次回應(yīng)的時(shí)間   
36. #指定一個(gè)請(qǐng)求的最大連接時(shí)間,對(duì)于 4GB 左右內(nèi)存的服務(wù)器可以設(shè)置為 5-10。  
37. wait-timeout = 28800 #等待關(guān)閉連接的時(shí)間   
 
38. interactive-timeout = 28800 #關(guān)閉連接之前,允許 interactive_timeout(取代了wait_timeout)秒的不活動(dòng)時(shí)間??蛻?hù)端的會(huì)話 wait_timeout 變量被設(shè)為會(huì)話interactive_timeout 變量的值。   
39. slave-net-timeout = 600 #從服務(wù)器也能夠處理網(wǎng)絡(luò)連接中斷。但是,只有從服務(wù)器超過(guò)slave_net_timeout 秒沒(méi)有從主服務(wù)器收到數(shù)據(jù)才通知網(wǎng)絡(luò)中斷   
40. net_read_timeout = 30 #從服務(wù)器讀取信息的超時(shí)   
41. net_write_timeout = 60 #從服務(wù)器寫(xiě)入信息的超時(shí)   
42. net_retry_count = 10 #如果某個(gè)通信端口的讀操作中斷了,在放棄前重試多次   
43. net_buffer_length = 16384 #包消息緩沖區(qū)初始化為 net_buffer_length 字節(jié),但需要時(shí)可以增長(zhǎng)到 max_allowed_packet 字節(jié)   
 
44. #  服務(wù)所能處理的請(qǐng)求包的最大大小以及服務(wù)所能處理的最大的請(qǐng)求大小(當(dāng)與大的BLOB 字段一起工作時(shí)相當(dāng)必要),  每個(gè)連接獨(dú)立的大小.大小動(dòng)態(tài)增加。 設(shè)置最大包,限制 server 接受的數(shù)據(jù)包大小,避免超長(zhǎng) SQL 的執(zhí)行有問(wèn)題 默認(rèn)值為 16M,當(dāng) MySQL 客戶(hù)端或 mysqld服務(wù)器收到大于 max_allowed_packet 字節(jié)的信息包時(shí),將發(fā)出“信息包過(guò)大”錯(cuò)誤,并關(guān)閉連接。對(duì)于某些客戶(hù)端,如果通信信息包過(guò)大,在執(zhí)行查詢(xún)期間,可能會(huì)遇到“丟失與 MySQL 服務(wù)器的連接”錯(cuò)誤。默認(rèn)值 16M。 
45. max_allowed_packet = 64M #   
46.  #  所有線程所打開(kāi)表的數(shù)量.  增加此值就增加了 mysqld 所需要的文件描述符的數(shù)量這樣你需要確認(rèn)在[mysqld_safe]中  “open-files-limit”  變量設(shè)置打開(kāi)文件數(shù)量允許至少4096
 

47. #table_cache = 512 #所有線程打開(kāi)的表的數(shù)目。增大該值可以增加 mysqld 需要的文件描述符的數(shù)量   
48. # 線程使用的堆大小. 此容量的內(nèi)存在每次連接時(shí)被預(yù)留. 
# MySQL 本身常不會(huì)需要超過(guò) 64K 的內(nèi)存 
# 如果你使用你自己的需要大量堆的 UDF 函數(shù) 
# 或者你的操作系統(tǒng)對(duì)于某些操作需要更多的堆, 
# 你也許需要將其設(shè)置的更高一點(diǎn).默認(rèn)設(shè)置足以滿(mǎn)足大多數(shù)應(yīng)用 
49. thread_stack = 192K #每個(gè)線程的堆棧大小  
 
50. # 我們?cè)?cache 中保留多少線程用于重用 
# 當(dāng)一個(gè)客戶(hù)端斷開(kāi)連接后,如果 cache 中的線程還少于 thread_cache_size, # 則客戶(hù)端線程被放入 cache 中. 
# 這可以在你需要大量新連接的時(shí)候極大的減少線程創(chuàng)建的開(kāi)銷(xiāo) 
# (一般來(lái)說(shuō)如果你有好的線程模型的話,這不會(huì)有明顯的性能提升.)  
51. # 服務(wù)器線程緩存這個(gè)值表示可以重新利用保存在緩存中線程的數(shù)量,當(dāng)斷開(kāi)連接時(shí)如果緩存中還有空間,那么客戶(hù)端的線程將被放到緩存中,如果線程重新被請(qǐng)求,那么請(qǐng)求將從緩存中讀取,如果緩存中是空的或者是新的請(qǐng)求,那么這個(gè)線程將被重新創(chuàng)建,如果有很多新的線程,增加這個(gè)值可以改善系統(tǒng)性能.通過(guò)比較 Connections 和 Threads_created 狀態(tài)的變量,可以看到這個(gè)變量的作用 
52. thread_cache_size = 20 #線程緩存   
53. #此允許應(yīng)用程序給予線程系統(tǒng)一個(gè)提示在同一時(shí)間給予渴望被運(yùn)行的線程的數(shù)量.該參數(shù)取值為服務(wù)器邏輯 CPU 數(shù)量×2,在本例中,服務(wù)器有 2 顆物理 CPU,而每顆物理CPU 又支持 H.T 超線程,所以實(shí)際取值為 4 × 2  =  8  
 
54. # 設(shè)置 thread_concurrency 的值的正確與否, 對(duì) mysql 的性能影響很大, 在多個(gè) cpu(或多核)的情況下,錯(cuò)誤設(shè)置了 thread_concurrency 的值, 會(huì)導(dǎo)致 mysql 不能充分利用多 cpu(或多核), 出現(xiàn)同一時(shí)刻只能一個(gè) cpu(或核)在工作的情況。thread_concurrency 應(yīng)設(shè)為 CPU 核數(shù)的 2 倍. 比如有一個(gè)雙核的 CPU, 那么 thread_concurrency 的應(yīng)該為 4; 2 個(gè)雙核的 cpu, 
thread_concurrency 的值應(yīng)為 8 
#屬重點(diǎn)優(yōu)化參數(shù) 
55. thread_concurrency = 8 #同時(shí)運(yùn)行的線程的數(shù)據(jù) 此處最好為 CPU 個(gè)數(shù)兩倍。本機(jī)配置為 CPU的個(gè)數(shù)   
 
56. # qcache settings   
57. # 查詢(xún)緩沖常被用來(lái)緩沖 SELECT 的結(jié)果并且在下一次同樣查詢(xún)的時(shí)候不再執(zhí)行直接返回結(jié)果. 
# 打開(kāi)查詢(xún)緩沖可以極大的提高服務(wù)器速度, 如果你有大量的相同的查詢(xún)并且很少修改表. 
# 查看 “Qcache_lowmem_prunes” 狀態(tài)變量來(lái)檢查是否當(dāng)前值對(duì)于你的負(fù)載來(lái)說(shuō)是否足夠高. 
# 注意: 在你表經(jīng)常變化的情況下或者如果你的查詢(xún)?cè)拿看味疾煌? 
# 查詢(xún)緩沖也許引起性能下降而不是性能提升 
58. # 對(duì)于使用 MySQL 的用戶(hù),對(duì)于這個(gè)變量大家一定不會(huì)陌生。前幾年的 MyISAM 引擎優(yōu)化中,這個(gè)參數(shù)也是一個(gè)重要的優(yōu)化參數(shù)。但隨著發(fā)展,這個(gè)參數(shù)也爆露出來(lái)一些問(wèn)題。機(jī)器的內(nèi)存越來(lái)越大,人們也都習(xí)慣性的把以前有用的參數(shù)分配的值越來(lái)越大。這個(gè)參數(shù)加大后也引發(fā)了一系列問(wèn)題。我們首先分析一下 query_cache_size 的工作原理:一個(gè) SELECT 查詢(xún)?cè)?DB 中工作后,DB 會(huì)把該語(yǔ)句緩存下來(lái),當(dāng)同樣的一個(gè) SQL 再次來(lái)到 DB 里調(diào)用時(shí),DB 在該表沒(méi)發(fā)生變化的情況下把結(jié)果從緩存中返
回給 Client。這里有一個(gè)關(guān)建點(diǎn),就是 DB 在利用 Query_cache 工作時(shí),要求該語(yǔ)句涉及的表在這段時(shí)間內(nèi)沒(méi)有發(fā)生變更。那如果該表在發(fā)生變更時(shí),Query_cache 里的數(shù)據(jù)又怎么處理呢?首先要把Query_cache 和該表相關(guān)的語(yǔ)句全部置為失效,然后在寫(xiě)入更新。那么如果 Query_cache 非常大,該表的查詢(xún)結(jié)構(gòu)又比較多,查詢(xún)語(yǔ)句失效也慢,一個(gè)更新或是 Insert 就會(huì)很慢,這樣看到的就是Update 或是 Insert 怎么這么慢了。所以在數(shù)據(jù)庫(kù)寫(xiě)入量或是更新量也比較大的系統(tǒng),該參數(shù)不適合分配過(guò)大。而且在高并發(fā),寫(xiě)入量大的系統(tǒng),建系把該功能禁掉。 
#重點(diǎn)優(yōu)化參數(shù)(主庫(kù) 增刪改-MyISAM) 
59. query_cache_size = 256M #查詢(xún)緩存大小   
60. #  只有小于此設(shè)定值的結(jié)果才會(huì)被緩沖 
#  此設(shè)置用來(lái)保護(hù)查詢(xún)緩沖,防止一個(gè)極大的結(jié)果集將其他所有的查詢(xún)結(jié)果都覆蓋. 
 
61. query_cache_limit = 2M #不緩存查詢(xún)大于該值的結(jié)果  
62. #默認(rèn)是 4KB,設(shè)置值大對(duì)大數(shù)據(jù)查詢(xún)有好處,但如果你的查詢(xún)都是小數(shù)據(jù)查詢(xún),就容易造成內(nèi)存碎片和浪費(fèi) 
#查詢(xún)緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100% 
#如果查詢(xún)緩存碎片率超過(guò) 20%,可以用 FLUSH QUERY CACHE 整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢(xún)都是小數(shù)據(jù)量的話。 
#查詢(xún)緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100% 
#查詢(xún)緩存利用率在 25%以下的話說(shuō)明 query_cache_size 設(shè)置的過(guò)大,可適當(dāng)減小;查詢(xún)緩存利用率在 80%以上而且 Qcache_lowmem_prunes   50 的話說(shuō)明 query_cache_size 可能有點(diǎn)小,要不就是碎片太多。 
#查詢(xún)緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%  
63. query_cache_min_res_unit = 2K #查詢(xún)緩存分配的最小塊大小   
64. # 如果你的系統(tǒng)支持 memlock() 函數(shù),你也許希望打開(kāi)此選項(xiàng)用以讓運(yùn)行中的 mysql 在在內(nèi)存高度緊張的時(shí)候,數(shù)據(jù)在內(nèi)存中保持鎖定并且防止可能被 swapping out 
# 此選項(xiàng)對(duì)于性能有益 
65. #memlock 
 
66. # default settings   
67. # 當(dāng)創(chuàng)建新表時(shí)作為默認(rèn)使用的表類(lèi)型, 
# 如果在創(chuàng)建表示沒(méi)有特別執(zhí)行表類(lèi)型,將會(huì)使用此值 
68. default_table_type = MYISAM 
69. # time zone   
70. default-time-zone = system #服務(wù)器時(shí)區(qū)   
71. character-set-server = utf8 #server 級(jí)別字符集   
72. default-storage-engine = InnoDB #默認(rèn)存儲(chǔ)   
73. # tmp & heap  
74. # 內(nèi)部(內(nèi)存中)臨時(shí)表的最大大小 
# 如果一個(gè)表增長(zhǎng)到比此值更大,將會(huì)自動(dòng)轉(zhuǎn)換為基于磁盤(pán)的表. 
# 此限制是針對(duì)單個(gè)表的,而不是總和. 
75. tmp_table_size = 512M #臨時(shí)表大小,如果超過(guò)該值,則結(jié)果放到磁盤(pán)中   
76. #  獨(dú)立的內(nèi)存表所允許的最大容量. 
#  此選項(xiàng)為了防止意外創(chuàng)建一個(gè)超大的內(nèi)存表導(dǎo)致永盡所有的內(nèi)存資源. 
77. max_heap_table_size = 512M #該變量設(shè)置 MEMORY (HEAP 堆)表可以增長(zhǎng)到的最大空間大小   
 

78. # 打開(kāi)二進(jìn)制日志功能. 
# 在復(fù)制(replication)配置中,作為 MASTER 主服務(wù)器必須打開(kāi)此項(xiàng) 
# 如果你需要從你最后的備份中做基于時(shí)間點(diǎn)的恢復(fù),你也同樣需要二進(jìn)制日志. 
79. log-bin = mysql-bin #這些路徑相對(duì)于 datadir
 80. #  如果你在使用鏈?zhǔn)綇姆?wù)器結(jié)構(gòu)的復(fù)制模式  (A- B- C), 
#  你需要在服務(wù)器 B 上打開(kāi)此項(xiàng). 
#  此選項(xiàng)打開(kāi)在從線程上重做過(guò)的更新的日志, 
#  并將其寫(xiě)入從服務(wù)器的二進(jìn)制日志. 
 

81. log_slave_updates 
82. log-bin-index = mysql-bin.index   
83. relay-log = relay-log   
84. relay_log_index = relay-log.index   
85. #  打開(kāi)全查詢(xún)?nèi)罩?  所有的由服務(wù)器接收到的查詢(xún)  (甚至對(duì)于一個(gè)錯(cuò)誤語(yǔ)法的查詢(xún)) 
#  都會(huì)被記錄下來(lái).  這對(duì)于調(diào)試非常有用,  在生產(chǎn)環(huán)境中常常關(guān)閉此項(xiàng). 
86. log 
87. # warning & error log   
88. #  將警告打印輸出到錯(cuò)誤 log 文件.  如果你對(duì)于 MySQL 有任何問(wèn)題 
#  你應(yīng)該打開(kāi)警告 log 并且仔細(xì)審查錯(cuò)誤日志,查出可能的原因. 
89. log-warnings = 1  
90. log-error = /home/mysql/mysql/log/mysql.err   
91. log_output = FILE #參數(shù) log_output 指定了慢查詢(xún)輸出的格式,默認(rèn)為 FILE,你可以將它設(shè)為 TABLE,然后就可以查詢(xún) mysql 架構(gòu)下的 slow_log 表了   
92. #  記錄慢速查詢(xún).  慢速查詢(xún)是指消耗了比  “l(fā)ong_query_time”  定義的更多時(shí)間的查詢(xún). 
#  如果  log_long_format  被打開(kāi),那些沒(méi)有使用索引的查詢(xún)也會(huì)被記錄. 
#  如果你經(jīng)常增加新查詢(xún)到已有的系統(tǒng)內(nèi)的話.  一般來(lái)說(shuō)這是一個(gè)好主意, 
93. log_slow_queries 
94. # slow query log   
95. slow_query_log = 1  
96. #  所有的使用了比這個(gè)時(shí)間(以秒為單位)更多的查詢(xún)會(huì)被認(rèn)為是慢速查詢(xún). 
#  不要在這里使用”1″,  否則會(huì)導(dǎo)致所有的查詢(xún),甚至非??斓牟樵?xún)頁(yè)被記錄下來(lái)(由于MySQL  目前時(shí)間的精確度只能達(dá)到秒的級(jí)別). 
 
97. long-query-time = 1 #慢查詢(xún)時(shí)間 超過(guò) 1 秒則為慢查詢(xún)   
98. #  在慢速日志中記錄更多的信息. 
#  一般此項(xiàng)最好打開(kāi). 
#  打開(kāi)此項(xiàng)會(huì)記錄使得那些沒(méi)有使用索引的查詢(xún)也被作為到慢速查詢(xún)附加到慢速日志里 
99. log_long_format 
100. slow_query_log_file = /home/mysql/mysql/log/slow.log   
101. #log-queries-not-using-indexes   
102. #log-slow-slave-statements   
103. general_log = 1  
104. general_log_file = /home/mysql/mysql/log/mysql.log   
105. max_binlog_size = 1G  
106. max_relay_log_size = 1G  
107. # if use auto-ex, set to 0   
108. relay-log-purge = 1 #當(dāng)不用中繼日志時(shí),刪除他們。這個(gè)操作有 SQL 線程完成   
 
109. # max binlog keeps days   
110. expire_logs_days = 30 #超過(guò) 30 天的 binlog 刪除
 
111. #  在一個(gè)事務(wù)中 binlog 為了記錄 SQL 狀態(tài)所持有的 cache 大小 
#  如果你經(jīng)常使用大的,多聲明的事務(wù),你可以增加此值來(lái)獲取更大的性能. 
#  所有從事務(wù)來(lái)的狀態(tài)都將被緩沖在 binlog 緩沖中然后在提交后一次性寫(xiě)入到 binlog 中 
#  如果事務(wù)比此值大,  會(huì)使用磁盤(pán)上的臨時(shí)文件來(lái)替代. 
#  此緩沖在每個(gè)連接的事務(wù)第一次更新?tīng)顟B(tài)時(shí)被創(chuàng)建 
112. binlog_cache_size = 1M #session 級(jí)別   
113. # replication   
114. replicate-wild-ignore-table = mysql.% #復(fù)制時(shí)忽略數(shù)據(jù)庫(kù)及表   
115. replicate-wild-ignore-table = test.% #復(fù)制時(shí)忽略數(shù)據(jù)庫(kù)及表   
116. # slave_skip_errors=all  
 
117. #*** MyISAM  相關(guān)選項(xiàng) 
118. # key_buffer_size 指定用于索引的緩沖區(qū)大小,增加它可得到更好的索引處理性能。  對(duì)于內(nèi)存在 4GB 左右的服務(wù)器該參數(shù)可設(shè)置為 256M 或 384M。  注意:該參數(shù)值設(shè)置的過(guò)大反而會(huì)是服務(wù)器整體效率降低! 
119. # 關(guān)鍵詞緩沖的大小, 一般用來(lái)緩沖 MyISAM 表的索引塊. 
# 不要將其設(shè)置大于你可用內(nèi)存的 30%, 
# 因?yàn)橐徊糠謨?nèi)存同樣被 OS 用來(lái)緩沖行數(shù)據(jù) 
# 甚至在你并不使用 MyISAM 表的情況下, 你也需要仍舊設(shè)置起 8-64M 內(nèi)存由于它同樣會(huì)被內(nèi)部臨時(shí)磁盤(pán)表使用. 
120. key_buffer_size = 256M #myisam 索引 buffer,只有 key 沒(méi)有 data  
 
121. #查詢(xún)排序時(shí)所能使用的緩沖區(qū)大小。排序緩沖被用來(lái)處理類(lèi)似 ORDER BY 以及 GROUP BY 隊(duì)列所引
起的排序。# 一個(gè)用來(lái)替代的基于磁盤(pán)的合并分類(lèi)會(huì)被使用 
# 查看 “Sort_merge_passes” 狀態(tài)變量. 在排序發(fā)生時(shí)由每個(gè)線程分配   注意:該參數(shù)對(duì)應(yīng)的分配內(nèi)存是每連接獨(dú)占!如果有 100 個(gè)連接,那么實(shí)際分配的總共排序緩沖區(qū)大小為 100 × 6 = 600MB。所以,對(duì)于內(nèi)存在 4GB 左右的服務(wù)器推薦設(shè)置為 6-8M。#  
122. sort_buffer_size = 2M #排序 buffer 大?。痪€程級(jí)別   
123. #讀查詢(xún)操作所能使用的緩沖區(qū)大小。和 sort_buffer_size 一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享!用來(lái)做 MyISAM 表全表掃描的緩沖大小.當(dāng)全表掃描需要時(shí),在對(duì)應(yīng)線程中分配. 
124. read_buffer_size = 2M #以全表掃描(Sequential Scan)方式掃描數(shù)據(jù)的 buffer 大小 ;
#線程級(jí)別   
 
125. #聯(lián)合查詢(xún)操作所能使用的緩沖區(qū)大小,和 sort_buffer_size 一樣,該參數(shù)對(duì)應(yīng)的分配內(nèi)存也是每連接獨(dú)享! # 此緩沖被使用來(lái)優(yōu)化全聯(lián)合(full JOINs 不帶索引的聯(lián)合).類(lèi)似的聯(lián)合在極大多數(shù)情況下有非常糟糕的性能表現(xiàn), 但是將此值設(shè)大能夠減輕性能影響.通過(guò) “Select_full_join” 狀態(tài)變量查看全聯(lián)合的數(shù)量,當(dāng)全聯(lián)合發(fā)生時(shí),在每個(gè)線程中分配。 
126. join_buffer_size = 8M # join buffer 大小;線程級(jí)別   
127. #指定 MySQL 查詢(xún)緩沖區(qū)的大小??梢酝ㄟ^(guò)在 MySQL 控制臺(tái)執(zhí)行以下命令觀察:  代碼:  
#   SHOW VARIABLES LIKE '%query_cache%';  
#   SHOW STATUS LIKE 'Qcache%';如果 Qcache_lowmem_prunes 的值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況;  
如果 Qcache_hits 的值非常大,則表明查詢(xún)緩沖使用非常頻繁,如果該值較小反而會(huì)影響效率,那么可以考慮不用查詢(xún)緩沖;Qcache_free_blocks,如果該值非常大,則表明緩沖區(qū)中碎片很多。  
128. query_cache_size = 64M  
 
129. # 當(dāng)在排序之后,從一個(gè)已經(jīng)排序好的序列中讀取行時(shí),行數(shù)據(jù)將從這個(gè)緩沖中讀取來(lái)防止磁盤(pán)尋道. 
# 如果你增高此值,可以提高很多 ORDER BY 的性能.當(dāng)需要時(shí)由每個(gè)線程分配 
130. read_rnd_buffer_size = 8M #MyISAM 以索引掃描(Random Scan)方式掃描數(shù)據(jù)的 buffer大小 ;線程級(jí)別   
131. # MyISAM 使用特殊的類(lèi)似樹(shù)的 cache 來(lái)使得突發(fā)插入 
# (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA 
# INFILE) 更快. 此變量限制每個(gè)進(jìn)程中緩沖樹(shù)的字節(jié)數(shù). 
# 設(shè)置為 0 會(huì)關(guān)閉此優(yōu)化. 
# 為了最優(yōu)化不要將此值設(shè)置大于 “key_buffer_size”. 
# 當(dāng)突發(fā)插入被檢測(cè)到時(shí)此緩沖將被分配 
132. bulk_insert_buffer_size = 64M #MyISAM 用在塊插入優(yōu)化中的樹(shù)緩沖區(qū)的大小。注釋?zhuān)哼@是一個(gè) per thread 的限制  (bulk  大量) 
133. # 此緩沖當(dāng) MySQL 需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個(gè)空表中引起重建索引時(shí)被分配.這在每個(gè)線程中被分配.所以在設(shè)置大值時(shí)需要小心. 
 
134. myisam_sort_buffer_size = 64M #MyISAM 設(shè)置恢復(fù)表之時(shí)使用的緩沖區(qū)的尺寸,當(dāng)在REPAIR TABLE 或用 CREATE INDEX 創(chuàng)建索引或 ALTER TABLE 過(guò)程中排序 MyISAM 索引分配的緩沖區(qū)   
135. # MySQL 重建索引時(shí)所允許的最大臨時(shí)文件的大小 (當(dāng) REPAIR, ALTER TABLE 或者 LOAD DATA 
INFILE). 如果文件大小比此值更大,索引會(huì)通過(guò)鍵值緩沖創(chuàng)建(更慢) 
136. myisam_max_sort_file_size = 10G #MyISAM 如果臨時(shí)文件會(huì)變得超過(guò)索引,不要使用快速排序索引方法來(lái)創(chuàng)建一個(gè)索引。注釋?zhuān)哼@個(gè)參數(shù)以字節(jié)的形式給出.重建 MyISAM 索引(在REPAIR TABLE、ALTER TABLE 或 LOAD DATA INFILE 過(guò)程中)時(shí),允許 MySQL 使用的臨時(shí)文件的最大空間大小。如果文件的大小超過(guò)該值,則使用鍵值緩存創(chuàng)建索引,要慢得多。該值的單位為字節(jié)   
137. # 如果被用來(lái)更快的索引創(chuàng)建索引所使用臨時(shí)文件大于制定的值,那就使用鍵值緩沖方法. 
# 這主要用來(lái)強(qiáng)制在大表中長(zhǎng)字串鍵去使用慢速的鍵值緩沖方法來(lái)創(chuàng)建索引. 
138. myisam_max_extra_sort_file_size = 10G 
139. #  如果一個(gè)表?yè)碛谐^(guò)一個(gè)索引, MyISAM  可以通過(guò)并行排序使用超過(guò)一個(gè)線程去修復(fù)他們.這對(duì)于擁有多個(gè) CPU 以及大量?jī)?nèi)存情況的用戶(hù),是一個(gè)很好的選擇. 
 
140. myisam_repair_threads = 1 #如果該值大于 1,在 Repair by sorting 過(guò)程中并行創(chuàng)建
MyISAM 表索引(每個(gè)索引在自己的線程內(nèi))   
141. myisam_recover = 64K#允許的 GROUP_CONCAT()函數(shù)結(jié)果的最大長(zhǎng)度   
142. #  設(shè)定默認(rèn)的事務(wù)隔離級(jí)別.可用的級(jí)別如下: 
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, 
SERIALIZABLE 
# 1.READ UNCOMMITTED-讀未提交 2.READ COMMITTE-讀已提交 3.REPEATABLE 
READ -可重復(fù)讀 4.SERIALIZABLE -串行
transaction_isolation = REPEATABLE-READ   
 
143. # *** INNODB  相關(guān)選項(xiàng)  *** 
144. #  如果你的 MySQL 服務(wù)包含 InnoDB 支持但是并不打算使用的話, 
#  使用此選項(xiàng)會(huì)節(jié)省內(nèi)存以及磁盤(pán)空間,并且加速某些部分 skip-innodb 
145. innodb_file_per_table   
146. #innodb_status_file = 1 
 
147. #innodb_open_files = 2048  
148. # 附加的內(nèi)存池被 InnoDB 用來(lái)保存 metadata 信息 
# 如果 InnoDB 為此目的需要更多的內(nèi)存,它會(huì)開(kāi)始從 OS 這里申請(qǐng)內(nèi)存. 
# 由于這個(gè)操作在大多數(shù)現(xiàn)代操作系統(tǒng)上已經(jīng)足夠快, 你一般不需要修改此值. 
# SHOW INNODB STATUS 命令會(huì)顯示當(dāng)先使用的數(shù)量. 
149. innodb_additional_mem_pool_size = 100M #幀緩存的控制對(duì)象需要從此處申請(qǐng)緩存,所以該值與 innodb_buffer_pool 對(duì)應(yīng)  
150. # InnoDB 使用一個(gè)緩沖池來(lái)保存索引和原始數(shù)據(jù),  不像  MyISAM. 
#  這里你設(shè)置越大,你在存取表里面數(shù)據(jù)時(shí)所需要的磁盤(pán) I/O 越少. 
#  在一個(gè)獨(dú)立使用的數(shù)據(jù)庫(kù)服務(wù)器上,你可以設(shè)置這個(gè)變量到服務(wù)器物理內(nèi)存大小的 80% 
#  不要設(shè)置過(guò)大,否則,由于物理內(nèi)存的競(jìng)爭(zhēng)可能導(dǎo)致操作系統(tǒng)的換頁(yè)顛簸. 
#  注意在 32 位系統(tǒng)上你每個(gè)進(jìn)程可能被限制在  2-3.5G  用戶(hù)層面內(nèi)存限制, 
#  所以不要設(shè)置的太高. 
 
151. innodb_buffer_pool_size = 2G #包括數(shù)據(jù)頁(yè)、索引頁(yè)、插入緩存、鎖信息、自適應(yīng)哈希所以、數(shù)據(jù)字典信息   
152. # 設(shè)置此選項(xiàng)如果你希望 InnoDB 表空間文件被保存在其他分區(qū). 
# 默認(rèn)保存在 MySQL 的 datadir 中. 
153. innodb_data_home_dir = /longxibendi/mysql/mysql/var/   
154. # InnoDB 將數(shù)據(jù)保存在一個(gè)或者多個(gè)數(shù)據(jù)文件中成為表空間. 
# 如果你只有單個(gè)邏輯驅(qū)動(dòng)保存你的數(shù)據(jù),一個(gè)單個(gè)的自增文件就足夠好了. 
# 其他情況下.每個(gè)設(shè)備一個(gè)文件一般都是個(gè)好的選擇. 
# 你也可以配置 InnoDB 來(lái)使用裸盤(pán)分區(qū) – 請(qǐng)參考手冊(cè)來(lái)獲取更多相關(guān)內(nèi)容 
155. #innodb_data_file_path = ibdata1:1G:autoextend   
156. innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend #表空間   
 
157. #  用來(lái)同步 IO 操作的 IO 線程的數(shù)量. This value is 
#  此值在 Unix 下被硬編碼為 4,但是在 Windows 磁盤(pán) I/O 可能在一個(gè)大數(shù)值下表現(xiàn)的更好. 
158. innodb_file_io_threads = 4 #io 線程數(shù)   
159. #  在 InnoDb 核心內(nèi)的允許線程數(shù)量. 
#  最優(yōu)值依賴(lài)于應(yīng)用程序,硬件以及操作系統(tǒng)的調(diào)度方式. 
#  過(guò)高的值可能導(dǎo)致線程的互斥顛簸. 
160. innodb_thread_concurrency = 16 #InnoDB 試著在 InnoDB 內(nèi)保持操作系統(tǒng)線程的數(shù)量少于或等于這個(gè)參數(shù)給出的限制   
161. #  如果設(shè)置為 1 ,InnoDB 會(huì)在每次提交后刷新(fsync)事務(wù)日志到磁盤(pán)上, 
#  這提供了完整的 ACID 行為. 
#  如果你愿意對(duì)事務(wù)安全折衷,  并且你正在運(yùn)行一個(gè)小的食物,  你可以設(shè)置此值到 0 或者 2 來(lái)減少由事務(wù)日志引起的磁盤(pán) I/O 
# 0 代表日志只大約每秒寫(xiě)入日志文件并且日志文件刷新到磁盤(pán). 
# 2 代表日志寫(xiě)入日志文件在每次提交后,但是日志文件只有大約每秒才會(huì)刷新到磁盤(pán)上. 
 
162. innodb_flush_log_at_trx_commit = 1 #每次 commit 日志緩存中的數(shù)據(jù)刷到磁盤(pán)中   
163. # 用來(lái)緩沖日志數(shù)據(jù)的緩沖區(qū)的大小. 
# 當(dāng)此值快滿(mǎn)時(shí), InnoDB 將必須刷新數(shù)據(jù)到磁盤(pán)上. 
# 由于基本上每秒都會(huì)刷新一次,所以沒(méi)有必要將此值設(shè)置的太大(甚至對(duì)于長(zhǎng)事務(wù)而言) 
164. innodb_log_buffer_size = 8M #事物日志緩存
 
165. #  在日志組中每個(gè)日志文件的大小,你應(yīng)該設(shè)置日志文件總合大小到你緩沖池大小的25%~100%,來(lái)避免在日志文件覆寫(xiě)上不必要的緩沖池刷新行為. 
#  不論如何,  請(qǐng)注意一個(gè)大的日志文件大小會(huì)增加恢復(fù)進(jìn)程所需要的時(shí)間. 
 
166. innodb_log_file_size = 500M #事物日志大小   
167. #innodb_log_file_size =100M  
168. 在日志組中的文件總數(shù). 
# 通常來(lái)說(shuō) 2~3 是比較好的. 
169. innodb_log_files_in_group = 2 #兩組事物日志   
170. # InnoDB 的日志文件所在位置. 默認(rèn)是 MySQL 的 datadir. 
# 你可以將其指定到一個(gè)獨(dú)立的硬盤(pán)上或者一個(gè) RAID1 卷上來(lái)提高其性能 
 
171. innodb_log_group_home_dir = /longxibendi/mysql/mysql/var/
#日志組   
172. #  在 InnoDB 緩沖池中最大允許的臟頁(yè)面的比例. 
#  如果達(dá)到限額, InnoDB 會(huì)開(kāi)始刷新他們防止他們妨礙到干凈數(shù)據(jù)頁(yè)面. 
#  這是一個(gè)軟限制,不被保證絕對(duì)執(zhí)行. 
173. innodb_max_dirty_pages_pct = 90 #innodb 主線程刷新緩存池中的數(shù)據(jù),使臟數(shù)據(jù)比例小于 90%   
 
174. # 在被回滾前,一個(gè) InnoDB 的事務(wù)應(yīng)該等待一個(gè)鎖被批準(zhǔn)多久. 
# InnoDB 在其擁有的鎖表中自動(dòng)檢測(cè)事務(wù)死鎖并且回滾事務(wù). 
# 如果你使用 LOCK TABLES 指令, 或者在同樣事務(wù)中使用除了 InnoDB 以外的其他事務(wù)安全的存儲(chǔ)引擎 
# 那么一個(gè)死鎖可能發(fā)生而 InnoDB 無(wú)法注意到. 
# 這種情況下這個(gè) timeout 值對(duì)于解決這種問(wèn)題就非常有幫助. 
175. innodb_lock_wait_timeout = 50 #InnoDB 事務(wù)在被回滾之前可以等待一個(gè)鎖定的超時(shí)秒數(shù)。InnoDB 在它自己的 鎖定表中自動(dòng)檢測(cè)事務(wù)死鎖并且回滾事務(wù)。InnoDB 用 LOCK TABLES 語(yǔ)句注意到鎖定設(shè)置。默認(rèn)值是 50 秒   
 

176. # InnoDB 用來(lái)刷新日志的方法. 
#  表空間總是使用雙重寫(xiě)入刷新方法 
#  默認(rèn)值是  “fdatasync”,  另一個(gè)是  “O_DSYNC”. 
177. #innodb_flush_method = O_DSYNC  
 
178. # 如果你發(fā)現(xiàn) InnoDB 表空間損壞, 設(shè)置此值為一個(gè)非零值可能幫助你導(dǎo)出你的表. 
# 從 1 開(kāi)始并且增加此值知道你能夠成功的導(dǎo)出表. 
179. innodb_force_recovery=1 
 
180. # 加速 InnoDB 的關(guān)閉. 這會(huì)阻止 InnoDB 在關(guān)閉時(shí)做全清除以及插入緩沖合并. 
# 這可能極大增加關(guān)機(jī)時(shí)間, 但是取而代之的是 InnoDB 可能在下次啟動(dòng)時(shí)做這些操作. 
 innodb_fast_shutdown 
181. [mysqldump]   
182. #  不要在將內(nèi)存中的整個(gè)結(jié)果寫(xiě)入磁盤(pán)之前緩存.  在導(dǎo)出非常巨大的表時(shí)需要此項(xiàng) 
183. quick   
 
184. 增加該變量的值十分安全,這是因?yàn)閮H當(dāng)需要時(shí)才會(huì)分配額外內(nèi)存。例如,僅當(dāng)你發(fā)出長(zhǎng)查詢(xún)或 mysqld 必須返回大的結(jié)果行時(shí) mysqld 才會(huì)分配更多內(nèi)存。該變量之所以取較小默認(rèn)值是一種預(yù)防措施,以捕獲客戶(hù)端和服務(wù)器之間的錯(cuò)誤信息包,并確保不會(huì)因偶然使用大的信息包而導(dǎo)致內(nèi)存溢出。 如果你正是用大的 BLOB 值,而且未為 mysqld 授予為處理查詢(xún)而訪問(wèn)足夠內(nèi)存的權(quán)限,也會(huì)遇到與大信息包有關(guān)的奇怪問(wèn)題。如果懷疑出
現(xiàn)了該情況,請(qǐng)嘗試在 mysqld_safe 腳本開(kāi)始增加 ulimit -d 256000,并重啟 mysqld。  
185. max_allowed_packet = 64M  
186. [mysql]   
187. disable-auto-rehash #允許通過(guò) TAB 鍵提示   
188. default-character-set = utf8  
189. connect-timeout = 3  
190. [mysqld_safe] 
191. open-files-limit = 8192 
 
#  增加每個(gè)進(jìn)程的可打開(kāi)文件數(shù)量. 
#  警告:  確認(rèn)你已經(jīng)將全系統(tǒng)限制設(shè)定的足夠高! 
#全局變量,不可動(dòng)態(tài)調(diào)整,取值范圍 0到65535。
open_files_limit指mysql能夠打開(kāi)的文件句柄數(shù)。該值不足時(shí),會(huì)引發(fā) Too many open files錯(cuò)誤。具體需要多少個(gè)文件句柄,還需要根據(jù) max_connections 和 table_open_cache來(lái)計(jì)算
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容