較爲全面的企業級 MySQL 配置調優

MySQL配置my.cnf配置優化詳解

用 yum 安裝的 MySQL 選用的路徑爲默認路徑,不需要創建,需要創建的路徑會特殊備註

vim /etc/my.cnf
[client]
port = 63306		#自定義客戶端端口
socket = /var/lib/mysql/mysql.sock	 #啓動是的sock文件位置
default-character-set = utf8mb4		 #默認字符集 

[mysql]
auto-rehash 	#auto-rehash 自動補全,輸入MySQL命令時候可以自動補全(默認不使用補全no-auto-rehash)
default-character-set = utf8mb4		#默認字符集

[mysqld]
####################### Basic Settings 基本設置 #######################
port = 63306
server-id = 50			#MySQL區別的ID號(主從同步的時候不能一致)
bind-address = 0.0.0.0	#監聽的地址(如果做主從不要寫爲本地地址)
user = mysql			#用戶爲MySQL
datadir = /var/lib/mysql			   #MySQL本身的路徑
socket = /var/lib/mysql/mysql.sock	   #啓動是的sock文件位置
log-error = /var/log/mysqld.log	       #錯誤日誌存放的位置
pid-file = /var/run/mysqld/mysqld.pid  #記錄當前MySQL進程
skip-locking  #避免MySQL的外部鎖定,減少出錯機率增強穩定性
skip_ssl  	  #禁止止掉SSL功能
max_user_connections= 0 #連接參數值爲0,表示沒有限制


################### Modify parameter item 針對緩衝區調整配置 #############
back_log = 512
#back_log 參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。
如果系統在一個短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的偵聽隊列的大小。
不同的操作系統在這個隊列大小上有它自 己的限制。 試圖設定back_log高於你的操作系統的限制將是無效的。默認值爲80。對於Linux系統推薦設置爲小於512的整數。

key_buffer_size = 256M
#key_buffer_size 指定用於索引的緩衝區大小,增加它可得到更好的索引處理性能。對於內存在4GB左右的服務器該參數可設置爲256M或384M。注意:該參數值設置的過大反而會是服務器整體效率降低!

thread_stack = 256K
#thread_stack 表示每個連接線程被創建時,MySQL給它分配的內存大小,對於8-16G的服務器器設置成256K就可以了了,再大一點的,可以適當增加
	
max_allowed_packet = 16M
#max_allowed_packet 這個參數mysql消息緩衝區的大小,一般設置成 4-16M

sort_buffer_size = 16M
#sort_buffer_size 查詢排序時所能使用用的緩衝區大小,注意:該參數對應的分配內存是每連接獨佔,如果有100個連接,那麼實際分配的總共排序緩衝區大小爲100 × 6 = 600MB。所以,對於內存在4GB左右的服務器推薦設置爲6-8M

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

table_open_cache = 1024 
#table_open_cache 設置table高速緩存的數量量,可以通過命令show variables like '%open%'; 查看open_files_limit參數,調到512-1024最佳 

net_buffer_length = 16K
#net_buffer_length 每個客戶端連接時。用於維持連接緩衝,最小1k最大1m默認16k 

query_cache_size = 128M 
#query_cache_size 表示mysql查詢結果的緩衝區大小,一般不建議設置太大,一般設置成32M-256M左右爲2的倍數

tmp_table_size = 256M 
#tmp_table_size 該值默認爲16M,可調到64-256最佳,線程獨佔, 太大可能內存不夠造成I/O堵塞,如果動態⻚頁面面可以適當調大大點 


################### MyISAM parameters MyISAM 引擎參數設置 ###################
myisam_sort_buffer_size = 128M  
#myisam_sort_buffer_size MyISAM表發生變化時重新排序所需的緩衝默認8M

key_buffer_size = 32M
#key_buffer_size 這對MyISAM表來說非常重要。MyISAM表會使用操作系統的緩存來緩存數據,低於16-32MB的,以適應給予磁盤的臨時表索引所需

query_cache = 32M
#query_cache 應用程序有大量讀,而且沒有應用程序級別的緩存,那麼這很有用,常設置爲 32-512Mb;在一定的負載壓力下,如果緩存命中率太低了,就啓用它

read_rnd_buffer_size = 32M
#read_rnd_buffer_size MySql的隨機讀(查詢操作)緩衝區大小,對於4G到16G內存的服務器器2M-8M;如果你增高此值,可以提高很多ORDER BY的性能.當需要時由每個線程分配

thread_cache_size = 256
#thread_cache_size 線程緩存,默認256;當一個客戶端斷開連接後,如果cache中的線程還少於thread_cache_size,則客戶端線程被放入cache中.這可以在你需要大量新連接的時候極大的減少線程創建的開銷

bulk_insert_buffer_size = 64M
#bulk_insert_buffer_size 批量插入數據緩存大小,可以有效提高插入效率,默認爲8M;(這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA INFILE) 更快


################### Innodb parameters Innodb引擎參數設置 ###################
innodb_thread_concurrency = 8  
#innodb_thread_concurrency 服務器有幾個CPU就設置爲幾,建議用默認設置,一般爲8

innodb_flush_log_at_trx_commit = 2  
#innodb_flush_log_at_trx_commit 這參數是控制MySQL 磁盤寫入策略以及數據安全性的關鍵參數1最慢的,方式2速度較快也比0安全,

innodb_log_buffer_size = 8M
#innodb_log_buffer_size 使用默認8M,此參數確定些日誌文件所用的內存大小,以M爲單位。緩衝區更大能提高性能,但意外的故障將會丟失數據.MySQL開發人員建議設置爲1-8M之間,

innodb_log_file_size = 4G
#innodb_log_file_size 使用默認48M,此參數確定數據日誌文件的大小,以M爲單位,更大的設置可以提高性能,但也會增加恢復故障數據庫所需的時
通過命令SHOW GLOBAL STATUS的輸出看 Innodb_os_log_written的值,把該值除以1024*1024 得到的結果是每分鐘處理的 redo日日誌大大小小,然後再乘以60得到每小時處理的日誌大小, 可以設置允許大大於4G

innodb_buffer_pool_size = 20G
#innodb_buffer_pool_size #對Innodb表來說非非常重要是緩存innodb表的索 引,一般配置的值是5GB(8GB內存),20GB(32GB內存),40GB(64GB內存) 

innodb_lock_wait_timeout = 100 
#innodb_lock_wait_timeout 指示 MySQL在允許其他事務修改那些最終受事務回滾的數據之前要等待多長時間(秒數)

innodb_file_per_table = ON
#innodb_file_per_table 使得每個表都有自自已獨立立的表空間


########################## log settings 日誌設置 #########################
開啓慢查詢日誌(需要創建對應的文件路徑)
long_query_time = 2	 #指執行超過2S的SQL會被記錄下來 
slow_query_log=1		#1表示開啓慢查詢,0表示關閉慢查詢 
slow-query-log-file = /home/mysql/slow_log/slow.log   #慢查詢日誌存儲的路徑 

開啓二進制日誌(在啓用主從同步時纔開啓;還得創建對應的文件路徑)
log_bin=ON		#打開二進制文件
log_bin_basename=/home/mysql/bin_log/mysql-bin  #二進制文件存放的位置
log_bin_index=/var/lib/mysql/mysql-bin.index	#指定的是binlog文件的索引文件,文件管理了所有的binlog文件的目錄


####################### AB Replication 主從複製配置 #######################
開啓主配置從同步配置(不配置主從同步的時候不需要配置)
binlog-do-db = db
#binlog-do-db 需要複製的數據庫名,如果複製多個數據庫,重複設置這個選項即可 

binlog-ignore-db = information_schema
#binlog-ignore-db 不同步的二進制數據庫名,如果不設置可以將其註釋掉

log-slave-updates = true
#log-slave-updates 將從服務器從主服務器收到的更新記入到從服務器自己的二進制日誌文件中(即TRUE和FALSE)

sync_binlog = 1  
#sync_binlog 設爲1就是把MySql每次發生的修改和事件的日誌即時同步到硬盤上(這個參數性能消耗很大,但可減小MySQL崩潰造成的損失)

binlog_format = Row  
#binlog_format 複製模式 Statement, Row, mixed

skip_slave_start = 1
#skip_slave_start 防止從服務器在崩潰後自動開啓,以給你足夠的時間修復。

max_binlog_size = 200M 	    
#max_binlog_size 指定二進制日誌的大小

expire_logs_days = 7
#expire_logs_days 二進制日誌自動刪除的天數,默認值爲0,表示“沒有自動刪除”,啓動時和二進制日誌循環時可能刪除  

read_only = on
###read_only 這個配置針對從庫配置,主庫不需要配置,是否指定此庫爲只讀

relay-log = /home/mysql/relay_log/relay-log
#開啓中繼日誌,並且創建對應的目錄

MySQL 優化配置(針對4核32G起且配置主從的主庫機器配置)

vim /etc/my.cnf
[client]
port = 63306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8mb4

[mysql]
auto-rehash	#auto-rehash
default-character-set = utf8mb4

[mysqld]
####################### Basic Settings  #######################
port = 63306
server-id = 50
bind-address = 0.0.0.0
user = mysql
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock
log-error = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
skip-locking
skip_ssl
max_user_connections= 0


##################### Modify parameter item  ##################
back_log = 512
key_buffer_size = 2048M
thread_stack = 512K
max_allowed_packet = 16M
sort_buffer_size = 16M
join_buffer_size = 8M
table_open_cache = 1024 
net_buffer_length = 16K
query_cache_size = 128M 
tmp_table_size = 256M


####################### MyISAM parameters ########################
myisam_sort_buffer_size = 128M  
key_buffer_size = 32M
query_cache = 32M
read_rnd_buffer_size = 16M
thread_cache_size = 256
bulk_insert_buffer_size = 64M


####################### Innodb parameters  #######################
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 8M
innodb_log_file_size = 4G
innodb_buffer_pool_size = 20G
innodb_lock_wait_timeout = 100 
innodb_file_per_table = ON


########################## log settings ###########################
開啓慢查詢日誌(需要創建對應的文件路徑)
long_query_time = 2
slow_query_log=1
slow-query-log-file = /home/mysql/slow_log/slow.log

開啓二進制日誌(在啓用主從同步時纔開啓;還得創建對應的文件路徑)
log_bin=ON
log_bin_basename=/home/mysql/bin_log/mysql-bin
log_bin_index=/var/lib/mysql/mysql-bin.index


####################### AB Replication  #######################
開啓主配置從同步配置(不配置主從同步的時候不需要配置)
binlog-do-db = db
binlog-ignore-db = information_schema
log-slave-updates = true
sync_binlog = 1  
binlog_format = Row  
skip_slave_start = 1
max_binlog_size = 200M 	    
expire_logs_days = 7
read_only = on
relay-log = /home/mysql/relay_log/relay-log
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章