乾貨 | MySQL8.0新增配置參數詳解

2022-02-07 創新資料庫

MySQL8.0新增或改進了數據字典、原子DDL、安全和帳戶、資源管理、InnoDB增強、字符集支持、JSON增強、欄位類型支持、優化器、通用表達式、窗口函數、正則表達式支持、內部臨時表、日誌、備份鎖等特性,MySQL本身是一個配置比較多比較複雜的資料庫,那麼新的版本中有哪些參數項是新增的用來控制這些新特性的使用那?接下來我們對新增的配置項進行逐一分析。

此參數在版本8.0.2引入,是一個可以動態調整的global級參數,默認值為OFF。此參數用於控制在帳戶登錄時是否激活已經授予的角色,如果為ON則授予的角色會被激活,設置為OFF時只能通過SET DEFAULT ROLE顯式激活用戶角色。activate_all_roles_on_login設置只在帳戶登錄或者開始執行存儲過程時生效,如果想更改session的role需要執行SET ROLE語句。

參數在版本8.0.1中引入,是可以動態調整的global級參數,8.0.4之前默認值為0,8.0.11之後為2592000也就是30天。之前版本binlog自動清理時間以參數expire_logs_days也就是以天為單位,當前兩個參數並存並且有一個非0時則以非0的參數為binlog自動清理時間,如果兩個都為非0值則以binlog_expire_logs_seconds為binlog清理時間忽略expire_logs_days參數設置。

此參數在8.0.1版本引入,是可以動態調整的global級參數,默認值為MINIMAL,可以設置為FULL。此參數用於控制row格式下binlog中表的元數據數量,設置為MINMAL時記錄符號標記、列字符集和空間類型,設置為FULL時會記錄表所有的元數據,例如列名、枚舉或集合所有的值、主鍵信息等等。

此參數在8.0.3版本引入,是可以動態調整global級參數,默認值為』』,可以設置為PARTIAL_JSON。

當設置為PARTIAL_JSON並且binlog格式為ROW或者MIXED模式時,使用JSON_SET(), JSON_REPLACE()和 JSON_REMOVE()對JSON的列進行操作時,binlog只記錄更新的部分,而不是記錄整個JSON的變更,進而減少binlog大小。不過當對JSON文檔的更改需要比當前文檔更大的空間或者SERVER不能夠進行部分更新時,binlog還是會記錄整個JSON文檔。

此參數在版本8.0.1中引入,是可以動態調整的global級參數,默認值為25000,可以設置為0-1000000之間的任意整數。8.0基於WriteSet進行並行複製時,WriteSet是一個hash數組,binlog_transaction_dependency_history_size值就是這個hash數組的最大值。

此參數在8.0.1版本引入,是可以動態調整的global級枚舉類型參數,默認值為COMMIT_ORDER,也可以設置為WRITESET、WRITESET_SESSION。此參數用於主庫決定事務間在從庫進行多線程複製的依賴模式。

         COMMIT_ORDERE:根據主庫事務提交時間戳進行並行,也就5.7的GroupCommit;

         WRITESET:根據WriteSet進行並行,只要是不在同一個隊列裡的都可以並行;

         WRITESET_SESSION: 根據WriteSet進行並行,但相同session的事務不會並行。

在版本8.0.4引入,是不可動態調整的global級參數,默認值為ON,當OpenSSL被編譯進MySQL時,根據此參數判斷是否在啟動時自動生成公鑰和私鑰文件。

同上,用於指定私鑰文件路徑及文件名,當設置為相對路徑時存儲在數據文件路徑下。

同上,用於存放公鑰文件路徑及文件名稱。

在8.0.3版本引入,是可以動態調整的global、session級的整數類型參數,默認值為1000,可以設置為0 – 4294967295之間的任意整數。該參數用於設置公共表表達式的最大遞歸深度。如果SQL執行過程中遞歸深度超過該值則會中斷執行。

在8.0.11版本中引入,是可以動態調整的global、session級枚舉類型參數。此參數值會從主庫傳遞到從庫,主要用於主從同步或者MGR中從8.0之前版本向8.0同步數據時來保持主從間以一致的排序規則來處理數據。

8.0.2版本引入,是可以動態設置的global、session級參數,默認值為20000000,可以設置為1000000到18446744073709551615(32位系統為4294967295)之間任意值。當建立直方圖時,需要將表的數據讀入內存,但是當表過大時可能會將將大量數據讀入內存,為規避這個風險,server層根據histogram_generation_max_mem_size設置進行計算,計算出讀出多少行進入內存,進行取樣。

參數由8.03版本引入,是可以動態設置的global、session級參數。默認值為86400,可以設置為0到315360000之間熱任意整數。

Information_schema庫中有一些列提供表的統計數據,統計數據會隨著表中內容的變化進行更新。默認情況下MySQL檢索mysql.index_stats 和mysql.table_stats兩個字典表進行表信息檢索,這樣遠比從存儲引擎層檢索相關信息高效的多。如果需要的表統計信息沒有被緩存或者已經過期,則會從存儲引擎獲取相關統計信息並緩存到mysql.index_stats 和mysql.table_stats兩個表中,在表統計信息過期之前,後來的查詢都會使用此緩存信息。每個session可以獨立設置information_schema_stats_expiry,默認值是86400秒也就是24小時,此數值最大可以設置為一年;如果想要更新某張表的統計信息執行ANALYZE TABLE即可;如果每次查詢都想獲取最新的統計信息,將此值設置成0即可,MySQL每次都會跳過mysql.index_stats 和mysql.table_stats兩個字典表直接通過存儲引擎獲取統計信息。

參數在8.03版本中引入,是一個只能在啟動時設置的global級參數。此參數設置為ON時,MySQL會根據檢測到的內存大小設置innodb_buffer_pool_size、innodb_log_file_size、innodb_flush_method三個參數。有了這個參數我們就不用再寫腳本根據內存大小去修改配置文件的這三個參數了,運維自動化又省了一步。當伺服器MySQL與其他應用共享伺服器內存時建議設置為OFF。那麼MySQL具體的設置策略是什麼那?

innodb_buffer_pool_size:

Detected Server Memory

Buffer Pool Size

< 1G

128MiB (the innodb_buffer_pool_size default)

<= 4G

Detected server memory * 0.5

> 4G

Detected server memory * 0.75

innodb_log_file_size:

Detected Server Memory

Log File Size

< 1GB

48MiB (the innodb_log_file_size default)

<= 4GB

128MiB

<= 8GB

512MiB

<= 16GB

1024MiB

> 16GB

2048MiB

innodb_flush_method

當開啟 innodb_dedicated_server時,刷盤方式會採用O_DIRECT_NO_FSYNC ,O_DIRECT_NO_FSYNC 不可用時將會採用默認的刷盤方式。需要注意的是,目前在linux中當文件大小發生變化時,O_DIRECT_NO_FSYNC 可能會導致系統hung住,因此不建議在linux中採用該刷盤方式。

參數在版本8.0.4中引入,只能在啟動時指定,不能夠動態調整。資料庫啟動時會根據此參數掃描innodb 表空間文件。在資料庫離線時,我們可以通過指定該參數用於移動或者恢復表空間文件到指定的路徑。

參數在8.0.11版本中引入,是可以動態調整的全局參數,默認值為80,可以設置為0到4294967295之間的任意整數。此數值表示innodb用戶線程刷redo進行自旋等待時CPU的低水位,當cpu使用率低於此值時不進行自旋等待。如果此值設置超過100例如150時,則表示在多核CPU時第一個核使用率為100%,第二個核使用率為50%。

同上一個參數,默認值為50,可以設置為0到100之間的任意整數值。此參數表示innodb用戶線程刷redo進行自旋等待的高水位,表示CPU總處理能力百分比,例如4核設置為50時,表示個2個核為100%。該參數核數計算以實際使用CPU為準,例如將mysqld進程綁定到48核中的4核,則該參數忽略其他44核。

參數在8.0.11版本中引入,是可以動態調整的全局整型參數,單位為毫秒,默認值為400可以設置為0到2^64-1(32位系統為2^32-1)之間的整數值,當用戶線程等待刷redo超過innodb_log_wait_for_flush_spin_hwm毫秒後不再進行自旋。

這個參數在8.03版本中引入是可以動態設置的global級參數。默認值為OFF,設置為ON時能夠在標準錯誤輸出,根據系統和配置的不同可能是error log、Linux終端或windows控制臺。8.0引入了原子DDL的特性,InnoDB通過寫DDL日誌到mysql.innodb_ddl_log的方式來實現DDL的重做和回滾,但除非在debug模式下,mysql.innodb_ddl_log對用戶是不可見的,可以通過設置innodb_print_ddl_logsz為ON來在錯誤輸出中查看DDL的重做和回滾信息。

這個參數在8.0.1版本中引入,是可以動態設置的global級參數,默認值為OFF。此參數用於控制redo log的加密,將內存中的redo寫入磁碟時進行加密,從磁碟中讀取redo log進內存時進行解密。Redo的元數據和加密秘鑰存放第一個redo文件頭部,如果啟動前將此文件刪除則會自動取消加密,如果有redo log已經加密存儲,則會啟動失敗。

參數在8.0.1版本中引入,時可以動態設置的全局布爾類型參數,默認值為No。默認情況下,MySQL進行表統計信息計算時,會採用Repeatable-Read隔離級別,因此其他進程在採用Repeatable-Read及以上隔離級別查詢時,數據和索引的統計信息已經排除掉了其他未提交事務中刪除的數據,這樣會導致執行計劃不是最優。當開啟innodb_stats_include_delete_marked時,優化器在計算統計數據時會將其他未提交事務中已刪除的數據計算在內。

這個參數在8.0.1版本引入,是可以動態設置的global級參數,默認值為OFF。只有在獨立開啟undo時此參數設置為ON才會生效。和redo一樣,undo在寫入磁碟時進行加密,從磁碟讀取到內存時進行解密。Undo的加密和解密使用表空間的加密key。Undo的元數據和加密的密碼存放於undo表空間文件頭部。

參數在8.0.2版本引入,是可以動態調整的全局、session級枚舉類型參數,默認值為TempTable,也可以設置為Memory。優化器根據此參數選擇內存中內部臨時表的引擎類型。

參數在8.0.4版本引入,是可以動態設置的全局布爾型參數,默認值為ON。此參數設置是否允許對innodb表空間加密所用的秘鑰進行遷移等操作。

這個參數在8.0.2版本引入,是可以動態設置的global級參數,默認值為」log_filter_internal; log_sink_internal」。

這個參數在8.0.2版本引入,是可以動態設置的global級參數,默認值為空字符串。

在8.0.1版本引入,是可以動態調整的session級整型參數。從庫在進行主從複製重放binlog時,該參數設置為事務在主庫提交時的時間戳,從公元紀元開始的毫秒數值。

在版本8.0.3引入,是可以動態調整的全局整型參數,默認值為0,可以設置為0- 4294967295之間的任意整數。該參數數值用於設置歷史密碼可以再次使用之前需要進行密碼修改的次數。設置為0則不會對歷史密碼是否可以重用進行限制。

在版本8.0.3版本引入,是可以動態調整的整型參數,默認值為0,可以設置為0- 4294967295之間的任意整數。該參數用於設置歷史密碼可以重用的間隔天數,設置為0則不會對歷史密碼重用進行時間間隔設置。

在8.0.3版本引入,是可以動態調整的全局整型參數,默認值為60,可以設置為0- 1048576之間任意整數。該參數用於設置events_statements_summary_by_digest表中語句重新採用時間,如果有新的相同摘要值得語句被採集到並且當前表中的數據執行時間為performance_schema_max_digest_sample_age秒之前,則會使用當前語句替換events_statements_summary_by_digest中採樣的語句。

參數只能在啟動時指定,不可動態調整,默認值為ON。當設置為ON時,在讀取完其他配置文件後會讀取mysqld-auto.cnf文件,mysqld-auto.conf中配置項會覆蓋其他配置文件的設置,參數設置以json形式存儲於mysqld-auto.conf文件中。

8.0中支持通過set persist 語法改變當前運行實例和配置文件mysqld-auto.conf文件中的配置項,set persist_only語法只更改mysqld-auto.conf中的配置項,不改變當前實例的配置項。可以通過RESET PERSIST、RESET PERSIST system_var_name、RESET PERSIST IF EXISTS system_var_name語法取消全部或者某一個配置項。

參數在8.0.4版本中引入,是可以動態設置的全局參數,默認值為8000000,可以設置為0到2147483647之間的任意整數。此數值表示MySQL用於正則表達式匹配函數REGEXP_LIKE()以及相關函數的最大堆棧內存可用字節數。

參數在8.0.4版本中引入,是可以動態設置的全局參數,默認值32。此參數表示匹配引擎進行正則表達式匹配函數REGEXP_LIKE()以及相關函數的最大步數,因而間接影響時間限制。

參數在8.0.11版本中引入,是可以動態設置的全局整型參數,默認值為8192,可以設置為8192-4294967295之間的任意4k的倍數。該參數設置server從binlog和relaylog中一次讀取的最小字節數。如果binlog或relaylog的IO壓力較大,影響系統性能,可適當增大該參數,減少IO次數,進而減小磁碟IO壓力。 master的dump線程和slave的coordinator 線程等所有讀取binlog和relaylog的線程都會分配rpl_read_size大小的buffer,因此設置過大會對伺服器內存有一定影響。

參數在8.0.3版本中引入,是可以動態設置的session級枚舉類型參數,默認值為FULL,可以設置為NONE。該參數控制傳輸元數據可選的連結server端是否傳輸元數據,設置為FULL時返回所有元數據,設置為NONE時不返回元數據。

是可以動態設置的global級參數,默認值為256,可以設置為256到524288之間的任意整數。此數值表示可以在字典對象緩存中保存的schema定義對象的最大數量。

此參數需要在MySQL啟動時指定,不可以動態設置。默認值為ON。當MySQL用OpenSSL編譯時,此參數可用。當data目錄下沒有RSA私有/公共密鑰對時,此參數用於控制是否在啟動時自動生成生成RSA私有/公共密鑰對。

此參數需要在MySQL啟動時指定,不可以動態設置。默認值為private_key.pem。此參數用於設置私鑰文件,設置為相對路徑時保存在data目錄下。

此參數用於設置公鑰文件。

ssl_fips_mode參數在8.0.11版本中引入,是可動態設置的global枚舉類型參數。默認值OFF,可以設置為OFF (0) 、ON (1)、STRICT (2)。

參數在8.0.11版本引入,是可以動態設置的全局和session級布爾型參數,默認值為OFF。設置為OFF並且表行格式為默認值時,執行show create table顯示的建表語句不會顯示row_format值;啟用該參數時,show create table的create table語句會一直顯示row_format值。

參數在8.0.11版本中引入,是可以動態設置global級枚舉類型參數。默認值為OFF,可以設置為OFF (0) 、ON (1)、STRICT (2)。當將OpenSSL編譯進MySQL並且FIPS模塊可用時,用於設置FIPS模塊是否在服務端可用。

參數在8.0.2版本中引入,是可以動態設置的global級整型參數,默認值為1073741824(1GB),可以設置為2097152-2^64-1的任意整數。當TempTable 存儲引擎的表小於temptable_max_ram時,臨時表不會存入磁碟。

MySQL8.0新增的的配置項較多,在配置線上應用時還是需要多注意參數的不同配置對資料庫整體運行的影響,結合自己的業務的實際情況設置最符合自己生產需要的配置文件。


本文轉載自公眾號 京東商城技術架構 ,已獲授權,所有權歸原作者所有。

相關焦點

  • MySQL 8.0 中的索引可以隱藏了…
    MySQL 8.0 雖然發布很久了,但可能大家都停留在 5.7.x,甚至更老,其實 MySQL 8.0 新增了許多重磅新特性,比如棧長今天要介紹的 "隱藏索引" 或者 "不可見索引"。隱藏索引是什麼鬼?
  • MySQL 8.0 可以操作 JSON 了,牛逼...
    作者:旺財不哭連結:https://www.jianshu.com/p/d4b012769a3b經過漫長的測試,即將整體遷移至Mysql8.0; Mysql8.0 對於Json操作新增/優化了很多相關Json的API操作。
  • MySQL進階系列:主從複製原理及其配置
    測試階段兩個mysql實例IP相同都是本機(ip=127.0.0.1),區分下分別命名 主是node1,從是node2,埠不同 我實際測試用的是3306和3307)2、安裝mysql資料庫網上很多按照的例子,這裡就不重複說了,請自行百度/google(結果是資料庫能正常使用
  • MySQL授權管理與結構分層
    start ----> mysqld_safe ---->mysqldmysql.service ------> mysqld需要依賴於 /etc/my.cnf維護性任務我們一般分將參數添加到命令行中
  • 主庫n -> 從庫s - MySQL5.7多主一從(多源複製)同步配置 - 計算機...
    部署環境註:使用docker部署mysql實例,方便快速搭建演示環境。但本文重點是講解主從配置,因此簡略描述docker環境構建mysql容器實例。資料庫:MySQL 5.7.x (相比5.5,5.6而言,5.7同步性能更好,支持多源複製,可實現多主一從,主從庫版本應保證一致)作業系統:CentOS 7.x容器:Docker 17.09.0-ce鏡像:mysql:5.7主庫300:IP=192.168.10.212; PORT=4300; server-id=300; database=test3; table=user主庫400
  • 青銅到王者,快速提升你 MySQL 資料庫的段位!
    對於「sync_binlog」參數的各種設置的說明如下:sync_binlog=0,當事務提交之後,MySQL 不做 fsync 之類的磁碟同步指令刷新 binlog_cache 中的信息到磁碟,而讓 Filesystem 自行決定什麼時候來做同步,或者 cache 滿了之後才同步到磁碟。
  • Prometheus 監控MySQL資料庫
    Prometheus 監控mysql容器Prometheus這裡我們演示中,prometheus以及mysqld_exporter都使用容器進行運行。這裡我的伺服器配置為阿里雲2h4g由於Prometheus及相關的exporter會隨著版本發生變化,官方推薦都是最新的版本。
  • 資料庫基礎:mysql主從集群搭建
    mysql 主從備份工作原理主從簡單的說就是把 一個伺服器上執行過的sql語句在別的伺服器上也重複執行一遍, 這樣只要兩個資料庫的初態是一樣的,那麼它們就能一直同步。當然這種複製和重複都是mysql自動實現的,我們只需要配置即可。
  • MySQL優化:定位慢查詢的兩種方法以及使用explain分析SQL
    一般定位慢查詢會有兩種解決方案:根據慢查詢日誌定位使用show processlist定位,查詢正在執行的慢查詢NO.1 慢查詢日誌定位解析MySQL 的慢查詢日誌記錄的內容是:在 MySQL 中響應時間超過參數 long_query_time(單位秒,默認值 10)設置的值並且掃描記錄數不小於 min_examined_row_limit(默認值0)的語句
  • MySQL 5.7的新增功能白皮書(中文版)
    測試環境如下:關於MySQL 5.7 基準測試更多信息,請訪問:http://www.mysql.com/why-mysql/benchmarks/適用於特定測試應用案例的Sysbech基準測試工具是免費的,可以在這裡下載:http://dev.mysql.com/downloads/benchmarks.html原生JSON
  • mysql怎麼處理大表在不停機的情況下增加欄位
    /tmp/mysql.sock  --charset=utf8mb4 --execute主要過程如下:1> Cannot connect to A=utf8mb4,P=3306,S=/data/mysql3306/tmp/mysql.sock,h=192.168.28.132,p=...
  • magic-api 0.5.4 發布,接口快速開發框架
    本次更新內容: 新增代碼懸浮提示 修復編輯器的代碼提示不完整的問題
  • MySQL中InnoDB-Cluster 日常運維掃盲-愛可生
    輸出當前 mysql router 路由信息,包含讀寫埠,版本等信息。debian-ytt1", "lastCheckIn": "2020-07-15 11:43:18", "roPort": 6447, "roXPort": 64470, "rwPort": 6446, "rwXPort": 64460, "version": "8.0.21
  • SpringBoot + MyBatis + MySQL讀寫分離實踐!
    這裡我們選擇程序自己來做,主要是利用Spring提供的路由數據源,以及AOP然而,應用程式層面去做讀寫分離最大的弱點(不足之處)在於無法動態增加資料庫節點,因為數據源配置都是寫在配置中的,新增資料庫意味著新加一個數據源,必然改配置,並重啟應用。當然,好處就是相對簡單。2.
  • cacti安裝與配置
    [root@localhost ~]# yum install -y yum install php php-mysql php-snmp mysql mysql-server  php-pdo perl-DBD-MySQL[root@localhost ~]# vim  /etc/httpd/conf/httpd.conf   #配置cacti訪問路徑
  • 雲託管重磅更新:支持MySQL 8.0、CLI工具、一鍵部署新模板
    以下是 微信雲託管 本周更新公告,公告將圍繞微信雲託管新增能力、功能優化等產品動態每周更新,幫助微信開發者更好地了解和使用雲託管
  • oppo r15參數配置怎麼樣 oppo r15參數介紹【詳解】
    oppo r15參數配置,oppo r15手機價格,隨著宣傳視頻的推出oppo r15手機曝光在大眾面前,oppo r15配置的超視野全面屏以及小劉海設計是它主要特色,這裡為大家整理oppo r15參數配置以及預測oppo r15手機價格。
  • MySQL 是怎麼死鎖的?
    Session1:mysql> select * from t3 where id in (8,9) for update;+----+---+-+-+| id | course | name | ctime               |+----+---+-+-+|  8 | WA     | f    | 2016-03-02 11:36:
  • 安裝MySQL後,需要調整的10個性能配置項
    在大多數情況下,我們只建議安裝後更改一些核心的 MySQL 性能調優參數,即使有數百個選項可用。這篇文章的目的是給你列出一些最關鍵的參數設置,並告訴你如何去調整它們。但到最後,仍然需要把這個改變寫到配置文件中,使之永久生效。有時候即使 MySQL 重啟後,配置文件中的參數也不生效。這時候你需要考慮:你使用正確的配置文件了嗎?你把這個參數放在正確的地方了嗎?(在這篇文章中的所有配置都屬於[mysqld]部分)如在更改配置後資料庫無法啟動,需要檢查是否使用正確的單位?
  • 搞定MySQL安裝難安裝貴問題
    是真正的免安裝綠色方法,不用配環境變量,不用執行install命令,不用配置my.ini文件。步驟下載下載mysql-8.0.22-winx64.zip解壓到D盤初始化MySQL的bin目錄下執行mysqld--initialize-insecure