MySQL配置文件参数详解
[client]
port = 3307
socket = /usr/local/mysql5_6/mysql.sock
default-character-set=utf8
[mysql]
prompt = mysql(\\u@\h-\R:\\m:\\s [\\d])>
#提示當前數據庫操作用戶名、庫名、時間等
default-character-set=utf8
[mysqld]
basedir = /usr/local/mysql5_6
datadir = /usr/local/mysql5_6/data
port = 3307
server_id = 111
socket = /usr/local/mysql5_6/mysql.sock
log-error = /usr/local/mysql5_6/error.log
pid-file = /usr/local/mysql5_6/mysql.pid
character-set-server=utf8
max_connections = 3000
#MySQL允許最大的進程連接數,如果經常出現Too Many Connections的錯誤提示,則需要增大此值。
skip-external-locking
skip-name-resolve
max_allowed_packet = 32M
#設置在網絡傳輸中一次消息傳輸量的最大值。系統默認值 為1MB,最大值是1GB,必須設置1024的倍數。
wait_timeout = 28800
#結束回話等待時間
thread_cache_size = 64
#服務器線程緩存這個值表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那么客戶端的線程將被放到緩存中,如果線程重新被請求,那么請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那么這個線程將被重新創建,如果有很多新的線程,增加這個值可以改善系統性能.通過比較Connections 和 Threads_created 狀態的變量,可以看到這個變量的作用。設置規則如下:1GB 內存配置為8,2GB配置為16,3GB配置為32,4GB或更高內存,可配置更大。
explicit_defaults_for_timestamp=true
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%
tmp_table_size = 128M
# tmp_table_size 的默認大小是 32M。如果一張臨時表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,如果你做很多高級 GROUP BY 查詢,增加 tmp_table_size 值。如果超過該值,則會將臨時表寫入磁盤。
thread_concurrency = 32
#設置thread_concurrency的值的正確與否,對mysql的性能影響很大,在多個cpu(或多核)的情況下,錯誤設置了thread_concurrency的值,會導致mysql不能充分利用多cpu(或多核),出現同一時刻只能一個cpu(或核)在工作的情況。thread_concurrency應設為CPU核數的2倍比如有一個雙核的CPU,那么thread_concurrency的應該為4;2個雙核的cpu, thread_concurrency的值應為8
open_files_limit = 10240
#每個客戶端的連接也是一個文件句柄。
back_log = 2048
#在MYSQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中。如果系統在短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的監聽隊列的大小。
innodb_flush_log_at_trx_commit = 1
#每次commit 日志緩存中的數據刷到磁盤中
innodb_lock_wait_timeout = 50
#InnoDB事務在被回滾之前可以等待一個鎖定的超時秒數。InnoDB在它自己的鎖定表中自動檢測事務死鎖并且回滾事務。InnoDB用LOCKTABLES語句注意到鎖定設置。默認值是50秒
#innodb_auto_extend_increment = 64M
#可幫助降低碎片
innodb_buffer_pool_size = 8192M
#這對Innodb表來說非常重要。Innodb相比MyISAM表對緩沖更為敏感。MyISAM可以在默認的key_buffer_size設置下運行的可以,然而Innodb在默認的innodb_buffer_pool_size設置下卻跟蝸牛似的。由于Innodb把數據和索引都緩存起來,無需留給操作系統太多的內存,因此如果只需要用Innodb的話則可以設置它高達70-80%的可用內存。一些應用于 key_buffer 的規則有 — 如果你的數據量不大,并且不會暴增,那么無需把innodb_buffer_pool_size 設置的太大了
innodb_log_buffer_size = 16M
#此參數確定些日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據
innodb_buffer_pool_instances = 8
#用于優化更高并發的負載
innodb_log_file_size = 60M
#此參數確定數據日志文件的大小,以M為單位,更大的設置可以提高性能,但也會增加恢復故障數據庫所需的時間
innodb_log_files_in_group = 3M
#為提高性能,MySQL可以以循環方式將日志文件寫到多個文件。推薦設置為3M
innodb_io_capacity = 400
#InnoDB曾經在代碼里寫死了假設服務器運行在每秒100個I/O操作的單硬盤上。默認值很糟糕。現在可以告訴InnoDB服務器有多大的I/O能力。有時需要把這個值設置得相當高(像SSD這樣極快的存儲設備上需要設置為上萬)才能穩定地刷新臟頁。
innodb_write_io_threads = 4
#文件IO的線程數,一般為 4,但是在 Windows 下,可以設置得較大。
innodb_read_io_threads = 4
#文件IO的線程數,一般為 4,但是在 Windows 下,可以設置得較大。
innodb_thread_concurrency = 8
#服務器有幾個CPU就設置為幾,建議用默認設置,一般為8
innodb_file_per_table = ON
#其默認值在mysql5.6.6+后為ON。開啟此選項后,關于InnoDB表的數據和索引單獨存儲在自己的表空間中(.ibd結尾的文件)。否則,存儲在系統的表空間中(ibdata)。
innodb_print_all_deadlocks = 1
#死鎖信息打印到錯誤日志里
#------快速預熱Buffer_Pool緩沖池-------#
#在之前的版本里,如果一臺高負荷的機器重啟后,內存中大量的熱數據被清空,此時就會重新從磁盤加載到Buffer_Pool緩沖池里,這樣當高峰期間,性能就會變得很差,連接數就會很高。在關閉MySQL時,會把內存中的熱數據保存在磁盤里ib_buffer_pool文件中,位于數據目錄下,在啟動后,會自動加載熱數據到Buffer_Pool緩沖池里。
innodb_buffer_pool_dump_at_shutdown = 1
#在關閉時把熱數據dump到本地磁盤。
innodb_buffer_pool_dump_now = 1
#采用手工方式把熱數據dump到本地磁盤。
innodb_buffer_pool_load_at_startup = 1
#在啟動時把熱數據加載到內存。
innodb_buffer_pool_load_now = 1
#采用手工方式把熱數據加載到內存。
table_open_cache = 4096
#從官方文檔看出在MySQL5.6.8+開始默認值為2000,就能簡單的判斷出原來默認值是不夠的??梢酝ㄟ^觀察Opened_tables其值及其一段時間的變化來檢查該變量。如果看到Opened_tables的值很大并且又不經常執行FLUSH TABLES(執行其命令強制所有的表重新關閉且打開),那么可能你應該增加該變量的值。
max_connect_errors = 1000
#設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的連接請求,直到mysql服務器重啟或通過flushhosts命令清空此host的相關信息。
expire_logs_days = 7
#如果啟用了二進制日志,應該打開這個選項,可以讓服務器在指定的天數之后清理舊的二進制日志。如果不啟用,最終服務器的空間會被耗盡,導致服務器卡住或崩潰。
sort_buffer_size = 1M
#Sort_Buffer_Size是一個connection級參數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設置的內存。Sort_Buffer_Size并不是越大越好,由于是connection級的參數,過大的設置+高并發可能會耗盡系統內存資源。例如:500個連接將會消耗500*sort_buffer_size(8M)=4G內存,Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行內存分配,導致效率降低。
join_buffer_size = 8M
#用于表間關聯緩存的大小,和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。
read_buffer_size = 1M
#MySql讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySql會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小。如果對表的順序掃描請求非常頻繁,并且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能。和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。
read_rnd_buffer_size = 16M
#MySql的隨機讀(查詢操作)緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySql會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySql會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大。
myisam_sort_buffer_size = 256M
# MyISAM表發生變化時重新排序所需的緩沖
bulk_insert_buffer_size = 64M
#批量插入數據緩存大小,可以有效提高插入效率,默認為8M
key_buffer_size = 1024M
#批定用于索引的緩沖區大小,增加它可以得到更好的索引處理性能,對于內存在4GB左右的服務器來說,該參數可設置為256MB或384MB。
myisam_max_sort_file_size = 10G
# MySQL重建索引時所允許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE)如果文件大小比此值更大,索引會通過鍵值緩沖創建(更慢)
#-------------------mysql5.6的主從增加了不少參數,提升了主從同步的安全和效率,以下主從參數詳解--------------------#
server-id=1
binlog-format=ROW
log-bin=master-bin.log
log-bin-index=master-bin.index
log-slave-updates=true
#gtid-mode=on
#enforce-gtid-consistency=true
#這兩個參數是啟用mysql5.6中的UUID同步模式,兩個參數必須一起打開,否則報錯,slave在做同步復制時,無須找到binlog日志和POS點,直接change master to master_auto_position=1即可,自動找點同步。
#GTID的局限性: (鑒于這些局限性,慎用,因此做了關閉處理)
#1.CREATE TABLE...SELECT語句不支持。因為該語句會被拆分成createtable和insert兩個事務,并且這個兩個事務被分配了同一個GTID,這會導致insert被備庫忽略掉。
#2.不支持CREATE TEMPORARY TABLE、DROP TEMPORARY TABLE 臨時表操作。
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
#默認是0,不開啟,最大并發數為1024個線程。主從復制啟用4個sql線程,提高從服務器吞吐量,減少延遲,使用并發的 SQL 線程對不同數據庫并行應用事件
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log-events=1
#這四個參數是啟用binlog/relaylog的校驗,防止日志出錯
sync_binlog=1
#默認情況下,并不是每次寫入時都將binlog與硬盤同步。因此如果操作系統或機器(不僅僅是MySQL服務器)崩潰,有可能binlog中最后的語句丟失了。要想防止這種情況,你可以使用sync_binlog全局變量(1是最安全的值,但也是最慢的),使binlog在每N次binlog寫入后與硬盤同步。即使sync_binlog設置為1,出現崩潰時,也有可能表內容和binlog內容之間存在不一致性。如果使用InnoDB表,MySQL服務器處理COMMIT語句,它將整個事務寫入binlog并將事務提交到InnoDB中。如果在兩次操作之間出現崩潰,重啟時,事務被InnoDB回滾,但仍然存在binlog中??梢杂?-innodb-safe-binlog選項來增加InnoDB表內容和binlog之間的一致性。(注釋:在MySQL5.1中不需要--innodb-safe-binlog;由于引入了XA事務支持,該選項作廢了),該選項可以提供更大程度的安全,使每個事務的binlog(sync_binlog=1)和(默認情況為真)InnoDB日志與硬盤同步,該選項的效果是崩潰后重啟時,在滾回事務后,MySQL服務器從binlog剪切回滾的InnoDB事務。這樣可以確保binlog反饋InnoDB表的確切數據等,并使從服務器保持與主服務器保持同步(不接收 回滾的語句)。
relay_log_purge = 1
relay_log_recovery = 1
#這兩個是啟用relaylog的自動修復功能,避免由于網絡之類的外因造成日志損壞,主從停止。
slave-skip-errors = 1062
binlog_cache_size = 4M
max_binlog_cache_size = 2G
#指定binary log緩存的最大容量,如果設置的過小,則在執行復雜查詢語句時MySQL會出錯。
max_binlog_size = 1G
#指定binary log文件的最大容量,默認為1GB
[mysqldump]
quick
max_allowed_packet = 2048M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
本文轉自aaron428 51CTO博客,原文鏈接http://blog.51cto.com/aaronsa/1740634:,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的MySQL配置文件参数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统目录结构,文件类型以及ls
- 下一篇: robotframwork接口测试(五)