調整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)中表的最大數量。mysql
打開表的緩存能夠增長到一個table_cache的最大值(缺省爲64;這能夠用mysqld的-O table_cache=#選項來改變)。一個表絕對不被關閉,除非當緩存滿了而且另一個線程試圖打開一個表時或若是你使用mysqladmin refresh或mysqladmin flush-tables。
當表緩存滿時,服務器使用下列過程找到一個緩存入口來使用:
不是當前使用的表被釋放,以最近最少使用(LRU)順序。
若是緩存滿了而且沒有表能夠釋放,可是一個新表須要打開,緩存必須臨時被擴大。
若是緩存處於一個臨時擴大狀態而且一個表從在用變爲不在用狀態,它被關閉並從緩存中釋放。
對每一個併發存取打開一個表。這意味着,若是你讓2個線程存取同一個表或在同一個查詢中存取表兩次(用AS),表須要被打開兩次。任何表的第一次打開佔2個文件描述符;表的每一次額外使用僅佔一個文件描述符。對於第一次打開的額外描述符用於索引文件;這個描述符在全部線程之間共享web