MySQL 配置講解

來源:互聯網
上載者:User

標籤:mysql 配置講解

MySQL 配置講解650) this.width=650;" src="https://s4.51cto.com/wyfs02/M00/98/D8/wKioL1lBAR3AFi9AAABlcDgDoCw255.jpg" title="11.jpg" alt="wKioL1lBAR3AFi9AAABlcDgDoCw255.jpg" />

MySQL安裝好後,我們是從安裝包的support-files裡面複製過來一個末班設定檔,預設MySQL設定檔是在/etc/my.cnf下,其實這個路徑或者檔案名稱字我們是可以修改的,在啟動指令碼中修改。

以下是一些常用的設定:

[mysqld]

socket          = /tmp/mysql.sock

#為MySQL客戶程式與伺服器之間的本地通訊制定一個通訊端檔案(Linux下預設是/var/lib/mysql/mysql.sock檔案)

port            = 3306

#指定MySQL偵聽連接埠

skip-name-resolve

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

key_buffer     = 256M

#key_buffer是利用索引塊的緩衝區大小,增加他可得到更好處理的索引(對所有讀和多重寫)。索引被所有的線程共用,key_buffer的大小視記憶體大小而定。

table_open_cache = 256

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

max_allowed_packet = 1M

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

sort_buffer_size = 1M

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

read_buffer_size = 1M

#讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配記憶體也是每連結獨享。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySQL會為它分配一段記憶體緩衝沖區。如果對標的順序掃描請求非常頻繁,並且認為頻繁掃描進行的太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其效能。

join_buffer_size =1M

#聯集查詢操作所能使用的緩衝區大小,和 size_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享。

query_cache_size= 16M

#指定MySQL查詢結果緩衝區的大小。

read_rnd_buffer_size = 4M

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

myisam_sort_buffer_size=64M

#myisam_sort_buffer_size 這個緩衝區主要用於修複表過程中排序索引使用的記憶體或者是建立索引時排序索引用到的記憶體大小,一般4G記憶體給64M即可。

thread_concurrency =8

# thread_concurrency 這個值設定為cpu核心數的2倍即可

thread_cache_size =8

# thread_cache_size表示可以重新利用儲存在緩衝中線程的數,

參考如下值:1G記憶體  —> 8 2G 記憶體 —> 16,4G以上設定為64

max_connections =1000

# max_connections 最大的串連數,根據業務請求量適當調整,設定500足夠

max_connect_errors=6000

# max_connect_errors 是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的用戶端以防止暴力破解密碼的情況。與效能並無太大關係。為了避免一些錯誤我們一般都設定比較大,比如說10000, (對同一主機,如果有超出該參數值個數的中斷錯誤串連,則該主機將被禁止串連。如需對該主機進行解禁,執行:FLUSH HOST.)

open_files_limit = 65535

#mysql開啟的檔案描述符限制,預設最小1024

skip_locking

#避免MySQL的外部鎖定,減少出錯幾率增強穩定性。

wait_timeout =8

#表示閒置串連超出時間,預設是28800s,這個參數是和interactive_timeout一起使用的,也就是說想要讓wait_timeout生效,必須同時設定interactive_timeout。

interactive-timeout =8

long_query_time =1

#慢查詢日誌的超出時間

log_slow_queries = /path/to/slow_querics

#慢查詢日誌路徑,必須配合上面的參數一同使用

MySQL調優

MySQL調優可以從幾個方面來做:

1. 架構層:

做從庫,實現讀寫分離;

2.系統層次:

增加記憶體;

給磁碟做raid0或者raid5以增加磁碟的讀寫速度;

可以重新掛載磁碟,並加上noatime參數,這樣可以減少磁碟的i/o;

3. MySQL本身調優:

(1) 如果未配置主從同步,可以把bin-log功能關閉,減少磁碟i/o

(2) 在my.cnf中加上skip-name-resolve,這樣可以避免由於解析主機名稱延遲造成mysql執行慢

(3) 調整幾個關鍵的buffer和cache。調整的依據,主要根據資料庫的狀態來調試。如何調優可以參考5.

4. 應用程式層次:

查看慢查詢日誌,根據慢查詢日誌最佳化程式中的SQL語句,比如增加索引

5. 調整幾個關鍵的buffer和cache

1) key_buffer_size  首先可以根據系統的記憶體大小設定它,大概的一個參考值:1G以下記憶體設定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.這個值可以通過檢查狀態值Key_read_requests和 Key_reads,可以知道key_buffer_size設定是否合理。比例key_reads / key_read_requests應該儘可能的低,至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE ‘key_read%’獲得)。注意:該參數值設定的過大反而會是伺服器整體效率降低!

2) table_open_cache 開啟一個表的時候,會臨時把表裡面的資料放到這部分記憶體中,一般設定成1024就夠了,它的大小我們可以通過這樣的方法來衡量: 如果你發現 open_tables等於table_cache,並且opened_tables在不斷增長,那麼你就需要增加table_cache的值了(上述狀態值可以使用SHOW STATUS LIKE ‘Open%tables’獲得)。注意,不能盲目地把table_cache設定成很大的值。如果設定得太高,可能會造成檔案描述符不足,從而造成效能不穩定或者串連失敗。

3) sort_buffer_size 查詢排序時所能使用的緩衝區大小,該參數對應的分配記憶體是每串連獨佔!如果有100個串連,那麼實際分配的總共排序緩衝區大小為100 × 4 = 400MB。所以,對於記憶體在4GB左右的伺服器推薦設定為4-8M。

4) read_buffer_size 讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!

5) join_buffer_size 聯集查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配記憶體也是每串連獨享!

6) myisam_sort_buffer_size 這個緩衝區主要用於修複表過程中排序索引使用的記憶體或者是建立索引時排序索引用到的記憶體大小,一般4G記憶體給64M即可。

7) query_cache_size MySQL查詢操作緩衝區的大小,通過以下做法調整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes該參數記錄有多少條查詢因為記憶體不足而被移除出查詢快取。通過這個值,使用者可以適當的調整緩衝大小。如果該值非常大,則表明經常出現緩衝不夠的情況,需要增加緩衝大小;Qcache_free_memory:查詢快取的記憶體大小,通過這個參數可以很清晰的知道當前系統的查詢記憶體是否夠用,是多了,還是不夠用,我們可以根據實際情況做出調整。一般情況下4G記憶體設定64M足夠了。

8) thread_cache_size 表示可以重新利用儲存在緩衝中線程的數,參考如下值:1G  —> 8 2G  —> 16 3G  —> 32  >3G  —> 64

除此之外,還有幾個比較關鍵的參數:

9) thread_concurrency 這個值設定為cpu核心數的2倍即可

10) wait_timeout 表示閒置連線逾時時間,預設是28800s,這個參數是和interactive_timeout一起使用的,也就是說要想讓wait_timeout 生效,必須同時設定interactive_timeout,建議他們兩個都設定為10

11) max_connect_errors 是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的用戶端以防止暴力破解密碼的情況。與效能並無太大關係。為了避免一些錯誤我們一般都設定比較大,比如說10000 

12) max_connections 最大的串連數,根據業務請求量適當調整,設定500足夠

13) max_user_connections 是指同一個帳號能夠同時串連到mysql服務的最大串連數。設定為0表示不限制。通常我們設定為100足夠 


本文出自 “12350027” 部落格,謝絕轉載!

MySQL 配置講解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.