1. 程式人生 > >mysql5.7配置檔案優化

mysql5.7配置檔案優化

mysql5.7的配置檔案優化,引用了別人的模板,根據自己的情況修改了一些引數,加上註釋,留著備用,感興趣的朋友可以借鑑一下,如果無法啟動可以檢視一下error_log,修改相應的引數。

[mysqld]

pid-file    = /var/run/mysqld/mysqld.pid

socket      = /var/run/mysqld/mysqld.sock

datadir     = /var/lib/mysql

#log-error  = /var/log/mysql/error.log

# By default we only accept connections from localhost

#bind-address   = 127.0.0.1

# Disabling symbolic-links is recommended to prevent assorted security risks

#支援符號連結,就是可以通過軟連線的方式,管理其他目錄的資料庫,最好不要開啟,當一個磁碟或分割槽空間不夠時,可以開啟該引數將資料儲存到其他的磁碟或分割槽。

symbolic-links=0

########basic settings########

server-id = 11

port = 3306

user = mysql

#設定autocommit=0,則使用者將一直處於某個事務中,直到執行一條commit提交或rollback語句才會結束當前事務重新開始一個新的事務。set autocommit=0的好處是在頻繁開啟事務的場景下,減少一次begin的互動。

autocommit = 1

#utf8mb4編碼是utf8編碼的超集,相容utf8,並且能儲存4位元組的表情字元。

#採用utf8mb4編碼的好處是:儲存與獲取資料的時候,不用再考慮表情字元的編碼與解碼問題。

character_set_server=utf8mb4

skip_name_resolve = 1

max_connections = 800

# 對於同一主機,如果有超出該引數值個數的中斷錯誤連線,則該主機將被禁止連線。如需對該主機進行解禁,執行:FLUSH HOST。

max_connect_errors = 1000

#資料庫隔離級別

transaction_isolation = READ-COMMITTED

#MySQL在完成某些join(連線)需求的時候,為了減少參與join的“被驅動表”的讀取次數以提高效能,需要使用到join buffer來協助完成join操作當join buffer 太小,MySQL不會將該buffer存入磁碟檔案而是先將join buffer中的結果與需求join的表進行操作,然後清空join buffer中的資料,繼續將剩餘的結果集寫入次buffer中

join_buffer_size = 128M

tmp_table_size = 64M

tmpdir = /tmp

#該值設定過小將導致單個記錄超過限制後寫入資料庫失敗,且後續記錄寫入也將失敗

max_allowed_packet = 64M

#mysql在關閉一個互動的連線之前所要等待的秒數

interactive_timeout = 1200

#mysql在關閉一個非互動的連線之前所要等待的秒數

wait_timeout = 600

#MySQL讀入緩衝區的大小

read_buffer_size = 16M

#MySQL的隨機讀緩衝區大小

read_rnd_buffer_size = 8M

#MySQL的順序讀緩衝區大小

sort_buffer_size = 8M

########log settings########

log_error = /var/log/docker_log/mysql/error.log

#開啟慢查詢日誌

slow_query_log = 1

#超出次設定值的SQL即被記錄到慢查詢日誌

long_query_time = 6

slow_query_log_file = /var/log/docker_log/mysql/slow.log

#表示記錄下沒有使用索引的查詢

log_queries_not_using_indexes = 1

#記錄管理語句

log_slow_admin_statements = 1

#開啟複製從庫複製的慢查詢的日誌

log_slow_slave_statements = 1

#設定每分鐘增長的沒有使用索引查詢的日誌數量

log_throttle_queries_not_using_indexes = 10

expire_logs_days = 90

min_examined_row_limit = 100

########replication settings########

#將master.info和relay.info儲存在表中

master_info_repository = TABLE

relay_log_info_repository = TABLE

log_bin = bin.log

#當每進行n次事務提交之後,MySQL將進行一次fsync之類的磁碟同步指令來將binlog_cache中的資料強制寫入磁碟。設定為零是讓系統自行決定

sync_binlog = 5

#開啟全域性事務ID,GTID能夠保證讓一個從伺服器到其他的從伺服器那裡實現資料複製而且能夠實現資料整合的

gtid_mode = on

#開啟gtid,必須主從全開

enforce_gtid_consistency = 1

#從伺服器的更新是否寫入二進位制日誌

log_slave_updates = 1

#三種模式 STATEMENT(有可能主從資料不一致,日質量小)、ROW(產生大量二進位制日誌)、MIXED

binlog_format = mixed

#relay-log日誌記錄的是從伺服器I/O執行緒將主伺服器的二進位制日誌讀取過來記錄到從伺服器本地檔案,然後SQL執行緒會讀取relay-log日誌的內容並應用到從伺服器

relay_log = /var/log/docker_log/mysql/relay.log

relay_log_recovery = 1

#開啟簡單gtid,開啟此項會提升mysql執行恢復的效能

binlog_gtid_simple_recovery = 1

slave_skip_errors = ddl_exist_errors

########innodb settings########

#這個引數在一開始初始化時就要加入my.cnf裡,如果已經建立了表,再修改,啟動MySQL會報錯。最好為8K

#innodb_page_size = 16K

innodb_page_size = 8K

#資料緩衝區buffer pool大小,建議使用實體記憶體的 75%

innodb_buffer_pool_size = 2G

#當buffer_pool的值較大的時候為1,較小的設定為8

innodb_buffer_pool_instances = 8

#執行時load緩衝池,快速預熱緩衝池,將buffer pool的內容(檔案頁的索引)dump到檔案中,然後快速load到buffer pool中。避免了資料庫的預熱過程,提高了應用訪問的效能

innodb_buffer_pool_load_at_startup = 1

#執行時dump緩衝池

innodb_buffer_pool_dump_at_shutdown = 1

#在innodb中處理使用者查詢後,其結果在記憶體空間的緩衝池已經發生變化,但是還未記錄到磁碟。這種頁面稱為髒頁,將髒頁記錄到磁碟的過程稱為刷髒

innodb_lru_scan_depth = 2000

innodb_io_capacity = 4000

innodb_io_capacity_max = 8000

#事務等待獲取資源等待的最長時間,超過這個時間還未分配到資源則會返回應用失敗,預設50s

innodb_lock_wait_timeout = 30

#日誌組所在的路徑,預設為data的home目錄;

innodb_log_group_home_dir = /data/mysql/

#innodb_undo_directory = /data/mysql/undolog/

#innodb_flush_method = O_DIRECT-不經過系統快取直接存入磁碟,

innodb_file_format = Barracuda

innodb_file_format_max = Barracuda

innodb_strict_mode = 1

#innodb獨享表空間,有點很多,缺點會導致單個表文件過大

#innodb_file_per_table = 1

#undo日誌回滾段 預設為128

innodb_undo_logs = 128

#傳統機械硬碟建議使用,而對於固態硬碟可以關閉

#innodb_flush_neighbors = 1

innodb_log_file_size = 1G

innodb_log_buffer_size = 64M

#控制是否使用獨立purge執行緒

innodb_purge_threads = 1

#改為ON時,允許單列索引最大達到3072。否則最大為767

innodb_large_prefix = 1

innodb_thread_concurrency = 8

#開啟後會將所有的死鎖記錄到error_log中

innodb_print_all_deadlocks = 1

innodb_sort_buffer_size = 16M

########semi sync replication settings########

#半同步複製

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

loose_rpl_semi_sync_master_timeout = 5000

#表示轉儲每個bp instance LRU上最熱的page的百分比。通過設定該引數可以減少轉儲的page數。

innodb_buffer_pool_dump_pct = 40

#刷髒的程序N-1

innodb_page_cleaners = 4

innodb_undo_log_truncate = 1

innodb_max_undo_log_size = 2G

#控制回收(收縮)undo log的頻率.undo log空間在它的回滾段沒有得到釋放之前不會收縮,

innodb_purge_rseg_truncate_frequency = 128

log_timestamps=system

#該引數基於MySQL5.7 Group Replication組複製的,沒有使用不要設定

#transaction_write_set_extraction=MURMUR32

show_compatibility_56=on