MySQL(my.ini)配置文件詳解

說明
1,紅色表明重點參數
2,「全局緩存」、「線程緩存」,全局緩存是全部線程共享,線程緩存是每一個線程鏈接上數據時建立一個線程(若是沒有設置線程池),假若有200鏈接、那就是200個線程,若是參數設定值是10M,那麼參數值就是10*200=2000M=2G,頗有可能吃垮內存,因此線程緩存並非像全局緩存同樣設定多少就佔用多少,不可設置過大,必定注意

mysql

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

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. 手工執行命令。

網絡


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

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_file_per_table = 0  
#獨立表空間的設置,默認爲0,則爲共享表空間;若是爲1,則爲獨立表空間
#建議打開, 尤爲是在數據量比較大的,ibdata1文件只會增大,不會減少,大到必定程度會影響insert  update 速度,另外若是刪表頻繁的話,共享表空間產生的碎片會比較多,而且沒法向OS回收空間。

[mysqldump] quick max_allowed_packet = 32M [mysqld_safe] log-error=/data/3306/mysql_oldboy.err pid-file=/data/3306/mysqld.pid
相關文章
相關標籤/搜索