說明
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,數據庫、表名大小寫敏感
緩存
max_allowed_packet = 32M
#設置在網絡傳輸中一次消息傳輸量的最大值。系統默認值 爲1MB,最大值是1GB,必須設置1024的倍數。
安全
skip-name-resolve
#禁用DNS反向解析,惟一的侷限是以後GRANT語句中只能使用IP地址了,所以在添加這項設置到一個已有系統中必須注意
服務器
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 -串行
數據結構
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%
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_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_file_per_table = 0
#獨立表空間的設置,默認爲0,則爲共享表空間;若是爲1,則爲獨立表空間
#建議打開, 尤爲是在數據量比較大的,ibdata1文件只會增大,不會減少,大到必定程度會影響insert update 速度,另外若是刪表頻繁的話,共享表空間產生的碎片會比較多,而且沒法向OS回收空間。