1. 連接層
max_connections=1000 #*****
最大并發(fā)連接數(shù)
max_connect_errors=999999
當(dāng)某一客戶端嘗試連接MySQL服務(wù)器,但是累計(jì)失?。ú还苁裁丛颍┰O(shè)置的次數(shù),則MySQL會(huì)無(wú)條件強(qiáng)制阻止此客戶端連接。
wait_timeout=600 #*****
設(shè)置非交互連接(就是指那些連接池方式、非客戶端方式連接的)的超時(shí)時(shí)間(單位秒,默認(rèn)是28800,就是8小時(shí)),超過(guò)這個(gè)時(shí)間,mysql服務(wù)器會(huì)主動(dòng)切斷那些已經(jīng)連接的,但是狀態(tài)是sleep的連接。
interactive_wait_timeout=3600
針對(duì)交互式連接。所謂的交互式連接,即在mysql_real_connect()函數(shù)中使用了CLIENT_INTERACTIVE選項(xiàng)。
說(shuō)得直白一點(diǎn),通過(guò)mysql客戶端連接數(shù)據(jù)庫(kù)是交互式連接,通過(guò)jdbc連接數(shù)據(jù)庫(kù)是非交互式連接。
net_read_timeout = 120
數(shù)據(jù)讀取超時(shí)時(shí)間。在終止讀之前,從一個(gè)連接獲得數(shù)據(jù)而等待的時(shí)間秒數(shù);當(dāng)服務(wù)正在從客戶端讀取數(shù)據(jù)時(shí),net_read_timeout控制何時(shí)超時(shí)。即客戶端執(zhí)行數(shù)據(jù)讀取,等待多少秒仍未執(zhí)行成功時(shí)自動(dòng)斷開(kāi)連接。
net_write_timeout = 120
數(shù)據(jù)庫(kù)寫(xiě)超時(shí)時(shí)間。和net_read_timeout意義類(lèi)似,在終止寫(xiě)之前,等待多少秒把block寫(xiě)到連接;當(dāng)服務(wù)正在寫(xiě)數(shù)據(jù)到客戶端時(shí),net_write_timeout控制何時(shí)超時(shí)。
max_allowed_packet= 32M #*****
限制server接受的數(shù)據(jù)包大小,最大1G
2.server層
**********************安全更新模式**************************
sql_safe_updates =1 # *****
在mysql中,如果在update和delete沒(méi)有加上where條件,數(shù)據(jù)將會(huì)全部修改。
開(kāi)啟安全模式后,當(dāng)沒(méi)有加where條件或where條件中列(column)沒(méi)有索引可用,則拒絕修改
*************************慢日志****************************
slow_query_log =ON
開(kāi)啟慢日志
slow_query_log_file =/data/3307/slow.log # *****
慢日志存儲(chǔ)路徑
long_query_time =1 # *****
運(yùn)行時(shí)間為多長(zhǎng)則判定為慢,實(shí)際生產(chǎn)中一般設(shè)置在0.01~0.1之間(單位秒)
log_queries_not_using_indexes =ON # *****
開(kāi)啟記錄沒(méi)有使用索引的語(yǔ)句
log_throttle_queries_not_using_indexes = 10 # *****
因?yàn)闆](méi)有使用同樣索引而導(dǎo)致慢的語(yǔ)句只記錄10條
***********************會(huì)話級(jí)別緩沖區(qū)**************************
**************不可設(shè)置過(guò)大,高并發(fā)時(shí)會(huì)占用很多內(nèi)存******************
sort_buffer_size = 1M
系統(tǒng)中對(duì)數(shù)據(jù)進(jìn)行排序的時(shí)候用到的Buffer,儲(chǔ)存行指針
join_buffer_size = 1M
系統(tǒng)中對(duì)數(shù)據(jù)進(jìn)行join的時(shí)候用到的Buffer
read_buffer= 1M
MySQL讀入緩沖區(qū)大小。對(duì)表進(jìn)行順序掃描的請(qǐng)求所分配的一個(gè)讀入緩沖區(qū).
read_rnd_buffer_size = 1M
儲(chǔ)存排序的數(shù)據(jù),配合sort_buffer使用,MRR優(yōu)化器算法就是在read_rnd_buffer中進(jìn)行工作的.
tmp_table_ = 16M
max_heap_table_size = 16M
兩個(gè)參數(shù)共同影響了sql執(zhí)行時(shí)生成臨時(shí)數(shù)據(jù)表的大小
max_execution_time = 10000
用來(lái)控制select語(yǔ)句的最大執(zhí)行時(shí)間,如果超過(guò)這個(gè)時(shí)間,就終止該查詢。單位是毫秒,可以動(dòng)態(tài)修改,分為session和global兩種級(jí)別,如果設(shè)置為0的話,則證明不設(shè)限制。
*************************鎖等待****************************
lock_wait_timeout = 60 # *****
當(dāng)其他的SQL語(yǔ)句已經(jīng)持有了鎖,當(dāng)前SQL語(yǔ)句需要等待持有鎖的SQL語(yǔ)句執(zhí)行完畢釋放鎖之后才能執(zhí)行。當(dāng)申請(qǐng)的鎖等待時(shí)間超過(guò)參數(shù)的設(shè)定值時(shí),系統(tǒng)會(huì)報(bào)LOCK_WAIT_TIMEOUT的錯(cuò)誤。
*************************庫(kù)表大小寫(xiě)敏感****************************
lower_case_table_names =1 # *****
默認(rèn)0,大小寫(xiě)敏感。
設(shè)置1,大小寫(xiě)不敏感。創(chuàng)建的表,數(shù)據(jù)庫(kù)都是以小寫(xiě)形式存放在磁盤(pán)上,對(duì)于sql語(yǔ)句都是轉(zhuǎn)換為小寫(xiě)對(duì)表和DB進(jìn)行查找。
設(shè)置2,創(chuàng)建的表和DB依據(jù)語(yǔ)句上格式存放,凡是查找都是轉(zhuǎn)換為小寫(xiě)進(jìn)行。
*************************線程相關(guān)****************************
thread_cache_size =64
每建立一個(gè)連接,都需要一個(gè)線程來(lái)與之匹配。
thread_cache_size用來(lái)緩存空閑的線程,以至不被銷(xiāo)毀,如果線程緩存中有空閑線程,這時(shí)候建立新連接,MYSQL就會(huì)很快的響應(yīng)連接請(qǐng)求。
show global 里關(guān)于線程緩存有如下幾個(gè)狀態(tài)變量,這里作簡(jiǎn)單解釋一下。
Threads_cached :代表當(dāng)前此時(shí)此刻線程緩存中有多少空閑線程。
Threads_connected :代表當(dāng)前已建立連接的數(shù)量,因?yàn)橐粋€(gè)連接就需要一個(gè)線程,所以也可以看成當(dāng)前被使用的線程數(shù)。
Threads_created :代表從最近一次服務(wù)啟動(dòng),已創(chuàng)建線程的數(shù)量。
Threads_running :代表當(dāng)前激活的(非睡眠狀態(tài))線程數(shù)。并不是代表正在使用的線程數(shù),有時(shí)候連接已建立,但是連接處于sleep狀態(tài),這里相對(duì)應(yīng)的線程也是sleep狀態(tài)。
最好將thread_cache_size設(shè)置成與threads_connected一樣。不過(guò)很少有情況將threads_cache_size設(shè)置成比200還大的數(shù)。
log_timestamps =SYSTEM # *****
控制 error log、slow_log、genera log,等等記錄日志的顯示時(shí)間參數(shù)
可以被設(shè)置的值有:UTC 和 SYSTEM,默認(rèn)使用 UTC,這樣會(huì)使得日志中記錄的時(shí)間比中國(guó)這邊的慢了8個(gè)小時(shí),導(dǎo)致查看日志不方便。它還支持動(dòng)態(tài)設(shè)置,不過(guò)建議大家在配置文件中就寫(xiě)上,以免重啟之后造成不必要的麻煩。
init_connect ="set names utf8" # *****
event_scheduler =OFF
mysql中的定時(shí)任務(wù)
secure-file-priv =/tmp # *****
設(shè)置文件導(dǎo)出路徑
binlog_expire_logs_seconds =2592000 # *****
binlog失效日期參數(shù)為 binlog_expire_logs_seconds,單位秒,默認(rèn)30天過(guò)期。
sync_binlog =1 # *****
sync_binlog=0,當(dāng)事物提交之后,mysql不做fsync之類(lèi)的刷新binlog_cache中的信息到磁盤(pán),而讓filesystem自行決定什么時(shí)候來(lái)同步,或者cache滿了之后再同步。
sync_binlog=n,每進(jìn)行n次事物提交后,mysql將進(jìn)行一次fsync之類(lèi)的磁盤(pán)同步指令來(lái)將binlog_cache中的數(shù)據(jù)強(qiáng)制寫(xiě)入磁盤(pán)。
為了確保安全性,我們可以將sync_binlog設(shè)置為1,
為了保證最價(jià)性能,我們可以將sync_binlog設(shè)置為0,
log-bin =/data/3307/mysql-bin
二進(jìn)制日志路徑及文件名前綴
log-bin-index =/data/3307/mysql-bin.index
二進(jìn)制日志索引文件
max_binlog_size =500M
二進(jìn)制日志達(dá)到設(shè)定值時(shí)滾動(dòng)生成新日志,flush logs可以手動(dòng)滾動(dòng)
binlog_format =ROW
二進(jìn)制日志的格式
STATEMENT模式(SBR)語(yǔ)句模式
每一條會(huì)修改數(shù)據(jù)的sql語(yǔ)句會(huì)記錄到binlog中。優(yōu)點(diǎn)是并不需要記錄每一條sql語(yǔ)句和每一行的數(shù)據(jù)變化,減少了binlog日志量,節(jié)約IO,提高性能。缺點(diǎn)是在某些情況下會(huì)導(dǎo)致master-slave中的數(shù)據(jù)不一致(如sleep()函數(shù), last_insert_id(),以及user-defined functions(udf)等會(huì)出現(xiàn)問(wèn)題)
ROW模式(RBR)
不記錄每條sql語(yǔ)句的上下文信息,僅需記錄哪條數(shù)據(jù)被修改了,修改成什么樣了。而且不會(huì)出現(xiàn)某些特定情況下的存儲(chǔ)過(guò)程、或function、或trigger的調(diào)用和觸發(fā)無(wú)法被正確復(fù)制的問(wèn)題。缺點(diǎn)是會(huì)產(chǎn)生大量的日志,尤其是alter table的時(shí)候會(huì)讓日志暴漲。
③ MIXED模式(MBR)
以上兩種模式的混合使用,一般的復(fù)制使用STATEMENT模式保存binlog,對(duì)于STATEMENT模式無(wú)法復(fù)制的操作使用ROW模式保存binlog,MySQL會(huì)根據(jù)執(zhí)行的SQL語(yǔ)句選擇日志保存方式。
3.存儲(chǔ)引擎層
transaction-isolation ="READ-COMMITTED" # *****
隔離級(jí)別設(shè)置,隔離效果依次提高,并發(fā)性能依次下降
read-uncommitted:讀未提交,會(huì)出現(xiàn)臟讀;
read-committed:讀提交,杜絕臟讀,但不可重復(fù)讀;
repeatable-read:可重復(fù)讀,不允許臟讀、不可重復(fù)讀,但會(huì)出現(xiàn)幻讀;
serializable:串行化,以上都不會(huì)出現(xiàn)。
innodb_data_home_dir =/xxx
共享表空間路徑
innodb_log_group_home_dir =/xxx
日志組的路徑,默認(rèn)在數(shù)據(jù)目錄下
innodb_log_file_size =2048M
redo日志的大小
innodb_log_files_in_group =3
redo日志的數(shù)量
innodb_flush_log_at_trx_commit =1 # *****
雙1中的第二個(gè)1
0:log buffer將每秒一次地寫(xiě)入log file中,并且log file的flush(刷到磁盤(pán))操作同時(shí)進(jìn)行。該模式下在事務(wù)提交的時(shí)候,不會(huì)主動(dòng)觸發(fā)寫(xiě)入磁盤(pán)的操作。
1:每次事務(wù)提交時(shí)MySQL都會(huì)把log buffer的數(shù)據(jù)寫(xiě)入log file,并且flush(刷到磁盤(pán))中去,該模式為系統(tǒng)默認(rèn)。
2:每次事務(wù)提交時(shí)MySQL都會(huì)把log buffer的數(shù)據(jù)寫(xiě)入log file,但是flush(刷到磁盤(pán))操作并不會(huì)同時(shí)進(jìn)行。該模式下,MySQL會(huì)每秒執(zhí)行一次 flush(刷到磁盤(pán))操作。
innodb_flush_method =O_DIRECT # *****
fdatasync模式(默認(rèn)):寫(xiě)數(shù)據(jù)時(shí),write這一步將數(shù)據(jù)文件和redo log 寫(xiě)入到操作系統(tǒng)緩沖OS buffer中
就會(huì)返回完成,真正完成是flush操作,buffer pool 和log buffer把文件和日志交給OS buffer去flush更新到磁盤(pán)。
O_DSYNC模式:寫(xiě)日志操作是在write這步完成,而數(shù)據(jù)文件的寫(xiě)入是在flush這步通過(guò)fsync完成
O_DIRECT模式:數(shù)據(jù)文件的寫(xiě)入操作是直接從mysql innodb buffer到磁盤(pán)的,并不用通過(guò)操作系統(tǒng)的
緩沖,而真正的完成也是在flush這步,日志還是要經(jīng)過(guò)OS緩沖

innodb_io_capacity =1000 # *****
控制當(dāng)刷新臟數(shù)據(jù)時(shí)MySQL每秒執(zhí)行的IO量,參數(shù)默認(rèn)是200,可以動(dòng)態(tài)調(diào)整.可以設(shè)置為設(shè)備能達(dá)到的最大IOPS的50%
innodb_io_capacity_max =4000
在壓力下,控制當(dāng)刷新臟數(shù)據(jù)時(shí)MySQL每秒執(zhí)行的IO量,可以設(shè)置為設(shè)備能達(dá)到的最大IOPS
innodb_buffer_pool_size =64G # *****
InnoDB緩沖池,用于多個(gè)目的:
* 數(shù)據(jù)緩存 – 這絕對(duì)是它的最重要的目的
* 索引緩存 – 這使用是的同一個(gè)緩沖池
* 緩沖 – 更改的數(shù)據(jù)(通常稱為臟數(shù)據(jù))在被刷新到硬盤(pán)之前先存放到緩沖
* 存儲(chǔ)內(nèi)部結(jié)構(gòu) – 一些結(jié)構(gòu)如自適應(yīng)哈希索引或者行鎖也都存儲(chǔ)在InnoDB緩沖池
如果是單純的數(shù)據(jù)庫(kù)服務(wù)器,可以將其設(shè)置為物理內(nèi)存的80%以下.
innodb_buffer_pool_instances =4 # *****
可以開(kāi)啟多個(gè)內(nèi)存緩沖池,把需要緩沖的數(shù)據(jù)hash到不同的緩沖池中.將 buffer pool 分成幾個(gè)區(qū),每個(gè)
區(qū)用獨(dú)立的鎖保護(hù),這樣就減少了訪問(wèn) buffer pool 時(shí)需要上鎖的粒度,以提高性能。
innodb_log_buffer_size =64M # *****
mysql事務(wù)日志文件(ib_logfile0)的大?。?設(shè)置的太?。寒?dāng)一個(gè)日志文件寫(xiě)滿后,innodb會(huì)自動(dòng)切換到另外一個(gè)日志文件,而且會(huì)觸發(fā)數(shù)據(jù)庫(kù)的檢查點(diǎn)
(Checkpoint),這會(huì)導(dǎo)致innodb緩存臟頁(yè)的小批量刷新,會(huì)明顯降低innodb的性能。由于日志切換更頻
繁,也就直接導(dǎo)致更多的BUFFER FLUSH,由于日志切換的時(shí)候是不能BUFFER FLUSH的, BUFFER寫(xiě)不下
去,導(dǎo)致沒(méi)有多余的buffer 寫(xiě)redo, 那么整個(gè)MYSQL就HANG住,還有一種情況是如果有一個(gè)大的事務(wù),把
所有的日志文件寫(xiě)滿了,還沒(méi)有寫(xiě)完,這樣就會(huì)導(dǎo)致日志不能切換(因?yàn)閷?shí)例恢復(fù)還需要,不能被循環(huán)復(fù)寫(xiě))
這樣mysql就hang住了。可以根據(jù)文件修改時(shí)間來(lái)判斷日志文件的旋轉(zhuǎn)頻率,旋轉(zhuǎn)頻率太頻繁,說(shuō)明日志文件太小了。
設(shè)置的太大:設(shè)置很大以后減少了checkpoint,并且由于redo log是順序I/O,大大提高了I/O性能。但是如果
數(shù)據(jù)庫(kù)意外出現(xiàn)了問(wèn)題,比如意外宕機(jī),那么需要重放日志并且恢復(fù)已經(jīng)提交的事務(wù)(也就是實(shí)例恢復(fù)中的前滾,
利用redo重演變化來(lái)恢復(fù)buffer cache中的數(shù)據(jù)),如果日志很大,那么將會(huì)導(dǎo)致恢復(fù)時(shí)間很長(zhǎng)。甚至到我們
不能接受的程度。
innodb_max_dirty_pages_pct =85 # *****
控制buffer pool中臟頁(yè)的百分比,當(dāng)臟頁(yè)數(shù)量占比超過(guò)這個(gè)參數(shù)設(shè)置的值時(shí),InnoDB會(huì)啟動(dòng)刷臟頁(yè)的操作。默認(rèn)值為 75
innodb_lock_wait_timeout =10 # *****
事務(wù)鎖等待超時(shí)時(shí)間,單位秒
innodb_open_files =63000 # *****
指定InnoDB一次可以保持打開(kāi)的.ibd文件的最大數(shù)目。最小值是10。默認(rèn)值300。
innodb_page_cleaners =4
頁(yè)面清除程序線程數(shù),如果超過(guò)緩沖池實(shí)例數(shù),則innodb_page_cleaners將自動(dòng)設(shè)置為與innodb_buffer_pool_instances相同的值
innodb_sort_buffer_size =64M
在創(chuàng)建InnoDB索引時(shí)用于指定對(duì)數(shù)據(jù)排序的排序緩沖區(qū)的大小。利用這塊內(nèi)存把數(shù)據(jù)讀進(jìn)來(lái)進(jìn)行內(nèi)部排序然后寫(xiě)入磁盤(pán)。這個(gè)參數(shù)只會(huì)在創(chuàng)建索引的過(guò)程中被使用,不會(huì)用在后面的維護(hù)操作;在索引創(chuàng)建完畢后innodb_sort_buffer會(huì)被釋放。
innodb_print_all_deadlocks =1 #
記錄死鎖日志到error.log
innodb_rollback_on_timeout =ON
事務(wù)超時(shí)后回滾整個(gè)事務(wù)還是上一條語(yǔ)句
innodb_deadlock_detect =ON
死鎖檢測(cè)
4. 主從復(fù)制相關(guān)
*************************relay_log******************************
relay_log =/opt/log/mysql/blog/relay
定義relay_log的位置和名稱,如果值為空,則默認(rèn)位置在數(shù)據(jù)文件的目錄
relay_log_index =/opt/log/mysql/blog/relay.index
定義relay_log的位置和名稱
max_relay_log_size =500M
標(biāo)記relay log 允許的最大值,如果該值為0,則為默認(rèn)值max_binlog_size(1G)
relay_log_recovery =ON
當(dāng)slave從庫(kù)宕機(jī)后,假如relay-log損壞了,導(dǎo)致一部分中繼日志沒(méi)有處理,則自動(dòng)放棄所有未執(zhí)行的relay-log,并且重新從master上獲取日志,這樣就保證了relay-log的完整性。默認(rèn)情況下該功能是關(guān)閉的,將relay_log_recovery的值設(shè)置為 1時(shí),可在slave從庫(kù)上開(kāi)啟該功能,建議開(kāi)啟。
**********************半同步**************************
rpl_semi_sync_master_enabled =ON
控制是否在主庫(kù)上啟用半同步復(fù)制,默認(rèn)值是0(關(guān)閉)
rpl_semi_sync_master_timeout =1000
一個(gè)以毫秒為單位的值,用于控制主服務(wù)器等待來(lái)自從服務(wù)器的確認(rèn)提交并恢復(fù)到異步復(fù)制的時(shí)間,超過(guò)這個(gè)值就是超時(shí)。 默認(rèn)值是10000(10秒)。超時(shí)之后,就從半同步復(fù)制,返回到異步復(fù)制。
rpl_semi_sync_master_trace_level =32
日志打印參數(shù),默認(rèn)即可
rpl_semi_sync_master_wait_for_slave_count =1
必須等待至少多少個(gè)slave的ack信息,才可以提交
rpl_semi_sync_master_wait_no_slave =ON
在沒(méi)有slave時(shí),是否選擇等待
rpl_semi_sync_master_wait_point =AFTER_SYNC
控制等待ack的邏輯處于整個(gè)事務(wù)提交過(guò)程的哪個(gè)階段,目前支持兩種模式
AFTER_SYNC ##增強(qiáng)半同步
AFTER_COMMIT ##普通半同步
rpl_semi_sync_slave_enabled =ON
slave半同步的開(kāi)關(guān)
rpl_semi_sync_slave_trace_level =32
salve節(jié)點(diǎn)半同步日志相關(guān)
binlog_group_commit_sync_delay =1
表示binlog提交后等待延遲多少時(shí)間再同步到磁盤(pán),默認(rèn)0,單位微妙,不延遲。設(shè)置延遲可以讓多個(gè)事務(wù)同一時(shí)刻提交,提高binlog組提交的并發(fā)數(shù)和效率,提高slave的吞吐量。
binlog_group_commit_sync_no_delay_count =1000
表示等待延遲提交的最大事務(wù)數(shù),如果上面參數(shù)的時(shí)間沒(méi)到,但事務(wù)數(shù)到了,則直接同步到磁盤(pán)。若binlog_group_commit_sync_delay沒(méi)有開(kāi)啟,則該參數(shù)也不會(huì)開(kāi)啟。
gtid_mode =ON
enforce_gtid_consistency =ON
skip-slave-start =1
gtid開(kāi)關(guān),以上三個(gè)參數(shù)同時(shí)開(kāi)啟猜可以
#read_only =ON
#super_read_only =ON
只讀模式,從庫(kù)參數(shù),防止從庫(kù)誤寫(xiě)入
log_slave_updates =ON
1、從庫(kù)只開(kāi)啟log-bin功能,不添加log-slave-updates參數(shù),從庫(kù)從主庫(kù)復(fù)制的數(shù)據(jù)不會(huì)寫(xiě)入log-bin日志文件里。
2、直接向從庫(kù)寫(xiě)入數(shù)據(jù)時(shí),是會(huì)寫(xiě)入log-bin日志的。
3、開(kāi)啟log-slave-updates參數(shù)后,從庫(kù)從主庫(kù)復(fù)制的數(shù)據(jù)會(huì)寫(xiě)入log-bin日志文件里。這也是該參數(shù)的功能。
server_id =2330602
report_host =xxxx
向主庫(kù)報(bào)告從庫(kù)的ip
report_port =3306
向主庫(kù)報(bào)告從庫(kù)的端口
slave_parallel_type =LOGICAL_CLOCK
DATABASE(默認(rèn)值,基于庫(kù)的并行復(fù)制方式)
LOGICAL_CLOCK(基于組提交的并行復(fù)制方式)
slave_parallel_workers =4
并發(fā)sql線程數(shù)量
master_info_repository =TABLE
relay_log_info_repository =TABLE
多源復(fù)制從庫(kù)需要開(kāi)啟的參數(shù)
來(lái)源:https://www./content-2-817001.html
|