MySQL-配置檔案my.cnf引數最佳化詳解

不一樣的天空w發表於2019-06-11

https://blog.csdn.net/liberty12345678/article/details/81974664


檢視mysql預設讀取my.cnf的目錄

如果沒有設定使用指定目錄的my.cnf,mysql啟動時會讀取安裝目錄根目錄及預設目錄下的my.cnf檔案,檢視mysql啟動時讀取配置檔案的預設目錄,命令如下:

mysql --help|grep 'my.cnf'


命令輸出中的就是mysql預設會搜尋my.cnf的目錄,順序排前的優先。


[client]
#########################################################################
#                                                                       #
#                         MySQL客戶端配置                               #
#                                                                       #
#########################################################################
port = 3306 
# MySQL客戶端預設埠號

socket = /data/mysql/my3306/mysql.sock
# 用於本地連線的Unix套接字檔案存放路徑

default-character-set = utf8mb4
# MySQL客戶端預設字符集

[mysql]
#########################################################################
#                                                                       #
#                         MySQL命令列配置                               #
#                                                                       #
#########################################################################
auto-rehash
# 開啟tab補齊功能

socket = /data/mysql/my3306/mysql.sock
# 用於本地連線的Unix套接字檔案存放路徑

default-character-set = utf8mb4
# MySQL客戶端預設字符集

max_allowed_packet = 256M
# 指定在網路傳輸中一次訊息傳輸量的最大值。系統預設值 為1MB,最大值是1GB,必須設定1024的倍數。

[mysqld]
#########################################################################
#                                                                       #
#                         MySQL服務端配置                               #
#                                                                       #
#########################################################################

########################################
#                                      #
#               General                #
#                                      #
########################################
port = 3306
# MySQL服務端預設監聽的TCP/IP埠

socket = /data/mysql/my3306/mysql.sock
# 用於本地連線的Unix套接字檔案存放路徑

pid_file = /data/mysql/my3306/mysql.pid
# 程式ID檔案存放路徑

basedir = /app/mysql
# MySQL軟體安裝路徑

datadir = /data/mysql/my3306
# MySQL資料檔案存放路徑

tmpdir = /data/mysql/my3306
# MySQL臨時檔案存放路徑

character_set_server = utf8mb4
# MySQL服務端字符集

collation_server = utf8mb4_general_ci
# MySQL服務端校對規則

default-storage-engine = InnoDB
# 設定預設儲存引擎為InnoDB

autocommit = OFF
# 預設為ON,設定為OFF,關閉事務自動提交

transaction_isolation = READ-COMMITTED
# MySQL支援4種事務隔離級別,他們分別是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如沒有指定,MySQL預設採用的是REPEATABLE-READ,ORACLE預設的是READ-COMMITTED

event_scheduler = ON 
# 開啟事件排程器event_scheduler

#explicit_defaults_for_timestamp = ON
# 控制TIMESTAMP資料型別的特性,預設OFF,設定為ON,update 時timestamp列關閉自動更新。(將來會被廢棄)

lower_case_table_names = 1
# 庫名、表名是否區分大小寫。預設為0,設定1,不區分大小寫,建立的表、資料庫都以小寫形式存放磁碟。

########################################
#                                      #
#       Network & Connection           #
#                                      #
########################################
max_connections = 1000
# MySQL允許的最大併發連線數,預設值151,如果經常出現Too Many Connections的錯誤提示,則需要增大此值。

max_user_connections = 1000
# 每個資料庫使用者的最大連線,(同一個賬號能夠同時連線到mysql服務的最大連線數),預設為0,表示不限制。

back_log = 500
# MySQL監聽TCP埠時設定的積壓請求棧大小,預設50+(max_connections/5),最大不超過900

max_connect_errors = 10000
# 每個主機的連線請求異常中斷的最大次數。對於同一主機,如果有超出該引數值個數的中斷錯誤連線,則該主機將被禁止連線。如需對該主機進行解禁,執行:FLUSH HOST。

interactive_timeout = 28800
# 伺服器關閉互動式連線前等待活動的秒數。互動式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。預設值:28800秒(8小時)

wait_timeout = 28800
# 伺服器關閉非互動連線之前等待活動的秒數。預設值:28800秒(8小時)
# 指定一個請求的最大連線時間,當MySQL連線閒置超過一定時間後將會被強行關閉。對於4GB左右記憶體的伺服器來說,可以將其設定為5~10。
# 如果經常出現Too Many Connections的錯誤提示,或者show processlist命令發現有大量sleep程式,則需要同時減小interactive_timeout和wait_timeout值。

connect_timeout = 28800
# 在獲取連線時,等待握手的超時秒數,只在登入時生效。主要是為了防止網路不佳時應用重連導致連線數漲太快,一般預設即可。

open_files_limit = 5000
# mysqld能開啟檔案的最大個數,預設最小1024,如果出現too mant open files之類的就需要增大該值。

max_allowed_packet = 256M
# 指定在網路傳輸中一次訊息傳輸量的最大值。系統預設值 為1MB,最大值是1GB,必須設定1024的倍數。

########################################
#                                      #
#          Thread & Buffer             #
#                                      #
########################################
sort_buffer_size = 2M
# 排序緩衝區大小,connection級引數,預設大小為2MB。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引,其次可以嘗試增大該值。

read_buffer_size = 160M
# 順序讀緩衝區大小,connection級引數,該引數對應的分配記憶體是每連線獨享。對錶進行順序掃描的請求將分配一個讀入緩衝區。

read_rnd_buffer_size = 160M
# 隨機讀緩衝區大小,connection級引數,該引數對應的分配記憶體是每連線獨享。預設值256KB,最大值4GB。當按任意順序讀取行時,將分配一個隨機讀快取區。

join_buffer_size = 320M
# 聯合查詢緩衝區大小,connection級引數,該引數對應的分配記憶體是每連線獨享。

bulk_insert_buffer_size = 64M   
# 批次插入資料快取大小,可以有效提高插入效率,預設為8M

thread_cache_size = 8
# 伺服器執行緒緩衝池中存放的最大連線執行緒數。預設值是8,斷開連線時如果快取中還有空間,客戶端的執行緒將被放到快取中,當執行緒重新被請求,將先從快取中讀取。
# 根據實體記憶體設定規則如下:1G  —> 8,2G  —> 16,3G  —> 32,大於3G  —> 64

thread_stack = 256K
# 每個連線被建立時,mysql分配給它的記憶體。預設192KB,已滿足大部分場景,除非必要否則不要動它,可設定範圍128KB~4GB。

query_cache_type = 0
# 關閉查詢快取

query_cache_size = 0
# 查詢快取大小,在高併發,寫入量大的系統,建議把該功能禁掉。

query_cache_limit = 4M    
# 指定單個查詢能夠使用的緩衝區大小,預設為1M

tmp_table_size = 1024M
# MySQL的heap(堆積)表緩衝大小,也即記憶體臨時表,預設大小是 32M。如果超過該值,則會將臨時表寫入磁碟。在頻繁做很多高階 GROUP BY 查詢的DW環境,增大該值。
# 實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。

max_heap_table_size = 1024M
# 使用者可以建立的記憶體表(memory table)的大小,這個值用來計算記憶體表的最大行數值。

table_definition_cache = 400
# 表定義快取區,快取frm檔案。表定義(global)是全域性的,可以被所有連線有效的共享。

table_open_cache = 1000
# 所有SQL執行緒可以開啟表快取的數量,快取ibd/MYI/MYD檔案。 開啟的表(session級別)是每個執行緒,每個表使用。

table_open_cache_instances = 4
# 對table cache 能拆成的分割槽數,用於減少鎖競爭,最大值64.

########################################
#                                      #
#               Safety                 #
#                                      #
########################################
#sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
# MySQL支援的SQL語法模式,與其他異構資料庫之間進行資料遷移時,SQL Mode組合模式會有幫助。

local_infile = OFF
# 禁用LOAD DATA LOCAL命令

plugin-load = validate_password.so
# 加密認證外掛,強制mysql設定複雜密碼

skip-external-locking
#skip-locking 
# 避免MySQL的外部鎖定,減少出錯機率,增強穩定性。

skip-name-resolve 
# 禁止MySQL對外部連線進行DNS解析,消除MySQL進行DNS解析。如果開啟該選項,所有遠端主機連線授權都要使用IP地址方式,否則MySQL將無法正常處理連線請求!

#skip-networking 
# 不允許CP/IP連線,只能透過命名管道(Named Pipes)、共享記憶體(Shared Memory)或Unix套接字(Socket)檔案連線。
# 如果Web伺服器以遠端連線方式訪問MySQL資料庫伺服器,則不要開啟該選項,否則無法正常連線!
# 適合應用和資料庫共用一臺伺服器的情況,其他客戶端無法透過網路遠端訪問資料庫

########################################
#                                      #
#                 Logs                 #
#                                      #
########################################
###################   General Log  ######################
general_log = OFF
# 關閉通用查詢日誌

general_log_file = /data/mysql/my3306/general.log
# 通用查詢日誌存放路徑

###################     Slow Log   ######################
slow_query_log = ON
# 開啟慢查詢日誌

slow_query_log_file = /data/mysql/my3306/slow.log
# 慢查詢日誌存放路徑

long_query_time = 10
# 超過10秒的查詢,記錄到慢查詢日誌,預設值10

log_queries_not_using_indexes = ON
# 沒有使用索引的查詢,記錄到慢查詢日誌,可能引起慢查詢日誌快速增長

log_slow_admin_statements = ON
# 執行緩慢的管理語句,記錄到慢查詢日誌
# 例如 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.

###################     Error Log   ####################
log_error = /data/mysql/my3306/error.log
# 錯誤日誌存放路徑

log_error_verbosity = 2
# 全域性動態變數,預設3,範圍:1~3
# 表示錯誤日誌記錄的資訊,1:只記錄error資訊;2:記錄error和warnings資訊;3:記錄error、warnings和普通的notes資訊

########################################
#                                      #
#           Replication                #
#                                      #
########################################

###################     Bin Log    ######################
server_id = 6
# 資料庫伺服器ID

log_bin = /data/mysql/my3306/binlog
# 二進位制日誌存放路徑

log_bin_index = /data/mysql/my3306/binlog.index
# 同binlog,定義binlog的位置和名稱

binlog_format = row
# binlog格式,複製有3種模式STATEMENT,ROW,MIXED

expire_logs_days = 10
# 只保留最近10天的binlog日誌

max_binlog_size = 50M
# 每個binlog日誌檔案的最大容量

binlog_cache_size = 2M
# 每個session分配的binlog快取大小
# 事務提交前產生的日誌,記錄到Cache中;事務提交後,則把日誌持久化到磁碟

log_slave_updates = ON
# 開啟log_slave_updates,從庫的更新操作記錄進binlog日誌

sync_binlog = 1
# sync_binlog=0(預設),事務提交後MySQL不重新整理binlog_cache到磁碟,而讓Filesystem自行決定,或者cache滿了才同步。
# sync_binlog=n,每進行n次事務提交之後,MySQL將binlog_cache中的資料強制寫入磁碟。

binlog_rows_query_log_events = ON
# 將row模式下的sql語句,記錄到binlog日誌,預設是0(off)

###################     Relay Log  ######################
relay_log = /data/mysql/my3306/relaylog
# 中繼日誌存放路徑

relay_log_index = /data/mysql/my3306/relaylog.index
# 同relay_log,定義relay_log的位置和名稱

#binlog_checksum = CRC32
# Session-Thread把Event寫到Binlog時,生成checksum。預設為(NONE),相容舊版本mysql。

master_verify_checksum = ON
# Dump-Thread讀Binlog中的Event時,驗證checksum

slave_sql_verify_checksum = ON
# 從庫的I/O-Thread把Event寫入Relaylog時,生成checksum;從庫的SQL-Thread從Relaylog讀Event時,驗證checksum

master_info_repository = TABLE
relay_log_info_repository = TABLE
# 將master.info和relay.info儲存在表中,預設是Myisam引擎,官方建議改為Innodb引擎,防止表損壞後自行修復。 

relay_log_purge = ON 
relay_log_recovery = ON
# 啟用relaylog的自動修復功能,避免由於網路之類的外因造成日誌損壞,主從停止。

skip_slave_start = OFF
# 重啟資料庫,複製程式預設不啟動

slave_net_timeout = 5
# 當master和slave之間的網路中斷,slave的I/O-Thread等待5秒,重連master

sync_master_info = 10000
# slave更新mysql.slave_master_info表的時間間隔

sync_relay_log = 10000
sync_relay_log_info = 10000
# slave更新mysql.slave_relay_log_info表的時間間隔

gtid_mode = ON
enforce_gtid_consistency = ON
# GTID即全域性事務ID(global transaction identifier),GTID由UUID+TID組成的。
# UUID是一個MySQL例項的唯一標識,TID代表了該例項上已經提交的事務數量,並且隨著事務提交單調遞增。
# GTID能夠保證每個MySQL例項事務的執行(不會重複執行同一個事務,並且會補全沒有執行的事務)。下面是一個GTID的具體形式:
# 4e659069-3cd8-11e5-9a49-001c4270714e:1-77

auto_increment_offset  = 1
# 雙主複製中,2臺伺服器的自增長欄位初值分別配置為1和2,取值範圍是1 .. 65535

auto_increment_increment = 2
# 雙主複製中,2臺伺服器的自增長欄位的每次遞增值都配置為2,其預設值是1,取值範圍是1 .. 65535

########################################
#                                      #
#                InnoDB                #
#                                      #
########################################

innodb_data_home_dir = /data/mysql/my3306
# innodb表的資料檔案目錄

innodb_file_per_table = ON
# 使用獨立表空間管理

innodb_data_file_path = ibdata1:1G:autoextend
# InnoDB共享表空間磁碟檔案,存放資料字典、和線上重做日誌

innodb_log_group_home_dir = /data/mysql/my3306
# 在事務被提交併寫入到表空間磁碟檔案上之前,事務資料儲存在InnoDB的redo日誌檔案裡。這些日誌位於innodb_log_group_home_dir變數定義的目錄中

innodb_buffer_pool_size = 2G
# InnoDB用於快取資料、索引、鎖、插入緩衝、資料字典的緩衝池。該值越大,快取命中率越高,但是過大會導致頁交換。

innodb_buffer_pool_instances = 8
# 開啟8個記憶體緩衝池,把需要緩衝的資料hash到不同的緩衝池中,這樣可以並行的記憶體讀寫,降低併發導致的內部快取訪問衝突。
# InnoDB快取系統會把引數innodb_buffer_pool_size指定大小的快取,平分為innodb_buffer_pool_instances個buffer_pool

#innodb_additional_mem_pool_size = 16M
# InnoDB儲存資料字典、內部資料結構的緩衝池大小,類似於Oracle的library cache

innodb_log_file_size = 256M
# InnoDB redo log大小,對應於ib_logfile0檔案。
# ib_logfile* 是Innodb多版本緩衝的一個保證,該日誌記錄redo、undo資訊,即commit之前的資料,用於rollback操作。
# 官方文件的建議設定是innodb_log_file_size = innodb_buffer_pool_size/innodb_log_files_in_group

innodb_log_buffer_size = 64M
# redo日誌所用的記憶體緩衝區大小

innodb_log_files_in_group = 4
# redo日誌檔案數,預設值為2,日誌是以順序的方式寫入。

innodb_max_dirty_pages_pct = 90
# 快取池中髒頁的最大比例,預設值是75%,如果髒頁的數量達到或超過該值,InnoDB的後臺執行緒將開始快取重新整理。
# “快取重新整理”是指InnoDB在找不到乾淨的可用快取頁或檢查點被觸發等情況下,InnoDB的後臺執行緒就開始把“髒的快取頁”回寫到磁碟檔案中。

innodb_flush_log_at_trx_commit = 1
#設定為0 ,每秒 write cache & flush disk
#設定為1 ,每次commit都 write cache & flush disk
#設定為2 ,每次commit都 write cache,然後根據innodb_flush_log_at_timeout(預設為1s)時間 flush disk

innodb_lock_wait_timeout = 10
# InnoDB 有其內建的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables語句或第三方事務引擎,則InnoDB無法識別死鎖。
# 為消除這種可能性,可以將innodb_lock_wait_timeout設定為一個整數值,指示MySQL在允許其他事務修改那些最終受事務回滾的資料之前要等待多長時間(秒數)。

innodb_sync_spin_loops = 40
# 自旋鎖的輪轉數,可以透過show engine innodb status來檢視。
# 如果看到大量的自旋等待和自旋輪轉,則它浪費了很多cpu資源。浪費cpu時間和無謂的上下文切換之間可以透過該值來平衡。

innodb_support_xa = ON
# 第一,支援多例項分散式事務(外部xa事務),這個一般在分散式資料庫環境中用得較多。
# 第二,支援內部xa事務,即支援binlog與innodb redo log之間資料一致性。

#innodb_file_format = barracuda
# InnoDB檔案格式,Antelope是innodb-base的檔案格式,Barracude是innodb-plugin後引入的檔案格式,同時Barracude也支援Antelope檔案格式。

innodb_flush_method = O_DIRECT
# 設定innodb資料檔案及redo log的開啟、刷寫模式,fdatasync(預設),O_DSYNC,O_DIRECT
# 預設是fdatasync,呼叫fsync()去刷資料檔案與redo log的buffer
# 設定為為O_DSYNC時,innodb會使用O_SYNC方式開啟和刷寫redo log,使用fsync()刷寫資料檔案
# 設定為O_DIRECT時,innodb使用O_DIRECT開啟資料檔案,使用fsync()刷寫資料檔案跟redo log

innodb_strict_mode = ON
# 開啟InnoDB嚴格檢查模式,在某些情況下返回errors而不是warnings,預設值是OFF

innodb_checksum_algorithm = strict_crc32
# checksum函式的演算法,預設為crc32。可以設定的值有:innodb、crc32、none、strict_innodb、strict_crc32、strict_none

innodb_status_file = 1
# 啟用InnoDB的status file,便於管理員檢視以及監控

innodb_open_files = 3000
# 限制Innodb能開啟的表的資料,預設為300,資料庫裡的表特別多的情況,可以適當增大為1000。  

innodb_thread_concurrency = 8
# 同時在Innodb核心中處理的執行緒數量。伺服器有幾個CPU就設定為幾,建議預設值。

innodb_thread_sleep_delay = 500

#innodb_file_io_threads = 16
# 檔案讀寫I/O數,這個引數只在Windows上起作用。在LINUX上只會等於4,預設即可。

innodb_read_io_threads = 16
# 設定read thread(讀執行緒個數,預設是4個)

innodb_write_io_threads = 16
# 設定write thread(寫執行緒個數,預設是4個)

innodb_io_capacity = 2000
# 磁碟io的吞吐量,預設值是200.對於重新整理到磁碟頁的數量,會按照inodb_io_capacity的百分比來進行控制。

log_bin_trust_function_creators = 1                   
# 開啟log-bin後可以隨意建立function,存在潛在的資料安全問題。

innodb_purge_threads = 1
# 使用獨立執行緒進行purge操作。
# 每次DML操作都會生成Undo頁,系統需要定期對這些undo頁進行清理,這稱為purge操作。

innodb_purge_batch_size = 32
# 在進行full purge時,回收Undo頁的個數,預設是20,可以適當加大。

innodb_old_blocks_pct = 75
# LRU演算法,預設值是37,插入到LRU列表端的37%,差不多3/8的位置。
# innodb把midpoint之後的列表稱為old列表,之前的列表稱為new列表,可以理解為new列表中的頁都是最為活躍的熱點資料。

innodb_change_buffering = all
# 用來開啟各種Buffer的選項。該引數可選的值為:inserts、deletes、purges、changes、all、none。
# changes表示啟用inserts和deletes,all表示啟用所有,none表示都不啟用。該引數預設值為all。

[mysqldump]                        
max_allowed_packet = 256M

quick
# mysqldump匯出大表時很有用,強制從伺服器查詢取得記錄直接輸出,而不是取得所有記錄後將它們快取到記憶體中。

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
#ledir = /app/mysql/bin
# 包含mysqld程式的軟體安裝路徑,用該選項來顯式表示伺服器位置。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2647250/,如需轉載,請註明出處,否則將追究法律責任。

相關文章