1. 程式人生 > 其它 >mysql 8.0 配置檔案my.cnf中文註解【轉載】

mysql 8.0 配置檔案my.cnf中文註解【轉載】

###########################################################################
## my.cnf for MySQL 8.0.x                                                  
## 本配置參考  https://imysql.com/my-cnf-wizard.html                         
## 注意:                                                                   
##   (1)本配置假設物理伺服器記憶體為 16G,總表數量在300之內,中小型企業業務          
##   (2)請根據實際情況作調整部分引數                                          
##   (3)本人不對這些建議結果負相應責任 ,僅作參考                             
###########################################################################

###########################################################################
##客戶端引數配置
###########################################################################
[client]
port	= 3306
socket	=/var/lib/mysql/mysqld.sock

[mysql]
#prompt="\u@mysqldb \R:\m:\s [\d]> "
#關閉自動補全sql命令功能
no-auto-rehash

###########################################################################
##服務端引數配置
###########################################################################
[mysqld]
port	= 3306
datadir	= /var/lib/mysql
socket	= /var/lib/mysql/mysqld.sock
log-error = /var/lib/mysql/error.log
pid-file = /var/lib/mysql/mysqld.pid

#只能用IP地址檢查客戶端的登入,不用主機名
skip_name_resolve = 1

#若你的MySQL資料庫主要執行在境外,請務必根據實際情況調整本引數
default_time_zone = "+8:00"

#資料庫預設字符集, 主流字符集支援一些特殊表情符號(特殊表情符佔用4個位元組)
character-set-server = utf8mb4

#資料庫字符集對應一些排序等規則,注意要和character-set-server對應
collation-server = utf8mb4_general_ci

#設定client連線mysql時的字符集,防止亂碼
init_connect='SET NAMES utf8mb4'

#是否對sql語句大小寫敏感,1表示不敏感
lower_case_table_names = 1

# 執行sql的模式,規定了sql的安全等級, 暫時遮蔽,my.cnf檔案中配置報錯
#sql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#事務隔離級別,預設為可重複讀,mysql預設可重複讀級別(此級別下可能引數很多間隙鎖,影響效能)
transaction_isolation = READ-COMMITTED

#TIMESTAMP如果沒有顯示宣告NOT NULL,允許NULL值
explicit_defaults_for_timestamp = true

#它控制著mysqld程序能使用的最大檔案描述(FD)符數量。
#需要注意的是這個變數的值並不一定是你設定的值,mysqld會在系統允許的情況下儘量獲取更多的FD數量
open_files_limit    = 65535

#最大連線數
max_connections = 300

#最大錯誤連線數
max_connect_errors = 600

#在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆疊中
#官方建議 back_log = 50 + (max_connections / 5),封頂數為65535,預設值= max_connections
back_log = 110

# The number of open tables for all threads
# For example, for 200 concurrent running connections, specify a table cache size of at least 200 * N, 
# where N is the maximum number of tables per join in any of the queries which you execute. 
table_open_cache = 600

# The number of table definitions that can be stored in the definition cache 
# MIN(400 + table_open_cache / 2, 2000)
table_definition_cache = 700

# 為了減少會話之間的爭用,可以將opentables快取劃分為table_open_cache/table_open_cache_instances個小快取
table_open_cache_instances = 64

# 每個執行緒的堆疊大小 如果執行緒堆疊太小,則會限制執行復雜SQL語句
thread_stack = 512K

# 禁止外部系統鎖
external-locking = FALSE

#SQL資料包傳送的大小,如果有BLOB物件建議修改成1G
max_allowed_packet = 128M

#order by 或group by 時用到
#建議先調整為4M,後期觀察調整
sort_buffer_size = 4M

#inner left right join時用到
#建議先調整為4M,後期觀察調整
join_buffer_size = 4M

# How many threads the server should cache for reuse.
# 如果您的伺服器每秒達到數百個連線,則通常應將thread_cache_size設定得足夠高,以便大多數新連線使用快取執行緒
# default value = 8 + ( max_connections / 100) 上限為100
thread_cache_size = 20

#MySQL連線閒置超過一定時間後(單位:秒)將會被強行關閉
#MySQL預設的wait_timeout  值為8個小時, interactive_timeout引數需要同時配置才能生效
interactive_timeout = 1800
wait_timeout = 1800

#Metadata Lock最大時長(秒), 一般用於控制 alter操作的最大時長sine mysql5.6
#執行 DML操作時除了增加innodb事務鎖外還增加Metadata Lock,其他alter(DDL)session將阻塞
lock_wait_timeout = 3600

#內部記憶體臨時表的最大值。
#比如大資料量的group by ,order by時可能用到臨時表,
#超過了這個值將寫入磁碟,系統IO壓力增大
tmp_table_size = 64M
max_heap_table_size = 64M

#--###########################-- 慢SQL日誌記錄 開始 --##########################################

#是否啟用慢查詢日誌,1為啟用,0為禁用  
slow_query_log = 1

#記錄系統時區
log_timestamps = SYSTEM

#指定慢查詢日誌檔案的路徑和名字
slow_query_log_file = /var/lib/mysql/slow.log

#慢查詢執行的秒數,必須達到此值可被記錄
long_query_time = 5

#將沒有使用索引的語句記錄到慢查詢日誌  
log_queries_not_using_indexes = 0

#設定每分鐘記錄到日誌的未使用索引的語句數目,超過這個數目後只記錄語句數量和花費的總時間  
log_throttle_queries_not_using_indexes = 60

#對於查詢掃描行數小於此引數的SQL,將不會記錄到慢查詢日誌中
min_examined_row_limit = 5000

#記錄執行緩慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等。  
log_slow_admin_statements = 0

#作為從庫時生效, 從庫複製中如何有慢sql也將被記錄
#對於ROW格式binlog,不管執行時間有沒有超過閾值,都不會寫入到從庫的慢查詢日誌
log_slow_slave_statements = 1

#--###########################-- 慢SQL日誌記錄 結束 --##########################################

#--###########################-- Bin-Log設定 開始 --############################################
server-id = 110

#開啟bin log 功能
log-bin=mysql-bin

#binlog 記錄內容的方式,記錄被操作的每一行
binlog_format = ROW

#對於binlog_format = ROW模式時,FULL模式可以用於誤操作後的flashBack。
#如果設定為MINIMAL,則會減少記錄日誌的內容,只記錄受影響的列,但對於部分update無法flashBack
binlog_row_image = FULL

#bin log日誌儲存的天數
#如果 binlog_expire_logs_seconds 選項也存在則 expire_logs_days 選項無效
#expire_logs_days 已經被標註為過期引數
#expire_logs_days = 7
binlog_expire_logs_seconds = 1209600

#master status and connection information輸出到表mysql.slave_master_info中
master_info_repository = TABLE

#the slave's position in the relay logs輸出到表mysql.slave_relay_log_info中
relay_log_info_repository = TABLE

#作為從庫時生效, 想進行級聯複製,則需要此引數
log_slave_updates

#作為從庫時生效, 中繼日誌relay-log可以自我修復
relay_log_recovery = 1

#作為從庫時生效, 主從複製時忽略的錯誤
#如果在備份過程中執行ddl操作,從機需要從主機的備份恢復時可能會異常,從而導致從機同步資料失敗
#如果對資料完整性要求不是很嚴格,那麼這個選項確實可以減輕維護的成本
slave_skip_errors = ddl_exist_errors

#####RedoLog日誌 和 binlog日誌的寫磁碟頻率設定 BEGIN ###################################
# RedoLog日誌(用於增刪改事務操作) +  binlog日誌(用於歸檔,主從複製)
# 為什麼會有兩份日誌呢? 
# 因為最開始MySQL沒有 InnoDB 引擎,自帶MyISAM引擎沒有 crash-safe能力,binlog日誌只用于歸檔
# InnoDB 引擎是另一個公司以外掛形式引入MySQL的,採用RedoLog日誌來實現 crash-safe 能力

# redo log 的寫入(即事務操作)拆成兩階段提交(2PC):prepare階段 和 commit階段
#(事務步驟1) 執行commit命令,InnoDB redo log 寫盤,然後告知Mysql執行器:[你可以寫binlog了,且一併提交事務],事務進入 prepare 狀態
#(事務步驟2) 如果前面 prepare 成功,Mysql執行器生成 binlog 並且將binlog日誌寫盤
#(事務步驟3) 如果binlog寫盤成功,Mysql執行器一併呼叫InnoDB引擎的提交事務介面,事務進入 commit 狀態,操作完成,事務結束

#引數設定成 1,每次事務都直接持久化到磁碟
#引數設定成 0,mysqld程序的崩潰會導致上一秒鐘所有事務資料的丟失。
#引數設定成 2,只有在作業系統崩潰或者系統掉電的情況下,上一秒鐘所有事務資料才可能丟失。
#即便都設定為1,服務崩潰或者伺服器主機crash,Mysql也可能丟失但最多一個事務

#控制 redolog 寫磁碟頻率 預設為1
innodb_flush_log_at_trx_commit = 1

#控制 binlog 寫磁碟頻率
sync_binlog = 1

#####RedoLog日誌 和 binlog日誌的寫磁碟頻率設定 END #####################################

#一般資料庫中沒什麼大的事務,設成1~2M,預設32kb
binlog_cache_size = 4M

#binlog 能夠使用的最大cache 記憶體大小
max_binlog_cache_size = 2G

#單個binlog 檔案大小 預設值是1GB
max_binlog_size = 1G

#開啟GTID複製模式
gtid_mode = on

#強制gtid一致性,開啟後對於create table ... select ...或 CREATE TEMPORARY TABLE 將不被支援
enforce_gtid_consistency = 1

#解決部分無主鍵表導致的從庫複製延遲問題
#其基本思路是對於在一個ROWS EVENT中的所有前映象收集起來,
#然後在一次掃描全表時,判斷HASH中的每一條記錄進行更新
#該引數已經被標註為過期引數
#slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'

# default value is CRC32
#binlog_checksum = 1

# default value is ON
#relay-log-purge = 1

#--###########################-- Bin-Log設定 結束 --##########################################

#--###########################-- 可能用到的MyISAM效能設定 開始 --#############################

#對MyISAM表起作用,但是內部的臨時磁碟表是MyISAM表,也要使用該值。
#可以使用檢查狀態值 created_tmp_disk_tables 得知詳情
key_buffer_size = 15M

#對MyISAM表起作用,但是內部的臨時磁碟表是MyISAM表,也要使用該值,
#例如大表order by、快取巢狀查詢、大容量插入分割槽。
read_buffer_size = 8M

#對MyISAM表起作用 讀取優化
read_rnd_buffer_size = 4M

#對MyISAM表起作用 插入優化
bulk_insert_buffer_size = 64M
#--###########################-- 可能用到的MyISAM效能設定 開始 --################################

#--###########################-- innodb效能設定 開始 --##########################################
# Defines the maximum number of threads permitted inside of InnoDB. 
# A value of 0 (the default) is interpreted as infinite concurrency (no limit)
innodb_thread_concurrency = 0

#一般設定物理儲存的 60% ~ 70%
innodb_buffer_pool_size = 8G

#當緩衝池大小大於1GB時,將innodb_buffer_pool_instances設定為大於1的值,可以提高繁忙伺服器的可伸縮性
innodb_buffer_pool_instances = 4

#預設啟用。指定在MySQL伺服器啟動時,InnoDB緩衝池通過載入之前儲存的相同頁面自動預熱。 通常與innodb_buffer_pool_dump_at_shutdown結合使用
innodb_buffer_pool_load_at_startup = 1

#預設啟用。指定在MySQL伺服器關閉時是否記錄在InnoDB緩衝池中快取的頁面,以便在下次重新啟動時縮短預熱過程
innodb_buffer_pool_dump_at_shutdown = 1

# Defines the name, size, and attributes of InnoDB system tablespace data files
innodb_data_file_path = ibdata1:1G:autoextend

#InnoDB用於寫入磁碟日誌檔案的緩衝區大小(以位元組為單位)。預設值為16MB
innodb_log_buffer_size = 32M

#InnoDB日誌檔案組數量
innodb_log_files_in_group = 3

#InnoDB日誌檔案組中每一個檔案的大小
innodb_log_file_size = 2G

#是否開啟線上回收(收縮)undo log日誌檔案,支援動態設定,預設開啟
innodb_undo_log_truncate = 1

#當超過這個閥值(預設是1G),會觸發truncate回收(收縮)動作,truncate後空間縮小到10M
innodb_max_undo_log_size = 4G

#The path where InnoDB creates undo tablespaces
#沒有配置則在資料檔案目錄下
#innodb_undo_directory = /var/lib/mysql/undolog

#用於設定建立的undo表空間的個數
#已經棄用了,只能手動新增undo表空間
#The innodb_undo_tablespaces variable is deprecated and is no longer configurable as of MySQL 8.0.14
#innodb_undo_tablespaces = 95

#提高重新整理髒頁數量和合並插入數量,改善磁碟I/O處理能力
#根據您的伺服器IOPS能力適當調整
#一般配普通SSD盤的話,可以調整到 10000 - 20000
#配置高階PCIe SSD卡的話,則可以調整的更高,比如 50000 - 80000
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000

#如果開啟引數innodb_flush_sync, checkpoint時,flush操作將由page cleaner執行緒來完成,此時page cleaner會忽略io capacity的限制,進入激烈刷髒
innodb_flush_sync = 0
innodb_flush_neighbors = 0

#CPU多核處理能力設定,假設CPU是4顆8核的,設定如下
#讀多,寫少可以設成 2:6的比例
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50

#該引數針對unix、linux,window上直接註釋該引數.預設值為 NULL
#O_DIRECT減少作業系統級別VFS的快取和Innodb本身的buffer快取之間的衝突
innodb_flush_method = O_DIRECT

innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32

#為了獲取被鎖定的資源最大等待時間,預設50秒,超過該時間會報如下錯誤:
# ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
innodb_lock_wait_timeout = 20

#預設OFF,如果事務因為加鎖超時,會回滾上一條語句執行的操作。如果設定ON,則整個事務都會回滾
innodb_rollback_on_timeout = 1

#強所有發生的死鎖錯誤資訊記錄到 error.log中,之前通過命令列只能檢視最近一次死鎖資訊
innodb_print_all_deadlocks = 1

#在建立InnoDB索引時用於指定對資料排序的排序緩衝區的大小
innodb_sort_buffer_size = 67108864

#控制著在向有auto_increment 列的表插入資料時,相關鎖的行為,預設為2
#0:traditonal (每次都會產生表鎖)
#1:consecutive (mysql的預設模式,會產生一個輕量鎖,simple insert會獲得批量的鎖,保證連續插入)
#2:interleaved (不會鎖表,來一個處理一個,併發最高)
innodb_autoinc_lock_mode = 1

#表示每個表都有自已獨立的表空間
innodb_file_per_table = 1

#指定Online DDL執行期間產生臨時日誌檔案的最大大小,單位位元組,預設大小為128MB。
#日誌檔案記錄的是表在DDL期間的資料插入、更新和刪除資訊(DML操作),一旦日誌檔案超過該引數指定值時,
#DDL執行就會失敗並回滾所有未提交的當前DML操作,所以,當執行DDL期間有大量DML操作時可以提高該引數值,
#但同時也會增加DDL執行完成時應用日誌時鎖定表的時間
innodb_online_alter_log_max_size = 4G

#--###########################-- innodb效能設定 結束 --##########################################

[mysqldump]
quick
max_allowed_packet = 128M

原文:https://blog.csdn.net/gzt19881123/article/details/109511245