| sql_mode = NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER |
#sql_mode,定義了mysql應(yīng)該支持的sql語法,數(shù)據(jù)校驗(yàn)等! NO_AUTO_CREATE_USER:禁止GRANT創(chuàng)建密碼為空的用戶。 |
|
#NO_ENGINE_SUBSTITUTION 如果需要的存儲(chǔ)引擎被禁用或未編譯,可以防止自動(dòng)替換存儲(chǔ)引擎 |
| key_buffer_size = 32M |
#索引塊的緩沖區(qū)大小,對(duì)MyISAM表性能影響最大的一個(gè)參數(shù).決定索引處理的速度,尤其是索引讀的速度。默認(rèn)值是16M,通過檢查狀態(tài)值Key_read_requests |
|
#和Key_reads,可以知道key_buffer_size設(shè)置是否合理 |
| max_allowed_packet = 512M |
#一個(gè)查詢語句包的最大尺寸。消息緩沖區(qū)被初始化為net_buffer_length字節(jié),但是可在需要時(shí)增加到max_allowed_packet個(gè)字節(jié)。 |
|
#該值太小則會(huì)在處理大包時(shí)產(chǎn)生錯(cuò)誤。如果使用大的BLOB列,必須增加該值。 |
|
#這個(gè)值來限制server接受的數(shù)據(jù)包大小。有時(shí)候大的插入和更新會(huì)受max_allowed_packet 參數(shù)限制,導(dǎo)致寫入或者更新失敗。 |
| thread_stack = 256K |
#線程緩存;主要用來存放每一個(gè)線程自身的標(biāo)識(shí)信息,如線程id,線程運(yùn)行時(shí)基本信息等等,我們可以通過 thread_stack 參數(shù)來設(shè)置為每一個(gè)線程棧分配多大的內(nèi)存。 |
| sort_buffer_size = 16M |
#是MySQL執(zhí)行排序使用的緩沖大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。 |
|
#如果不能,可以嘗試增加sort_buffer_size變量的大小。 |
| read_buffer_size = 16M |
#是MySQL讀入緩沖區(qū)大小。對(duì)表進(jìn)行順序掃描的請(qǐng)求將分配一個(gè)讀入緩沖區(qū),MySQL會(huì)為它分配一段內(nèi)存緩沖區(qū)。read_buffer_size變量控制這一緩沖區(qū)的大小。 |
|
#如果對(duì)表的順序掃描請(qǐng)求非常頻繁,并且你認(rèn)為頻繁掃描進(jìn)行得太慢,可以通過增加該變量值以及內(nèi)存緩沖區(qū)大小提高其性能。 |
| join_buffer_size = 16M |
#應(yīng)用程序經(jīng)常會(huì)出現(xiàn)一些兩表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的時(shí)候(all/index join),為了減少參與Join的“被驅(qū)動(dòng)表”的 |
|
#讀取次數(shù)以提高性能,需要使用到 Join Buffer 來協(xié)助完成 Join操作。當(dāng) Join Buffer 太小,MySQL 不會(huì)將該 Buffer 存入磁盤文件, |
|
#而是先將Join Buffer中的結(jié)果集與需要 Join 的表進(jìn)行 Join 操作, |
|
#然后清空 Join Buffer 中的數(shù)據(jù),繼續(xù)將剩余的結(jié)果集寫入此 Buffer 中,如此往復(fù)。這勢(shì)必會(huì)造成被驅(qū)動(dòng)表需要被多次讀取,成倍增加 IO 訪問,降低效率。 |
| read_rnd_buffer_size = 32M |
#是MySQL的隨機(jī)讀緩沖區(qū)大小。當(dāng)按任意順序讀取行時(shí)(例如,按照排序順序),將分配一個(gè)隨機(jī)讀緩存區(qū)。進(jìn)行排序查詢時(shí),MySQL會(huì)首先掃描一遍該緩沖,以避免磁盤搜索, |
|
#提高查詢速度,如果需要排序大量數(shù)據(jù),可適當(dāng)調(diào)高該值。但MySQL會(huì)為每個(gè)客戶連接發(fā)放該緩沖空間,所以應(yīng)盡量適當(dāng)設(shè)置該值,以避免內(nèi)存開銷過大。 |
| net_buffer_length = 16K |
#通信緩沖區(qū)在查詢期間被重置到該大小。通常不要改變?cè)搮?shù)值,但是如果內(nèi)存不足,可以將它設(shè)置為查詢期望的大小。 |
|
#(即,客戶發(fā)出的SQL語句期望的長(zhǎng)度。如果語句超過這個(gè)長(zhǎng)度,緩沖區(qū)自動(dòng)地被擴(kuò)大,直到max_allowed_packet個(gè)字節(jié)。) |
| myisam_sort_buffer_size = 128M |
#當(dāng)對(duì)MyISAM表執(zhí)行repair table或創(chuàng)建索引時(shí),用以緩存排序索引;設(shè)置太小時(shí)可能會(huì)遇到” myisam_sort_buffer_size is too small” |
| bulk_insert_buffer_size = 32M |
#默認(rèn)8M,當(dāng)對(duì)MyISAM非空表執(zhí)行insert … select/ insert … values(…),(…)或者load data infile時(shí),使用樹狀cache緩存數(shù)據(jù),每個(gè)thread分配一個(gè); |
|
#注:當(dāng)對(duì)MyISAM表load 大文件時(shí),調(diào)大bulk_insert_buffer_size/myisam_sort_buffer_size/key_buffer_size會(huì)極大提升速度 |
| thread_cache_size = 384 |
#thread_cahe_size線程池,線程緩存。用來緩存空閑的線程,以至于不被銷毀,如果線程緩存在的空閑線程,需要重新建立新連接, |
|
#則會(huì)優(yōu)先調(diào)用線程池中的緩存,很快就能響應(yīng)連接請(qǐng)求。每建立一個(gè)連接,都需要一個(gè)線程與之匹配。 |
| query_cache_size = 0 |
#工作原理: 一個(gè)SELECT查詢?cè)贒B中工作后,DB會(huì)把該語句緩存下來,當(dāng)同樣的一個(gè)SQL再次來到DB里調(diào)用時(shí),DB在該表沒發(fā)生變化的情況下把結(jié)果從緩存中返回給Client。 |
|
#在數(shù)據(jù)庫寫入量或是更新量也比較大的系統(tǒng),該參數(shù)不適合分配過大。而且在高并發(fā),寫入量大的系統(tǒng),建系把該功能禁掉。 |
| query_cache_type = 0 |
#決定是否緩存查詢結(jié)果。這個(gè)變量有三個(gè)取值:0,1,2,分別代表了off、on、demand。 |
| tmp_table_size = 1024M |
#它規(guī)定了內(nèi)部?jī)?nèi)存臨時(shí)表的最大值,每個(gè)線程都要分配。(實(shí)際起限制作用的是tmp_table_size和max_heap_table_size的最小值。) |
|
#如果內(nèi)存臨時(shí)表超出了限制,MySQL就會(huì)自動(dòng)地把它轉(zhuǎn)化為基于磁盤的MyISAM表,存儲(chǔ)在指定的tmpdir目錄下 |
| max_heap_table_size = 512M |
#獨(dú)立的內(nèi)存表所允許的最大容量.# 此選項(xiàng)為了防止意外創(chuàng)建一個(gè)超大的內(nèi)存表導(dǎo)致永盡所有的內(nèi)存資源. |
| open_files_limit = 10240 |
#mysql打開最大文件數(shù) |
| max_connections = 2000 |
#MySQL無論如何都會(huì)保留一個(gè)用于管理員(SUPER)登陸的連接,用于管理員連接數(shù)據(jù)庫進(jìn)行維護(hù)操作,即使當(dāng)前連接數(shù)已經(jīng)達(dá)到了max_connections。 |
|
#因此MySQL的實(shí)際最大可連接數(shù)為max_connections+1; |
|
#這個(gè)參數(shù)實(shí)際起作用的最大值(實(shí)際最大可連接數(shù))為16384,即該參數(shù)最大值不能超過16384,即使超過也以16384為準(zhǔn); |
|
#增加max_connections參數(shù)的值,不會(huì)占用太多系統(tǒng)資源。系統(tǒng)資源(CPU、內(nèi)存)的占用主要取決于查詢的密度、效率等; |
|
#該參數(shù)設(shè)置過小的最明顯特征是出現(xiàn)”Too many connections”錯(cuò)誤; |
| max-user-connections = 0 |
#用來限制用戶資源的,0不限制;對(duì)整個(gè)服務(wù)器的用戶限制 |
| max_connect_errors = 100000 |
#max_connect_errors是一個(gè)MySQL中與安全有關(guān)的計(jì)數(shù)器值,它負(fù)責(zé)阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。max_connect_errors的值與性能并無太大關(guān)系。 |
|
#當(dāng)此值設(shè)置為10時(shí),意味著如果某一客戶端嘗試連接此MySQL服務(wù)器,但是失敗(如密碼錯(cuò)誤等等)10次,則MySQL會(huì)無條件強(qiáng)制阻止此客戶端連接。 |
| table_open_cache = 5120 |
#表描述符緩存大小,可減少文件打開/關(guān)閉次數(shù); |
| interactive_timeout = 86400 |
#interactive_time -- 指的是mysql在關(guān)閉一個(gè)交互的連接之前所要等待的秒數(shù)(交互連接如mysql gui tool中的連接 |
| wait_timeout = 86400 |
#wait_timeout -- 指的是MySQL在關(guān)閉一個(gè)非交互的連接之前所要等待的秒數(shù) |
| binlog_cache_size = 16M |
#二進(jìn)制日志緩沖大小 |
|
#我們知道InnoDB存儲(chǔ)引擎是支持事務(wù)的,實(shí)現(xiàn)事務(wù)需要依賴于日志技術(shù),為了性能,日志編碼采用二進(jìn)制格式。那么,我們?nèi)绾斡浫罩灸??有日志的時(shí)候,就直接寫磁盤? |
|
#可是磁盤的效率是很低的,如果你用過Nginx,,一般Nginx輸出access log都是要緩沖輸出的。因此,記錄二進(jìn)制日志的時(shí)候,我們是否也需要考慮Cache呢? |
|
#答案是肯定的,但是Cache不是直接持久化,于是面臨安全性的問題——因?yàn)橄到y(tǒng)宕機(jī)時(shí),Cache中可能有殘余的數(shù)據(jù)沒來得及寫入磁盤。因此,Cache要權(quán)衡,要恰到好處: |
|
#既減少磁盤I/O,滿足性能要求;又保證Cache無殘留,及時(shí)持久化,滿足安全要求。 |
| slow_query_log = 1 |
#開啟慢查詢 |
| long_query_time = 1 |
#超過的時(shí)間為1s;MySQL能夠記錄執(zhí)行時(shí)間超過參數(shù) long_query_time 設(shè)置值的SQL語句,默認(rèn)是不記錄的。 |
| log-slow-admin-statements |
|
| log-queries-not-using-indexes |
#記錄管理語句和沒有使用index的查詢記錄 |
|
# *** Replication related settings *** |
| binlog_format = ROW |
#在復(fù)制方面的改進(jìn)就是引進(jìn)了新的復(fù)制技術(shù):基于行的復(fù)制。簡(jiǎn)言之,這種新技術(shù)就是關(guān)注表中發(fā)生變化的記錄,而非以前的照抄 binlog 模式。 |
|
#從 MySQL 5.1.12 開始,可以用以下三種模式來實(shí)現(xiàn):基于SQL語句的復(fù)制(statement-based replication, SBR),基于行的復(fù)制(row-based replication, RBR), |
|
混合模式復(fù)制(mixed-based replication, MBR)。相應(yīng)地,binlog的格式也有三種:STATEMENT,ROW,MIXED。MBR 模式中,SBR 模式是默認(rèn)的。 |
| #max_binlog_cache_size = 102400 |
# 為每個(gè)session 最大可分配的內(nèi)存,在事務(wù)過程中用來存儲(chǔ)二進(jìn)制日志的緩存。 |
| log-bin = /data/mysqldata/3307/binlog/mysql-bin |
#開啟二進(jìn)制日志功能,binlog數(shù)據(jù)位置 |
| log-bin-index = /data/mysqldata/3307/binlog/mysql-bin.index |
|
| relay-log = /data/mysqldata/3307/relay/mysql-relay-bin |
#relay-log日志記錄的是從服務(wù)器I/O線程將主服務(wù)器的二進(jìn)制日志讀取過來記錄到從服務(wù)器本地文件, |
|
#然后SQL線程會(huì)讀取relay-log日志的內(nèi)容并應(yīng)用到從服務(wù)器 |
| relay-log-index = /data/mysqldata/3307/relay/mysql-relay-bin.index |
#binlog傳到備機(jī)被寫道relaylog里,備機(jī)的slave sql線程從relaylog里讀取然后應(yīng)用到本地。 |
| server_id = 100 |
|
#服務(wù)端ID,用來高可用時(shí)做區(qū)分 |
| log_slave_updates = 1 |
|
#log_slave_updates是將從服務(wù)器從主服務(wù)器收到的更新記入到從服務(wù)器自己的二進(jìn)制日志文件中。 |
| expire-logs-days = 15 |
|
#二進(jìn)制日志自動(dòng)刪除的天數(shù)。默認(rèn)值為0,表示“沒有自動(dòng)刪除”。啟動(dòng)時(shí)和二進(jìn)制日志循環(huán)時(shí)可能刪除。 |
| max_binlog_size = 512M |
|
#如果二進(jìn)制日志寫入的內(nèi)容超出給定值,日志就會(huì)發(fā)生滾動(dòng)。你不能將該變量設(shè)置為大于1GB或小于4096字節(jié)。 默認(rèn)值是1GB。 |
| replicate-wild-ignore-table = mysql.% |
|
#replicate-wild-ignore-table參數(shù)能同步所有跨數(shù)據(jù)庫的更新,比如replicate-do-db或者replicate-ignore-db不會(huì)同步類似 |
| #replicate-wild-do-table = db_name.% |
|
#設(shè)定需要復(fù)制的Table |
| #slave-skip-errors = 1062,1053,1146 |
|
#復(fù)制時(shí)跳過一些錯(cuò)誤;不要胡亂使用這些跳過錯(cuò)誤的參數(shù),除非你非常確定你在做什么。當(dāng)你使用這些參數(shù)時(shí)候,MYSQL會(huì)忽略那些錯(cuò)誤, |
|
#這樣會(huì)導(dǎo)致你的主從服務(wù)器數(shù)據(jù)不一致。 |
| auto_increment_offset = 1 |
|
| auto_increment_increment = 2 |
#這兩個(gè)參數(shù)一般用在主主同步中,用來錯(cuò)開自增值, 防止鍵值沖突 |
| relay_log_info_repository = TABLE |
#將中繼日志的信息寫入表:mysql.slave_realy_log_info |
| master_info_repository = TABLE |
#將master的連接信息寫入表:mysql.salve_master_info |
| relay_log_recovery = on |
#中繼日志自我修復(fù);當(dāng)slave從庫宕機(jī)后,假如relay-log損壞了,導(dǎo)致一部分中繼日志沒有處理,則自動(dòng)放棄所有未執(zhí)行的relay-log, |
|
#并且重新從master上獲取日志,這樣就保證了relay-log的完整性 |