1. 程式人生 > >MySQL 5.7 my.cnf配置文件詳解

MySQL 5.7 my.cnf配置文件詳解

MySQL

[client]
default-character-set = utf8mb4

[mysql]
#開啟 tab 補全
#auto-rehash
default-character-set = utf8mb4

[mysqld]
port=3306
basedir=/data/server/mysql57/
datadir=/data/server/mysql57/data/
socket=/data/server/mysql57/data/mysql.sock
symbolic-links=0
log-error=/data/logs/mysql57/mysqld.log
pid-file=/data/server/mysql57/data/mysqld57.pid

禁用主機名解析

skip-name-resolve

默認的數據庫引擎

default-storage-engine = InnoDB
innodb-file-per-table=1innodb_force_recovery = 1#一些坑
group_concat_max_len = 10240sql_mode=expire_logs_days = 7memlock

字符集配置

character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=‘SET NAMES utf8mb4‘### GTID

server_id = 330759# 為保證 GTID 復制的穩定, 行級日誌
binlog_format = row

開啟 gtid 功能

gtid_mode = on

保障 GTID 事務安全

當啟用enforce_gtid_consistency功能的時候,

MySQL只允許能夠保障事務安全, 並且能夠被日誌記錄的SQL語句被執行,

像create table ... select 和 create temporarytable語句,

以及同時更新事務表和非事務表的SQL語句或事務都不允許執行

enforce-gtid-consistency = true# 以下兩條配置為主從切換, 數據庫高可用的必須配置

開啟 binlog 日誌功能

log_bin = mysql57-bin

開啟從庫更新 binlog 日誌

log-slave-updates = on
#slave復制進程不隨mysql啟動而啟動
skip_slave_start=1### 慢查詢日誌

打開慢查詢日誌功能

slow_query_log = 1# 超過2秒的查詢記錄下來
long_query_time = 2# 記錄下沒有使用索引的查詢
log_queries_not_using_indexes = 0slow_query_log_file =/data/logs/mysql57/slow.log
#log=/data/logs/mysql57/all.log

自動修復

記錄 relay.info 到數據表中

relay_log_info_repository = TABLE

記錄 master.info 到數據表中

master_info_repository = TABLE

啟用 relaylog 的自動修復功能

relay_log_recovery = on

在 SQL 線程執行完一個 relaylog 後自動刪除

relay_log_purge = 1### 數據安全性配置

wei關閉 master 創建 function 的功能

log_bin_trust_function_creators = on

每執行一個事務都強制寫入磁盤

sync_binlog = 1# timestamp 列如果沒有顯式定義為 not null, 則支持null屬性

設置 timestamp 的列值為 null, 不會被設置為 current timestamp

explicit_defaults_for_timestamp=true### 優化配置

優化中文全文模糊索引

ft_min_word_len = 1# 默認庫名表名保存為小寫, 不區分大小寫
lower_case_table_names = 1# 單條記錄寫入最大的大小限制

過小可能會導致寫入(導入)數據失敗

max_allowed_packet = 256M

半同步復制開啟

#rpl_semi_sync_master_enabled = 1#rpl_semi_sync_slave_enabled = 1# 半同步復制超時時間設置
#rpl_semi_sync_master_timeout = 1000# 復制模式(保持系統默認)
#rpl_semi_sync_master_wait_point = AFTER_SYNC

後端只要有一臺收到日誌並寫入 relaylog 就算成功

#rpl_semi_sync_master_wait_slave_count = 1# 多線程復制

基於組提交的並行復制方式

slave_parallel_type = logical_clock
#並行的SQL線程數量,此參數只有設置 1<N的情況下才會才起N個線程進行SQL重做。
#經過測試對比發現, 如果主庫的連接線程為M, 只有M < N的情況下, 備庫的延遲才可以完全避免。
slave_parallel_workers = 4### 連接數限制
max_connections = 1500# 驗證密碼超過20次拒絕連接
max_connect_errors = 200# back_log值指出在mysql暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中

也就是說,如果MySql的連接數達到max_connections時,新來的請求將會被存在堆棧中

以等待某一連接釋放資源,該堆棧的數量即back_log,如果等待連接的數量超過back_log

將不被授予連接資源

back_log = 500open_files_limit = 65535# 服務器關閉交互式連接前等待活動的秒數
interactive_timeout = 3600# 服務器關閉非交互連接之前等待活動的秒數
wait_timeout = 3600### 內存分配

指定表高速緩存的大小。每當MySQL訪問一個表時,如果在表緩沖區中還有空間

該表就被打開並放入其中,這樣可以更快地訪問表內容

table_open_cache = 1024# 為每個session 分配的內存, 在事務過程中用來存儲二進制日誌的緩存
binlog_cache_size = 4M

在內存的臨時表最大大小

tmp_table_size = 128M

創建內存表的最大大小(保持系統默認, 不允許創建過大的內存表)

如果有需求當做緩存來用, 可以適當調大此值

max_heap_table_size = 16M

順序讀, 讀入緩沖區大小設置

全表掃描次數多的話, 可以調大此值

read_buffer_size = 1M

隨機讀, 讀入緩沖區大小設置

read_rnd_buffer_size = 8M

高並發的情況下, 需要減小此值到64K-128K

sort_buffer_size = 1M

每個查詢最大的緩存大小是1M, 最大緩存64M 數據

query_cache_size = 64M
query_cache_limit = 1M

提到 join 的效率

join_buffer_size = 16M

線程連接重復利用

thread_cache_size = 64### InnoDB 優化

內存利用方面的設置

數據緩沖區

innodb_buffer_pool_size=2G

日誌方面設置

事務日誌大小

innodb_log_file_size = 256M

日誌緩沖區大小

innodb_log_buffer_size = 4M

事務在內存中的緩沖

innodb_log_buffer_size = 3M

主庫保持系統默認, 事務立即寫入磁盤, 不會丟失任何一個事務

innodb_flush_log_at_trx_commit = 1# mysql 的數據文件設置, 初始100, 以10M 自動擴展
#innodb_data_file_path = ibdata1:100M:autoextend

為提高性能, MySQL可以以循環方式將日誌文件寫到多個文件

innodb_log_files_in_group = 3##其他設置

如果庫裏的表特別多的情況,請增加此值

#innodb_open_files = 800# 為每個 InnoDB 表分配單獨的表空間
innodb_file_per_table = 1# InnoDB 使用後臺線程處理數據頁上寫 I/O(輸入)請求的數量
innodb_write_io_threads = 8# InnoDB 使用後臺線程處理數據頁上讀 I/O(輸出)請求的數量
innodb_read_io_threads = 8# 啟用單獨的線程來回收無用的數據
innodb_purge_threads = 1# 臟數據刷入磁盤(先保持系統默認, swap 過多使用時, 調小此值, 調小後, 與磁盤交互增多, 性能降低)
innodb_max_dirty_pages_pct = 90# 事務等待獲取資源等待的最長時間
innodb_lock_wait_timeout = 120# 開啟 InnoDB 嚴格檢查模式, 不警告, 直接報錯 1開啟 0關閉
innodb_strict_mode=1# 允許列索引最大達到3072
innodb_large_prefix = on

[mysqldump]

開啟快速導出

quick
default-character-set = utf8mb4
max_allowed_packet = 256M

MySQL 5.7 my.cnf配置文件詳解