mysql配置參數詳解

查看配置參數可以用下面的命令:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章