mysql配置文件my.cnf詳解

調整MySQL運行參數,修改/etc/my.cnf文件調整mysql運行參數重啓MySQL後生效,在MySQL4版本以後,一部分內部變量可以在MySQL運行時設置,不過重啓MySQL就失效了。 
mysqld程序--目錄和文件
basedir      = path          # 使用給定目錄作爲根目錄(安裝目錄)。
datadir      = path          # 從給定目錄讀取數據庫文件。
pid-file     = filename      # 爲mysqld程序指定一個存放進程ID的文件(僅適用於UNIX/Linux系統); 

[mysqld]                        
socket = /tmp/mysql.sock     # 爲MySQL客戶程序與服務器之間的本地通信指定一個套接字文件(Linux下默認是/var/lib/mysql/mysql.sock文件)
port             = 3306      # 指定MsSQL偵聽的端口 
key_buffer       = 384M      # key_buffer是用於索引塊的緩衝區大小,增加它可得到更好處理的索引(對所有讀和多重寫)。
                               索引塊是緩衝的並且被所有的線程共享,key_buffer的大小視內存大小而定。
table_cache      = 512       # 爲所有線程打開表的數量。增加該值能增加mysqld要求的文件描述符的數量。可以避免頻繁的打開數據表產生的開銷
sort_buffer_size = 2M        # 每個需要進行排序的線程分配該大小的一個緩衝區。增加這值加速ORDER BY或GROUP BY操作。
                               注意:該參數對應的分配內存是每連接獨佔!如果有100個連接,那麼實際分配的總共排序緩衝區大小爲100×6=600MB
read_buffer_size = 2M        # 讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享。
query_cache_size = 32M       # 指定MySQL查詢結果緩衝區的大小
read_rnd_buffer_size    = 8M # 改參數在使用行指針排序之後,隨機讀用的。
myisam_sort_buffer_size =64M # MyISAM表發生變化時重新排序所需的緩衝
thread_concurrency      = 8 # 最大併發線程數,取值爲服務器邏輯CPU數量×2,如果CPU支持H.T超線程,再×2
thread_cache            = 8 # #緩存可重用的線程數
skip-locking                 # 避免MySQL的外部鎖定,減少出錯機率增強穩定性。 
[mysqldump]
max_allowed_packet      =16M # 服務器和客戶端之間最大能發送的可能信息包 

[myisamchk]
key_buffer   = 256M
sort_buffer = 256M
read_buffer = 2M
write_buffer = 2M 

其他可選參數: 
back_log = 384
    指定MySQL可能的連接數量。
    當MySQL主線程在很短時間內接收到非常多的連接請求,該參數生效,主線程花費很短時間檢查連接並且啓動一個新線程。 
    back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。
    如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。
    試圖設定back_log高於你的操作系統的限制將是無效的。默認值爲50。對於Linux系統推薦設置爲小於512的整數。 
max_connections = n 
    MySQL服務器同時處理的數據庫連接的最大數量(默認設置是100)。超過限制後會報 Too many connections 錯誤
key_buffer_size = n
    用來存放索引區塊的RMA值(默認設置是8M),增加它可得到更好處理的索引(對所有讀和多重寫)
record_buffer:
    每個進行一個順序掃描的線程爲其掃描的每張表分配這個大小的一個緩衝區。
    如果你做很多順序掃描,你可能想要增加該值。默認數值是131072(128K)
wait_timeout:
    服務器在關閉它之前在一個連接上等待行動的秒數。
interactive_timeout:
    服務器在關閉它前在一個交互連接上等待行動的秒數。
    一個交互的客戶被定義爲對 mysql_real_connect()使用 CLIENT_INTERACTIVE 選項的客戶。
    默認數值是28800,可以把它改爲3600。 
skip-name-resolve            
    禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。
    但需要注意,如果開啓該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
log-slow-queries = slow.log 
    記錄慢查詢,然後對慢查詢一一優化
skip-innodb
skip-bdb 
    關閉不需要的表類型,如果你需要,就不要加上這個
          
          
# > SHOW VARIABLES LIKE '%query_cache%';
# > SHOW STATUS LIKE 'Qcache%';
如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況;
如果Qcache_hits的值非常大,則表明查詢緩衝使用非常頻繁,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩衝;
如果Qcache_free_blocks的值非常大,則表明緩衝區中碎片很多。


##########################################
######      max_allowed_packet      ######
##########################################
通信信息包是發送至MySQL服務器的單個SQL語句,或發送至客戶端的單一行。 
在MySQL 5.1服務器和客戶端之間最大能發送的可能信息包爲1GB。 
當MySQL客戶端或mysqld服務器收到大於max_allowed_packet字節的信息包時,將發出“信息包過大”錯誤,並關閉連接。對於某些客戶端,如果通信信息包過大,在執行查詢期間,了能回遇到“丟失與MySQL服務器的連接”錯誤。 
客戶端和服務器均有自己的max_allowed_packet變量,因此,如你打算處理大的信息包,必須增加客戶端和服務器上的該變量。 
如果你正在使用mysql客戶端程序,其max_allowed_packet變量的默認值爲16MB。要想設置較大的值,可用下述方式啓動mysql: 
mysql> mysql --max_allowed_packet=32M
它將信息包的大小設置爲32MB。 
服務器的默認max_allowed_packet值爲1MB。如果服務器需要處理大的查詢,可增加該值(例如,如果準備處理大的BLOB列)。例如,要想將該設置爲16MB,可採用下述方式啓動服務器: 
mysql> mysqld --max_allowed_packet=16M

也能使用選項文件來設置max_allowed_packet。要想將服務器的該變量設置爲16MB,可在選項文件中增加下行內容: 
[mysqld]
max_allowed_packet=16M 
增加該變量的值十分安全,這是因爲僅當需要時纔會分配額外內存。例如,僅當你發出長查詢或mysqld必須返回大的結果行時mysqld纔會分配更多內存。該變量之所以取較小默認值是一種預防措施,以捕獲客戶端和服務器之間的錯誤信息包,並確保不會因偶然使用大的信息包而導致內存溢出。 
如果你正是用大的BLOB值,而且未爲mysqld授予爲處理查詢而訪問足夠內存的權限,也會遇到與大信息包有關的奇怪問題。如果懷疑出現了該情況,請嘗試在mysqld_safe腳本開始增加ulimit -d 256000,並重啓mysqld。 
##########################################
#####   MySQL怎樣打開和關閉數據庫表 #####
##########################################
table_cache, max_connections和max_tmp_tables影響服務器保持打開的文件的最大數量。如果你增加這些值的一個或兩個,你可以遇到你的操作系統每個進程打開文件描述符的數量上強加的限制。然而,你可以能在許多系統上增加該限制。請教你的OS文檔找出如何做這些,因爲改變限制的方法各系統有很大的不同。 
table_cache與max_connections有關。例如,對於200個打開的連接,你應該讓一張表的緩衝至少有200 * n,這裏n是一個聯結(join)中表的最大數量。

打開表的緩存可以增加到一個table_cache的最大值(缺省爲64;這可以用mysqld的-O table_cache=#選項來改變)。一個表絕對不被關閉,除非當緩存滿了並且另外一個線程試圖打開一個表時或如果你使用mysqladmin refresh或mysqladmin flush-tables。 
當表緩存滿時,服務器使用下列過程找到一個緩存入口來使用: 
不是當前使用的表被釋放,以最近最少使用(LRU)順序。 
如果緩存滿了並且沒有表可以釋放,但是一個新表需要打開,緩存必須臨時被擴大。 
如果緩存處於一個臨時擴大狀態並且一個表從在用變爲不在用狀態,它被關閉並從緩存中釋放。 

對每個併發存取打開一個表。這意味着,如果你讓2個線程存取同一個表或在同一個查詢中存取表兩次(用AS),表需要被打開兩次。任何表的第一次打開佔2個文件描述符;表的每一次額外使用僅佔一個文件描述符。對於第一次打開的額外描述符用於索引文件;這個描述符在所有線程之間共享


原文地址:http://blog.chinaunix.net/uid-20639775-id-154429.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章