mysql5.6—配置詳解

說明
1,紅色代表重點參數
2,“全局緩存”、“線程緩存”,全局緩存是所有線程共享,線程緩存是每個線程連接上數據時創建一個線程(如果沒有設置線程池),假如有200連接、那就是200個線程,如果參數設定值是10M,那麼參數值就是10*200=2000M=2G,很有可能吃垮內存,所以線程緩存並不是像全局緩存一樣設定多少就佔用多少,不可設置過大,一定注意

character-set-server=utf8
#服務器端字符集

collation-server=utf8_bin
#字符集的校隊規則,這裏是個坑,新手得小心
#默認***_ci,ci是 case insensitive, 即 "大小寫不敏感", a 和 A 會在字符判斷中會被當做一樣的;
 ***_bin是二進制數據編譯存儲,大小寫敏感,

lower_case_table_names = 0
#默認爲0,數據庫、表名大小寫敏感


back_log = 600   
#在MYSQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中。如果系統在短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的監聽隊列的大小。默認值50。

max_connections = 3000   
#MySQL允許最大的進程連接數,如果經常出現Too Many Connections的錯誤提示,則需要增大此值,但是該值越大,佔用內存越大。

max_connect_errors = 50
#設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的連接請求,直到mysql服務器重啓或通過flush hosts命令清空此host的相關信息。

wait_timeout=864000
#wait_timeout的初始值是28800,當應用程序持續8小時沒有連接,會啓動切斷與應用程序連接池的關聯,再連接時,會提示wait_timeout錯誤。

external-locking = FALSE  
#使用–skip-external-locking MySQL選項以避免外部鎖定。該選項默認開啓

max_allowed_packet = 32M  
#設置在網絡傳輸中一次消息傳輸量的最大值。系統默認值 爲1MB,最大值是1GB,必須設置1024的倍數。

skip-name-resolve
#禁用DNS反向解析,唯一的侷限是之後GRANT語句中只能使用IP地址了,因此在添加這項設置到一個已有系統中必須注意


slow_query_log=on
#打開慢查詢記錄
slow_query_log_file=mysql-slow
#慢查詢記錄日誌
long_query_time = 1
#記錄執行時間超過N(秒)的查詢

 

server-id = 1
#主從複製時必須設置的參數,並且不能和其他機器重複
log-bin=mysql-bin
#二進制日誌
binlog_cache_size = 4M
#線程緩存 爲每個session 分配的內存,在事務過程中用來存儲二進制日誌的緩存。
#show global status like 'bin%';
#上述語句我們可以得到當前 數據庫binlog_cache_size的使用情況
#+-----------------------+-------+
#| Variable_name         | Value |
#+-----------------------+-------+
#| Binlog_cache_disk_use | ???
#| Binlog_cache_use      | ?????
#Binlog_cache_disk_use表示因爲我們binlog_cache_size設計的內存不足導致緩存二進制日誌用到了臨時文件的次數
#Binlog_cache_use  表示 用binlog_cache_size緩存的次數
#當對應的Binlog_cache_disk_use 值比較大的時候 我們可以考慮適當的調高 binlog_cache_size 對應的值
max_binlog_cache_size =2M
#表示的是binlog 能夠使用的最大cache 內存大小,這個默認就可以
max_binlog_size = 512M
#單binlog文件最大容量,超過則建立新binlog文件
expire_logs_days = 7
#二進制文件自動刪除天數,默認爲0,表示不刪除
#mysql使用flush logs的操作來清除日誌,下面幾種情況會觸發flush logs
#1. 重啓
#2. BINLOG文件大小達到參數max_binlog_size限制
#3. 手工執行命令。
 

#雙主複製、級聯複製時,備主或者級聯節點將所有的操作寫入到binlog
log-slave-updates
#中繼日誌路徑
relay-log = relay-bin
#當slave從庫宕機後,假如relay-log損壞了,導致一部分中繼日誌沒有處理,則自動放棄所有未執行的relay-log,並且重新從master上獲取日誌,這樣就保證了relay-log的完整性。默認情況下該功能是關閉的,將relay_log_recovery的值設置爲 1時,可在slave從庫上開啓該功能,建議開啓。
#relay_log_recovery =1
#這個參數和sync_binlog是一樣的,當設置爲1時,slave的I/O線程每次接收到master發送過來的binlog日誌都要寫入系統緩衝區,然後刷入relay log中繼日誌裏,這樣是最安全的,因爲在崩潰的時候,你最多會丟失一個事務,但會造成磁盤的大量I/O。當設置爲0時,並不是馬上就刷入中繼日誌裏,而是由操作系統決定何時來寫入,雖然安全性降低了,但減少了大量的磁盤I/O操作。這個值默認是0,可動態修改,建議採用默認值。
#sync_relay_log=0
#這個參數和sync_relay_log參數一樣,當設置爲1時,slave的I/O線程每次接收到master發送過來的binlog日誌都要寫入系統緩衝區,然後刷入relay-log.info裏,這樣是最安全的,因爲在崩潰的時候,你最多會丟失一個事務,但會造成磁盤的大量I/O。當設置爲0時,並不是馬上就刷入relay-log.info裏,而是由操作系統決定何時來寫入,雖然安全性降低了,但減少了大量的磁盤I/O操作。這個值默認是0,可動態修改,建議採用默認值。
#sync_relay_log_info=0
 

default-storage-engine = InnoDB
#默認引擎

transaction_isolation = READ-COMMITTED   
# 設定默認的事務隔離級別.可用的級別如下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
# 1.READ UNCOMMITTED-讀未提交2.READ COMMITTE-讀已提交3.REPEATABLE READ -可重複讀4.SERIALIZABLE -串行

 

table_cache = 2000
#設置最大緩存表的個數。默認2000,全局性參數, 緩存表的信息,包括字段、索引等。 使用表緩存的好處是可以更快速地訪問表中的內容。執行flush tables會清空緩存的內容。一般來說,可以通過show status like 'open%tables%'查看數據庫運行峯值時間的狀態值 Open_tables和 Opened_tables ,判斷是否需要增加 table_cache 的值(其中 open_tables 是當前打開的表的數量, Opened_tables 則是已經打開的表的數量)。即如果open_tables接近table_cache的時候,並且Opened_tables這個值在逐步增加,那就要考慮增加這個值的大小了。還有就是Table_locks_waited比較高的時候,也需要增加table_cache。
tmp_table_size = 20M   
#線程緩存 它規定了內部內存臨時表的最大值,每個線程都要分配。(實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。)如果臨時表超出了限制,MySQL就會自動地把它轉化爲基於磁盤的MyISAM表,而內存表則不會。
#如果使用臨時表情況少,可以默認
max_heap_table_size = 256M
#如果不使用內存表,可以默認

thread_cache_size = 64
# 服務器線程緩存這個值表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那麼客戶端的線程將被放到緩存中,如果線程重新被請求,那麼請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那麼這個線程將被重新創建,如果有很多新的線程,增加這個值可以改善系統性能.通過比較 Connections 和 Threads_created 狀態的變量,可以看到這個變量的作用。設置規則如下:1GB 內存配置爲8,2GB配置爲16,3GB配置爲32,4GB或更高內存,可配置更大。
thread_concurrency = 8 
#hread_concurrency變量是針對於Solaris 8及低版本的系統,設置了這個變量mysqld會調用thr_setconcurrency()函數。這個函數允許應用程序給同一時間運行的線程系統提示所需數量的線程。當前的Solaris 版本中這個參數已經沒有作用了。這個參數在mysql 5.6.1中已經被標記爲過時,在5.7.2版本的mysql中被移除。 

query_cache_size = 64M  
#【全局緩存】 前面的文章專門講過這個參數,該參數不適合分配過大。而且在高併發,寫入量大的系統,建議把該功能禁掉。
query_cache_limit = 4M   
#指定單個查詢能夠使用的緩衝區大小,缺省爲1M
query_cache_min_res_unit = 2k   
#默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據查詢,就容易造成內存碎片和浪費
#查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
#如果查詢緩存碎片率超過20%,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數據量的話。
#查詢緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
#查詢緩存利用率在25%以下的話說明query_cache_size設置的過大,可適當減小;查詢緩存利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。
#查詢緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%


read_buffer_size = 1M 
#線程緩存 MySql讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySql會爲它分配一段內存緩衝區。read_buffer_size變量控制這一緩衝區的大小。如果對錶的順序掃描請求非常頻繁,並且你認爲頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩衝區大小提高其性能。和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。
read_rnd_buffer_size = 16M
#線程緩存MySql的隨機讀(查詢操作)緩衝區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySql會首先掃描一遍該緩衝,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySql會爲每個客戶連接發放該緩衝空間,所以應儘量適當設置該值,以避免內存開銷過大。
sort_buffer_size = 2M 
#線程緩存 Sort_Buffer_Size 是一個connection級參數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設置的內存。
# Sort_Buffer_Size 並不是越大越好,由於是connection級的參數,過大的設置+高併發可能會耗盡系統內存資源。例如:500個連接將會消耗 500*sort_buffer_size(8M)=4G內存
# Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行內存分配,導致效率降低。
# explain select*from table where order limit;出現filesort
max_length_for_sort_data= 1024
# mysql排序使用sort_buffer_size和max_length_for_sort_data兩種方式,如果查詢列和orderby列的長度和值會大於1024,將使用max_length_for_sort_data,
# 可以默認
join_buffer_size = 2M  
#線程緩存 用於表間關聯緩存的大小,和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。
bulk_insert_buffer_size = 64M   
# 多值的 INSERT 或者 LOAD DATA 是往一個非空的數據表裏增加記錄,通過調整該參數可以有效提高插入效率,默認爲8M

 

key_buffer_size = 2048M
# 【全局緩存】 針對MyISAM引擎,批定用於索引的緩衝區大小,增加它可以得到更好的索引處理性能,對於內存在4GB左右的服務器來說,該參數可設置爲256MB或384MB。
myisam_sort_buffer_size = 128M   
# MyISAM表發生變化時重新排序所需的緩衝
myisam_max_sort_file_size = 10G   
# MySQL重建索引時所允許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引會通過鍵值緩衝創建(更慢)
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1   
# 如果一個表擁有超過一個索引, MyISAM 可以通過並行排序使用超過一個線程去修復他們.
# 這對於擁有多個CPU以及大量內存情況的用戶,是一個很好的選擇.
myisam_recover  
#自動檢查和修復沒有適當關閉的 MyISAM 表

 

innodb_buffer_pool_size = 2048M  
#【全局緩存】 這對Innodb表來說非常重要。Innodb相比MyISAM表對緩衝更爲敏感。MyISAM可以在默認的 key_buffer_size 設置下運行的可以,然而Innodb在默認的innodb_buffer_pool_size 設置下卻跟蝸牛似的。由於Innodb把數據和索引都緩存起來,無需留給操作系統太多的內存,因此如果只需要用Innodb的話則可以設置它高達 70-80% 的可用內存(注意,這裏是可用,不是內存總量)。

innodb_additional_mem_pool_size = 16M
#【全局緩存】 這個參數用來設置 InnoDB 存儲的數據目錄信息和其它內部數據結構的內存池大小,類似於Oracle的library cache。
#可以默認

innodb_data_file_path = ibdata1:1024M:autoextend  
#表空間文件 重要數據
#可以默認

innodb_read_io_threads
#讀線程數,默認爲4

innodb_write_io_threads
#寫線程數,默認爲4

innodb_thread_concurrency =0  
#併發線程數量,默認是0即不限制,取值範圍0-1000,不可動態修改
#可以默認

innodb_flush_log_at_trx_commit = 1 
# 如果將此參數設置爲1,將在每次提交事務後將日誌寫入磁盤。爲提供性能,可以設置爲0或2,但要承擔在發生故障時丟失數據的風險。
# 默認值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬盤,這是很費時的。設成2對於很多運用,它的意思是不寫入硬盤而是寫入系統緩存。日誌仍然會每秒flush到硬 盤,所以你一般不會丟失超過1-2秒的更新。
# 設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的數據;設置成2只會在整個操作系統 掛了時纔可能丟數據;設置成1是最安全的設置,性能也是相對最弱的。

innodb_log_buffer_size = 1M 
#【全局緩存】 這項配置決定了爲尚未執行的事務分配的緩存。其默認值(1MB)一般來說已經夠用了,但是如果你的事務中包含有二進制大對象或者大文本字段的話,這點緩存很快就會被填滿並觸發額外的I/O操作。看看Innodb_log_waits狀態變量,如果它不是0,增加innodb_log_buffer_size。MySQL開發人員建議設置爲1-8M之間

innodb_log_file_size = 500M
#redo日誌的大小,redo日誌被用於確保寫操作快速而可靠並且在崩潰時恢復。一直到MySQL 5.5,redo日誌的總尺寸被限定在4GB(默認可以有2個log文件)。這在MySQL 5.6裏被提高。如果把innodb_log_file_size設置成512M(這樣有1GB的redo日誌)會使你有充裕的寫操作空間。一般設置爲256~512M

innodb_log_files_in_group = 3  
#爲提高性能,MySQL可以以循環方式將日誌文件寫到多個文件。默認爲2,推薦設置爲3M

innodb_max_dirty_pages_pct = 75
# Buffer_Pool中Dirty_Page(髒頁)所佔的數量,直接影響InnoDB的關閉時間。參數innodb_max_dirty_pages_pct 可以直接控制了Dirty_Page在Buffer_Pool中所佔的比率,而且幸運的是innodb_max_dirty_pages_pct是可以動態改變的。所以,在關閉InnoDB之前先將innodb_max_dirty_pages_pct調小,強制數據塊Flush一段時間,則能夠大大縮短 MySQL關閉的時間。
#可以默認

innodb_lock_wait_timeout = 50
# InnoDB 有其內置的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別死鎖。爲消除這種可能性,可以將innodb_lock_wait_timeout設置爲一個整數值,指示 MySQL在允許其他事務修改那些最終受事務回滾的數據之前要等待多長時間(秒數)
# 當事務等待一個鎖的時間 ,如果超過時間則回滾
# 根據需要設置等待時間

innodb_print_all_deadlocks = 1
# 將死鎖信息打印到錯誤日誌裏。5.6版本開始的纔有的參數

innodb_file_per_table = 0  
# 獨立表空間的設置,默認爲0,則爲共享表空間;如果爲1,則爲獨立表空間
# 建議打開, 尤其是在數據量比較大的,ibdata1文件只會增大,不會減小,大到一定程度會影響insert  update 速度,另外如果刪表頻繁的話,共享表空間產生的碎片會比較多,並且無法向OS回收空間。

innodb_buffer_pool_load_at_startup = 1
# 默認爲關閉OFF。如果開啓該參數,啓動MySQL服務時,MySQL將本地熱數據加載到InnoDB緩衝池中。
# 在MySQL啓動時會延長啓動時間
innodb_buffer_pool_dump_at_shutdown = 1
# 默認爲關閉OFF。如果開啓該參數,停止MySQL服務時,InnoDB將InnoDB緩衝池中的熱數據保存到本地硬盤。
# 在MySQL關閉時會延長關閉時間

 

[mysqldump]
quick
max_allowed_packet = 32M

[mysqld_safe]
log-error=/data/3306/mysql_oldboy.err
pid-file=/data/3306/mysqld.pid

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