[client]
user = root
host = localhost
password = password
[mysqld]
federated
#開啟Federated存儲引擎
######basic settings########
character_set_server=utf8mb4
#服務器字符集,默認情況下所采用的
skip_name_resolve = 1
#禁止域名解析
max_connections = 800
# MySQL的最大連接數,如果服務器的並發連接請求量比較大,建議調高此值,以增加並行連接數量,當然這建立在機器能支撐的情況下,因為如果連接數越多,介於MySQL會為每個連接提供連接緩沖區,就會開銷越多的內存,所以要適當調整該值,不能盲目提高設值。可以過'conn%'通配符查看當前狀態的連接數量,以定奪該值的大小
max_connect_errors = 1000
# 對於同一主機,如果有超出該參數值個數的中斷錯誤連接,則該主機將被禁止連接。如需對該主機進行解禁,執行:FLUSH HOST
transaction_isolation = READ-COMMITTED
# MySQL支持4種事務隔離級別,他們分別是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如沒有指定,MySQL默認采用的是REPEATABLE-READ,ORACLE默認的是READ-COMMITTED
explicit_defaults_for_timestamp = 1
join_buffer_size = 8M
# 聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享
read_buffer_size = 16M
# MySQL讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySQL會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小。
# 如果對表的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能
read_rnd_buffer_size = 32M
# MySQL的隨機讀緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,
# MySQL會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySQL會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大
sort_buffer_size = 32M
# MySQL執行排序使用的緩沖大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。
# 如果不能,可以嘗試增加sort_buffer_size變量的大小
tmp_table_size = 16M
# 臨時表的內存緩存大小,臨時表是指sql執行時生成臨時數據表 ,首先在優化sql的時候就應該盡量避免臨時表,如果必須使用臨時表, 且同時執行大量sql ,生成大量臨時表時適當增加 tmp_table_size,如果生成的臨時表數據量大於 tmp_table_size 則會將臨時表存儲與磁盤而不是內存
tmpdir = /tmp
#臨時目錄
max_allowed_packet = 16M
#該值設置過小將導致單個記錄超過限制后寫入數據庫失敗,且后續記錄寫入也將失敗
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
#定義mysql支持的sql語法,
interactive_timeout = 7200
#mysql在關閉一個交互的連接之前所要等待的秒數
wait_timeout = 7200
#mysql在關閉一個交互的連接之前所要等待的秒數
lower_case_table_names = 1
#表名不區分大小寫
########log settings########
log_error = master_error.log #錯誤日志文件名稱
slow_query_log = 1 #開啟慢日志查詢
long_query_time=2 #超過2秒返回查詢的結果為慢查詢
slow_query_log_file = slow.log #慢查詢日志
log_queries_not_using_indexes = 1 #記錄所有沒使用到索引的查詢語句
log_slow_admin_statements = 1 #記錄慢的管理語句( 缺省情況下數據庫相關管理型SQL(例如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE)不會被記錄到日志。)
log_slow_slave_statements = 1 #記錄slave端執行時間超過long_query_time的請求語句
log_throttle_queries_not_using_indexes = 10
#設定每分鍾記錄到日志的未使用索引的語句數目,超過這個數目后只記錄語句數量和花費的總時間
expire_logs_days = 30
#binlog日志保存時間
min_examined_row_limit = 100
#掃描記錄數大於該值的才會記錄到慢查詢日志,和long_query_time是慢查詢的兩個指標
binlog-do-db=aibici_mysql_2018 #開啟記錄binlog日志的數據庫,
########replication settings########
master_info_repository = TABLE
relay_log_info_repository = TABLE
#當一個從庫是多源復制結構,那么master_info和relay_log_info不能用file方式來存儲,必須使用table,它不支持file
log_bin = mysql-bin
#二進制日志名稱
sync_binlog = 1
#控制mysql怎么刷新二進制日志到磁盤,默認是0,意味着mysql並不刷新,由操作系統自己決定什么時候刷新緩存到磁盤,如果這個值比0大,它指定了兩次刷新到磁盤的動作之間間隔多少次二進制日志寫操作,如果沒有設置它為1,那么崩潰后可能導致二進制日志沒有同步事務數據,這可以輕易的導致復制中斷,並且使得及時恢復變得不可能,無論如何,可以把這個值設置為1來獲得安全的保障,這樣就會要求mysql同步把二進制日志和事務日志這兩個文件刷新到兩個不同的位置,這可能需要磁盤尋道,相對來說是個很慢的操作。
innodb_flush_log_at_trx_commit = 1
注意:雙1參數同時設置為1的時候,性能最差
參考:http://blog.itpub.net/22664653/viewspace-1063134/
binlog_format = ROW
#mysql復制主要有三種方式:基於SQL語句的復制(statement-based replication, SBR),基於行的復制(row-based replication, RBR),混合模式復制(mixed-based replication, MBR)。對應的,binlog的格式也有三種:STATEMENT,ROW,MIXED。
relay_log = relay.log
#定義relay_log的位置和名稱,如果值為空,則默認位置在數據文件的目錄,文件名為host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory)
relay_log_recovery = 1
#當slave從庫宕機后,假如relay-log損壞了,導致一部分中繼日志沒有處理,則自動放棄所有未執行的relay-log,並且重新從master上獲取日志,這樣就保證了relay-log的完整性。默認情況下該功能是關閉的,將relay_log_recovery的值設置為 1時,可在slave從庫上開啟該功能,建議開啟。
binlog_gtid_simple_recovery = 1
#5.7.6以下中默認 simplified_binlog_gtid_recovery=flase 5.7.6以上中默認 binlog_gtid_simple_recovery=true (默認就是最合理的設置)
slave_skip_errors = ddl_exist_errors
#slave_skip_errors選項有四個可用值,分別為:off,all,ErorCode,ddl_exist_errors。參考https://blog.csdn.net/qq_36592808/article/details/79964826
########innodb settings########
innodb_page_size = 8k
innodb_buffer_pool_size = 2G
# InnoDB使用一個緩沖池來保存索引和原始數據, 不像MyISAM.這里你設置越大,你在存取表里面數據時所需要的磁盤I/O越少.在一個獨立使用的數據庫服務器上,你可以設置這個變量到服務器物理內存大小的80%
innodb_buffer_pool_instances = 8
#開啟多個內存緩沖池,把需要緩沖的數據hash到不同的緩沖池中,這樣可以並行的內存讀寫。
innodb_buffer_pool_load_at_startup = 1
#在啟動時把熱數據加載到內存。
innodb_buffer_pool_dump_at_shutdown = 1
#在關閉時把熱數據dump到本地磁盤。
innodb_lru_scan_depth = 2000
#LRU列表中可用頁的數量,默認值為1024
innodb_lock_wait_timeout = 30
#mysql 事務鎖超時時間
innodb_io_capacity = 4000
#動態調整刷新臟頁的數量, innodb_io_capacity默認是200,單位是頁,該參數的設置大小取決於硬盤的IOPS,即每秒每秒的輸入輸出量(或讀寫次數)
innodb_io_capacity_max = 8000
#在壓力下,控制當刷新臟數據時MySQL每秒執行的寫IO量
innodb_flush_method = O_DIRECT
#設置為O_DIRECT以避免雙重緩沖.
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
#表空間啟用壓縮
#innodb_log_group_home_dir = /mysqldata/mysql_data/
innodb_undo_directory = /mysqldata/mysql_data/
#undo獨立表空間的存放目錄(undo log 保存事務發生之前的數據的一個版本,用於回滾)
innodb_undo_logs = 128
#回滾段為128KB
innodb_undo_tablespaces = 3
#指定有三個undo log文件
innodb_log_file_size = 512M
#mysql事務日志文件的大小
innodb_log_buffer_size = 16M
#確保有足夠大的日志緩沖區來保存臟數據在被寫入到日志文件之前。
innodb_purge_threads = 1
#從innodb1.2版本開始,可以指定多個innodb_purge_threads來進一步加快和提高undo回收速度
innodb_large_prefix = 1
#這個參數默認值是OFF。當改為ON時,允許列索引最大達到3072
innodb_thread_concurrency = 0
# innodb_thread_concurrency默認是0,則表示沒有並發線程數限制,所有請求都會直接請求線程執行。注意:當 innodb_thread_concurrency 設置為0時,則innodb_thread_sleep_delay的設置將會被忽略,不起作用。如果數據庫沒出現性能問題時,使用默認值即可;
innodb_print_all_deadlocks = 1
#打開配置時,死鎖日志存放到error_log配置的文件里面
innodb_strict_mode = 1
#開啟InnoDB嚴格檢查模式,尤其采用了頁數據壓縮功能后,最好是開啟該功能。開啟此功能后,當創建表(CREATE TABLE)、更改表(ALTER TABLE)和創建索引(CREATE INDEX)語句時,如果寫法有錯誤,不會有警告信息,而是直接拋出錯誤。
innodb_sort_buffer_size = 1M
#在創建InnoDB索引時用於指定對數據排序的排序緩沖區的大小。利用這塊內存把數據讀進來進行內部排序然后寫入磁盤。這個參數只會在創建索引的過程中被使用,不會用在后面的維護操作;在索引創建完畢后innodb_sort_buffer會被釋放。
innodb_flush_neighbors = 0
#刷新鄰接頁,InnoDB存儲引擎在刷新一個臟頁時,會檢測該頁所在區(extent)的所有頁,如果是臟頁,那么一起刷新。這樣做的好處是通過AIO可以將多個IO寫操作合並為一個IO操作。該工作機制在傳統機械磁盤下有顯著優勢。對於傳統機械硬盤建議使用,而對於固態硬盤可以關閉。
########semi sync replication settings########
plugin_dir=/usr/local/mysql/lib/plugin
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
#半同步復制,在有的高可用架構下,master和slave需同時啟動,以便在切換后能繼續使用半同步復制
loose_rpl_semi_sync_master_timeout = 5000
#切換復制的timeout(5s)
#GTID
# 即全局事務ID(global transaction identifier),GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL實例的唯一標識。TID代表了該實例上已經提交的事務數量,並且隨着事務提交單調遞增,所以GTID能夠保證每個MySQL實例事務的執行(不會重復執行同一個事務,並且會補全沒有執行的事務)。
log-slave-updates=1
#開啟log_slave_updates參數,是把relay-log里的日志內容再記錄到slave本地的binlog里,
#從庫只開啟log-bin功能,不添加log-slave-updates參數,從庫從主庫復制的數據不會寫入log-bin日志文件里。
#MySQL5.7 開啟GTID復制模式不用開啟log_slave_updates參數了
#gtid-mode=on
#GTID復制模式
-
MySQL 5.6
gtid_mode=ON(必選) 、
log_bin=ON(必選)
log-slave-updates=ON(必選)
enforce-gtid-consistency(必選)
-
MySQL 5.7
MySQL5.7.13 or higher
gtid_mode=ON(必選)
enforce-gtid-consistency(必選)
log_bin=ON(可選)--高可用切換,最好設置ON
log-slave-updates=ON(可選)--高可用切換,最好設置ON(如果在密集型寫的環境,會增加從庫不必要的磁盤IO開銷。)
enforce-gtid-consistency=true
#MySQL只允許能夠保障事務安全,並且能夠被日志記錄的SQL語句被執行,像create table … select 和 create temporary table語句,以及同時更新事務表和非事務表的SQL語句或事務都不允許執行
sync-master-info=1
#若master-info-repository為FILE,當設置為0,則每次sync_master_info事件都會刷新到磁盤,默認為10000次刷新到磁盤;若master-info-repository為TABLE,當設置為0,則表不做任何更新,設置為1,則每次事件會更新表 #默認為10000
slave-parallel-workers=4
#有4個SQL Thread(coordinator線程)來進行並行復制
binlog-checksum=CRC32
#當一個event被寫入binary log的時候,checksum也同時寫入binary log,然后在event通過網絡傳輸到slave之后,再在slave上對其進行驗證並寫入slave的relay log
master-verify-checksum=1
#默認關閉,開啟后主庫會對每個binlog event進行checksum驗證,如果失敗則停止寫入並報錯;
slave-sql-verify-checksum=1
#默認關閉,開啟后備庫讀relay log時會對每個event進行checksum驗證;
binlog-rows-query-log_events=1
#在row模式下..開啟該參數,將把sql語句打印到binlog日志里面
socket = /tmp/mysql.sock
port = 3306
pid-file = /mysqldata/master_data/mysqlmaster.pid
datadir = /mysqldata/master_data
basedir = /usr/local/mysql
innodb_log_group_home_dir = /mysqldata/master_data/
innodb_undo_directory = /mysqldata/master_data/
server-id = 10
report-host=10.45.19.179
report-port=3306
#report-系列Report系列是設置在從庫上的,包含四個參數 report-[host|port|user|password]. 當my.cnf中設置了report-host時,在從庫執行start slave的時候,會將report-host和report-port(默認3306)發給主庫,主庫記錄在全局哈希結構變量 slave_list 中。
[mysqld-5.7]
innodb_buffer_pool_dump_pct = 40
#指定每個緩沖池最近使用的頁面讀取和轉儲的百分比。 范圍是1到100。默認值是40。例如,如果有4個緩沖池,每個緩沖池有100個page,並且innodb_buffer_pool_dump_pct設置為40,則dump每個緩沖池中最近使用的40個page。
innodb_page_cleaners = 4
#Innodb中page clean線程將臟數據寫入到磁盤,臟數據寫盤后相應的redo就可以覆蓋,然后達到redo循環使用的目的。在5.7中參數可以開啟多個page clean線程服務於多個innodb buffer
innodb_undo_log_truncate = 1
#開啟在線回收(收縮)undo log日志文件,支持動態設置。
innodb_max_undo_log_size = 2G
#undo表空間文件超過此值即標記為可收縮,默認1G,可在線修改
innodb_purge_rseg_truncate_frequency = 128
#控制回收(收縮)undo log的頻率。undo log空間在它的回滾段沒有得到釋放之前不會收縮,
想要增加釋放回滾區間的頻率,就得降低innodb_purge_rseg_truncate_frequency設定值。默認128是最大值
log_timestamps=system
#主要是控制 error log、genera log,等等記錄日志的顯示時間參數。
show_compatibility_56=on
#MySQL5.6中INFORMATION_SCHEMA 中存在系統變量和狀態變量的表,show variables 和show status也是基於此庫中的表,在5.7.6時被Performance Schema也存在這四張表,show 語句開始基於Performance Schema中的表,如果show_compatibility_56參數開啟,則兼容5.6
