查看配置參數可以用下面的命令:
show variables like '%innodb%'; #查看innodb相關配置參數
show status like '%innodb%'; #查看innodb相關的運行時參數
show global status like 'open%tables'; # 查看全局的運行時參數,加上global是對當前mysql服務器中運行的所有數據庫實例進行統計。不加global則只對當前數據庫實例進行統計。
my.cnf參數配置
[client]
port = 3306
socket = /opt/mysql/data/mysql.sock
default-character-set = utf8 # 設置mysql客戶端默認字符集
[mysqld]
port = 3306 # mysql服務端默認監聽(listen on)的TCP/IP端口
socket = /opt/mysql/data/mysql.sock
skip-external-locking #不使用系統鎖定,要使用myisamchk,必須關閉服務器
skip-name-resolve #禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。
key_buffer_size = 64M #myisam索引buffer,只有key沒有data
max_allowed_packet = 20M
table_cache=3096 #用於設置table高速緩存的數量。
table_open_cache = 6144 #表描述符緩存大小,可減少文件打開/關閉次數
table_definition_cache=4096 #默認400
tmp_table_size=64M # 內存中的每個臨時表允許的最大大小。如果臨時表大小超過該值,臨時表將自動轉爲基於磁盤的表
max_heap_table_size=64M #該變量設置MEMORY (HEAP)表可以增長到的最大空間大小
sort_buffer_size = 512k #排序buffer大小;線程級別
read_buffer_size = 512k #讀查詢操作所能使用的緩衝區大小。
read_rnd_buffer_size = 512K#MyISAM以索引掃描(Random Scan)方式掃描數據的buffer大小;線程級別
join_buffer_size=512K #聯合查詢操作所能使用的緩衝區大小。
myisam_sort_buffer_size = 64M#MyISAM 設置恢復表之時使用的緩衝區的尺寸,當在REPAIR TABLE或用CREATE INDEX創建索引或ALTER TABLE過程中排序 MyISAM索引分配的緩衝區
query_cache_type=0
query_cache_size= 0 # 查詢緩存大小,用於緩存SELECT查詢結果。
bulk_insert_buffer_size=32M #默認8M參數來提高數據插入的效率,這個參數設置的是 bulk insert 的緩存大小
thread_cache_size = 64 #緩存的最大線程數。
thread_stack=256K
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
character_set_server = utf8 # 服務端使用編碼的utf8字符集
max_connection=1024 #mysql服務器支持的最大併發連接數據(用戶數)
max_user_connections=1000
max_connect_errors=10000 #如果某個用戶發起的連接error超過該數值,則該用戶的下次連接將被阻塞,直到管理員執行flush hosts ; 命令;防止黑客
wait_timeout=100 #等待關閉連接的時間
connect_timeout = 20#連接超時之前的最大秒數,在Linux平臺上,該超時也用作等待服務器首次迴應的時間
interactive_timeout=100 #關閉連接之前,允許interactive_timeout(取代了wait_timeout)秒的不活動時間。客戶端的會話wait_timeout變量被設爲會話interactive_timeout變量的值。
back_log = 500 #back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。默認值爲50。對於Linux系統推薦設置爲小於512的整數。
server-id = 1
###################binlog############
log-bin=/opt/mysql/logs/mysql-bin
binlog_format=row
max_binlog_size=128M
binlog_cache_size=2M #session級別
expire-logs-days = 5 #保存5天binlog日誌
###################replication################
slave-net-timeout=10 #默認3600 #從服務器也能夠處理網絡連接中斷。但是,只有從服務器超過slave_net_timeout秒沒有從主服務器收到數據才通知網絡中斷
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_wait_no_slave=1
rpl_semi_sync_master_timeout=1000
skip-slave-start #啓動mysql,不啓動複製
log_slave_updates=1
relay_log_recovery=1
#############slow log 慢查詢###########
slow_query_log =1 #1爲開啓慢查詢 on
slow_query_log_file=/opt/mysql/logs/mysql.slow #慢查詢的日誌目錄
long_query_time=2 #慢查詢時間 超過2秒則爲慢查詢
##################errlog################
log-error=/opt/mysql/logs/error.log #日誌目錄
############## InnoDB###########
innodb_buffer_pool_size =11G # InnoDB使用緩衝池來緩存索引和行數據。該值設置的越大,則磁盤IO越少。一般將該值設爲物理內存的80%。我一般都是設置物理內存70%。16G內存算的
innodb_buffer_pool_instances=8 #默認1
innodb_additional_mem_pool_size = 16M # InnoDB用於存儲元數據信息的內存池大小
innodb_flush_log_at_trx_commit = 2 # 事務相關參數,如果值爲1,則InnoDB在每次commit都會將事務日誌寫入磁盤(磁盤IO消耗較大),這樣保證了完全的ACID特性。而如果設置爲0,則表示事務日誌寫入內存log和內存log寫入磁盤的頻率都爲1次/秒。如果設爲2則表示事務日誌在每次commit都寫入內存log,但內存log寫入磁盤的頻率爲1次/秒。
innodb_log_buffer_size=64M # InnoDB日誌數據緩衝大小,如果緩衝滿了,就會將緩衝中的日誌數據寫入磁盤(flush)。由於一般至少都1秒鐘會寫一次磁盤,所以沒必要設置過大,即使是長事務。
innodb_log_file_size=1024M # 每一個InnoDB事務日誌的大小。一般設爲innodb_buffer_pool_size的25%到100%
innodb_log_files_in_group=3 #默認2
innodb_lock_wait_timeout = 10 #默認50
innodb_sync_spin_loops =40 #默認30
innodb_max_dirty_pages_pct=90 #與檢查點有關係,默認75
innodb_support_xa=1 #有0、1、2三個值分別代表不同的使redo log落地策略。0表示每秒進行一次flush,但是每次事務commit不進行任何操作(每秒調用fsync使數據落地到磁盤,不過這裏需要注意如果底層存儲有cache,比如raid cache,那麼這時也不會真正落地,但是由於一般raid卡都帶有備用電源,所以一般都認爲此時數據是安全的)。1代表每次事務提交都會進行flush,這是最安全的模式。2表示每秒flush,每次事務提交時不flush,而是調用write將redo log buffer裏面的redo log刷到os page cache。
innodb_thread_concurrency=0 #默認爲0
innodb_thread_sleep_delay=500 #默認10000
innodb_concurrency_tickets=1000 #默認500
innodb_flush_method= O_DIRECT #這個參數控制着innodb數據文件及redo log的打開、刷寫模式,對於這個參數,文檔上是這樣描述的:
有三個值:fdatasync(默認),O_DSYNC,O_DIRECT
默認是fdatasync,調用fsync()去刷數據文件與redo log的buffer
爲O_DSYNC時,innodb會使用O_SYNC方式打開和刷寫redo log,使用fsync()刷寫數據文件
爲O_DIRECT時,innodb使用O_DIRECT打開數據文件,使用fsync()刷寫數據文件跟redo log
innodb_file_per_table #開啓獨立表空間
innodb_read_io_threads=8 #用於從磁盤讀文件塊的線程數
inodb_write_io_threads=8 #用於寫髒頁的線程數
inodb_io_capacity = 2000
innodb_file_format=Barracuda #有兩參數1.Antelope(默認),2. Barracuda 注意在安裝數據庫時就要調整
innodb_purge_threads=1 #默認0在之前版本,碎片回收操作是主線程的一部分,這經定期調度的方式運行,但會阻塞數據庫的其他操作;到5.5以後,可以將這個線程獨立出來 ;方法:innodb_purge_threads =1
這個應該能讓碎片回收得更及時而且不影響其他線程的操作;
innodb_purge_batch_size=32 #是否開啓獨立的線程清除undo頁,默認是0不開啓,每次刪除的頁數由Innodb_purge_batch_size控制,默認是20
innodb_old_blocks_pct=75 #默認37一個是sublist of old blocks區域(不經常訪問的數據)
innodb_change_buffering=all #默認all
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
per_thread_buffers內存的計算公式:
(read_buffer_size+read_rnd_buffer_size+sort_buffer_size+thread_stack+join_buffer_size+binlog_cache_size)*max_connections
global_buffers內存的計算公式:
innodb_buffer_pool_size+innodb_additional_mem_pool_size+innodb_log_buffer_size+key_buffer_size+query_cache_size
per_thread_buffers+global_buffers 設置不能大於實際物理內存,否則當併發最很高時會造成內存溢出,系統死機。
本文出自 “飛鴻沓膤” 博客,請務必保留此出處http://jxzhfei.blog.51cto.com/1382161/1544266