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

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