mysql 8.0 配置檔案my.cnf中文註解【轉載】
阿新 • • 發佈:2021-10-30
########################################################################### ## 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