MySQL之my.cnf配置文件優化


#

[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8
[mysql]
no-auto-rehash          			                      #僅允許使用鍵值的updates和deletes
[mysqld]
port = 3306                                                #msyql服務器端口號
basedir = /usr/local/mysql                                 #mysql安裝目錄
datadir = /usr/local/mysql/data                            #mysql數據存放目錄
#datadir = /data/mysql/data                                #同上
socket = /usr/local/mysql/data/mysql.sock                  #sock文件

#字符集與校對規則
character-set-server = utf8     		                   #默認字符集
collation-server = utf8_general_ci                         #設置校對規則

external-locking = FALSE       			                   #避免外部鎖定(減少出錯幾率,增加穩定性)
skip-name-resolv                		                   #禁止外部連接進行DNS解析
skip-slave-start                                           # 復制進程就不會隨着數據庫的啟動而啟動 http://blog.csdn.net/aeolus_pu/article/details/9419965  
#master庫binlog參數相關
server-id = 1					                           #主從復制時,ID不能相同
#binlog_format = mixed           		                   #二進制日志格式(mixed、row、statement)
binlog-cache-size = 32M          		                   #設置二進制日志緩存大小
sync-binlog = 1                 		                   #每隔N秒將緩存中的二進制日志記錄寫回硬盤
max_binlog_cache_size = 8M      		                   #最大的二進制Cache日志緩沖尺寸
max_binlog_size = 1G            		                   #單個二進制日志文件的最大值,默認1G,最大1G
log-bin-index = /usr/local/mysql/data/mysql-bin.index      #binlog索引文件位置
log-bin = /usr/local/mysql/data/mysql-bin	               #binlog日志存放目錄
expire_logs_days = 90           		                   #二進制日志文件過期時間
#slave數據庫binlog參數
server-id = 10                                             #各數據庫id不能相同 
log_slave_updates = 1          		                       #級聯也使用
relay-log = /usr/lcoal/mysql/data/relay-bin                #relady目錄
relay-log-info-file = /usr/local/mysql/data/relay-log.info #info目錄
slave-skip-errors = 1007,1008,1032,1062	                   #跳過主從復制時的錯誤
read-only = 1					                           #從服務器只讀,SQL線程不影響,具有super,root用戶不限制
master-connect-retry = 60			                       #主從復制丟失,重連間隔時間,默認60s
#replicate-ignore-db = mysql			                   #忽略mysql庫不同步
replicate-wild-do-table=testdb1.%
replicate-wild-do-table=testdb2.%
replicate-wild-do-table=testdb3.%
#master半同步開啟參數
rpl_semi_sync_master_enabled = ON
rpl_semi_sync_master_timeout = 10000
#rpl_semi_sync_master_wait_no_slave = ON
#rpl_semi_sync_master_trace_level = 32
#slave半同步開啟參數
rpl_semi_sync_slave_enabled = ON
#rpl_semi_sync_slave_trace_level = 32

back_log = 1000                  		                 #指出在MySQL暫時停止響應新請求之前,短時間內的多少個請求
open_files_limit = 1024        			                 #打開文件的最大個數,如果出現too mantopen files之類的就需要調整該值了

#連接相關
max_connections = 2000	          		                 #指定MySQL允許的最大連接進程數,show global variables like '%connections%'; http://elf8848.iteye.com/blog/1847445  
max_user_connections = 2000                              #單用戶最大的連接數,max_user_connections < 實例 max_user_connections < max_connections
max_connect_errors = 100000                              #默認為10,設置每個主機的連接請求異常中斷的最大次數,超過后會blocked,連接成功后初始0,出現錯誤后需要flush hosts

max_allowed_packet = 8M        			                 #服務器一次能處理的最大的查詢包的值
wait_timeout = 360              		                 #指定一個請求的最大連接時間
interactive_timeout = 360         		                 #連接保持活動的時間
#訪問日志
#general_log = on
#general_log_file = /usr/local/mysql/data/mysql_access.log

#錯誤日志
log_error = /data/mysql/data/mysql_error.log
#慢查詢相關參數
slow_query_log = on            		                   #開啟慢查詢
log-queries-not-using-indexes  		                   #記錄所有沒有使用到索引的查詢語句
long_query_time = 2             	                   #指定多少秒未返回結果的查詢屬於慢查詢
min_examined_row_limit = 5  		                   #記錄那些由於查找了多余5次而引發的慢查詢
log-slow-admin-statements      		                   #記錄那些慢的OPTIMIZE TABLE,ANALYZE TABLE和ALTER TABLE語句
log-slow-slave-statements      		                   #記錄由slave所產生的慢查詢
slow_query_log_file = /usr/local/mysql/data/slow.log   #指定慢查詢日志文件路徑
table_cache = 614  				                       #表分配的內存,物理內存越大,設置就越大
table_open_cache = 512                                 #設置高速緩存表的數目
thread_cache_size = 64                                 #服務器線程緩存數,與內存大小有關(建議大於3G設置為64)
thread_concurrency = 32         	                   #CPU核數的兩倍
query_cache_size = 32M          	                   #指定MySQL查詢緩沖區的大小
query_cache_limit = 2M          	                   #只有小於此設置值的結果才會被緩存
query_cache_min_res_unit = 2k   	                   #設置查詢緩存分配內存的最小單位
key_buffer_size = 512M           	                  #指定用於索引的緩沖區大小,增加它可得到更好的索引處理性能
sort_buffer_size = 2M           	                  #設置查詢排序時所能使用的緩沖區大小,系統默認大小為2MB
join_buffer_size = 1M           	                  #聯合查詢操作所能使用的緩沖區大小
read_buffer_size = 4M           	                  #讀查詢操作所能使用的緩沖區大小
read_rnd_buffer_size = 16M     	 	                  #設置進行隨機讀的時候所使用的緩沖區
thread_stack = 192K             	                  #設置Mysql每個線程的堆棧大小,默認值足夠大,可滿足普通操作
bulk_insert_buffer_size = 8M    	                  #可以適當調整參數至16MB~32MB,建議8MB
#myisam參數引擎相關
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover                  	                 #自動檢查和修復沒有適當關閉的MyISAM表
key_buffer_size = 16M  				                 #myisam索引buffer,只有key沒有data

transaction_isolation = READ-COMMITTED  	        #事務隔離級別
tmp_table_size = 64M            		            #設置內存臨時表最大值
max_heap_table_size = 64M       		            #獨立的內存表所允許的最大容量
#innodb引擎參數相關
default-storage-engine=InnoDB   		           #默認表的類型為InnoDB
innodb_old_blocks_time =1000                       #減小單次的大批量數據查詢,默認為0,調整后性能提升80%                     http://www.cnblogs.com/cenalulu/archive/2012/10/10/2718585.html  
innodb_flush_method = O_DIRECT                     #從innode刷新到磁盤,不經過系統write,fdatasync(默認),O_DSYNC,O_DIRECT http://blog.csdn.net/jiao_fuyou/article/details/16113403  
innodb_additional_mem_pool_size = 16M   	       #設置InnoDB存儲的數據目錄信息和其他內部數據結構的內存池大小
innodb_buffer_pool_size = 51G          	           #InnoDB使用一個緩沖池來保存索引和原始數據,官方建議物理內存的80%
innodb_data_file_path = ibdata1:128M:autoextend    #表空間
innodb_file_io_threads = 4              	       #InnoDB中的文件I/O線程,通常設置為4,innodb除master線程外,還有insert buffer, log, read, write這4種線程,默認各有一個
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 8           	       #服務器有幾個CPU就設置為幾,建議用默認設置,一般設為8
innodb_flush_log_at_trx_commit = 2      	       #設置為0就等於innodb_log_buffer_size隊列滿后再統一存儲,默認為1
innodb_log_buffer_size = 16M    		           #默認為1MB,通常設置為6-8MB就足夠
innodb_log_file_size = 512M     		           #確定日志文件的大小,更大的設置可以提高性能,但也會增加恢復數據庫的時間
innodb_log_files_in_group = 3   		           #為提高性能,MySQL可以以循環方式將日志文件寫到多個文件。推薦設置為3
innodb_max_dirty_pages_pct = 90 		           #InnoDB主線程刷新緩存池中的數據
innodb_lock_wait_timeout = 120  		           #InnoDB事務被回滾之前可以等待一個鎖定的超時秒數
innodb_file_per_table = 1       		           #InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間,0關閉,1開啟
innodb_autoextend_increment = 256                  #這個參數的作用是控制innodb 共享表空間文件自動擴展的大小
[mysqldump]
quick
max_allowed_packet = 64M
[mysqld_safe]
log-error = /usr/local/mysql/data/mysql.err
pid-file = /usr/local/mysql/data/mysqld.pid

查詢innodb分配資源
mysql> show engine innodb status;
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 137363456; in additional pool allocated 0
Dictionary memory allocated 59957
Buffer pool size   8191
Free buffers       8028
Database pages     163
Old database pages 0
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 0, not young 0
0.00 youngs/s, 0.00 non-youngs/s
Pages read 163, created 0, written 1
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 163, unzip_LRU len: 0
I/O sum[0]:cur[0], unzip sum[0]:cur[0]



我們使用的是專用於MySQL的(5.5 Percona的)上運行CentOS的(不同口味),主要128GB的服務器。我們innodb_buffer_pool_size設置為104GB這些和他們也有/ tmp目錄8GB的內存磁盤。他們被大量使用,但從未使用過任何的交換。當然vm.swappiness設置為1,
下面就是我們用較低層的服務器(包括128GB為簡潔起見),他們又從來沒有使用過任何掉期和運行大型數據庫(2-3TB):
128GB RAM:innodb_buffer_pool_size = 104GB 
64GB RAM:innodb_buffer_pool_size = 56G 
32GB RAM:innodb_buffer_pool_size = 28G

在大多數情況下,我們分配(N - 7G)* 0.9。所以對於一個64G的節點,我們最終分配給緩沖池內存〜51G
64GB RAM:innodb_buffer_pool_size = 51G 

https://www.percona.com/blog/2015/06/02/80-ram-tune-innodb_buffer_pool_size/  
http://osxr.org:8080/mysql/ident?_i=back_log&_remember=1  


王導DBA MySQL優化
log_error = localhost3306.err
sync_binlog=1
innodb_old_blocks_time =1000
innodb_flush_method = O_DIRECT
back_log=1000
max_connections = 2000
max_user_connections=2000
min_examined_row_limit =5
skip-slave-start
skip-name-resolve
max_connect_errors = 100000
character-set-server=utf8
collation-server=utf8_bin
binlog_cache_size=32M
query_cache_limit = 2M
tmp_table_size=256M
max_heap_table_size=256M
interactive_timeout=360
wait_timeout=360
log_slave_updates=1
expire_logs_days=60
binlog_format=mixed
tmpdir=/dev/shm
innodb_autoextend_increment = 256
innodb_buffer_pool_instances=8
innodb_additional_mem_pool_size=128M
innodb_max_dirty_pages_pct=80
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_log_file_size = 1G
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table=1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM