十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
MySQL8.0新增或改進(jìn)了數(shù)據(jù)字典、原子DDL、安全和賬戶、資源管理、InnoDB增強(qiáng)、字符集支持、JSON增強(qiáng)、字段類型支持、優(yōu)化器、通用表達(dá)式、窗口函數(shù)、正則表達(dá)式支持、內(nèi)部臨時表、日志、備份鎖等特性,MySQL本身是一個配置比較多比較復(fù)雜的數(shù)據(jù)庫,那么新的版本中有哪些參數(shù)項是新增的用來控制這些新特性的使用那?接下來我們對新增的配置項進(jìn)行逐一分析。
? activate_all_roles_on_login
此參數(shù)在版本8.0.2引入,是一個可以動態(tài)調(diào)整的global級參數(shù),默認(rèn)值為OFF。此參數(shù)用于控制在賬戶登錄時是否激活已經(jīng)授予的角色,如果為ON則授予的角色會被激活,設(shè)置為OFF時只能通過SET DEFAULT ROLE顯式激活用戶角色。activate_all_roles_on_login設(shè)置只在賬戶登錄或者開始執(zhí)行存儲過程時生效,如果想更改session的role需要執(zhí)行SET ROLE語句。
? binlog_expire_logs_seconds
參數(shù)在版本8.0.1中引入,是可以動態(tài)調(diào)整的global級參數(shù),8.0.4之前默認(rèn)值為0,8.0.11之后為2592000也就是30天。之前版本binlog自動清理時間以參數(shù)expire_logs_days也就是以天為單位,當(dāng)前兩個參數(shù)并存并且有一個非0時則以非0的參數(shù)為binlog自動清理時間,如果兩個都為非0值則以binlog_expire_logs_seconds為binlog清理時間忽略expire_logs_days參數(shù)設(shè)置。
? binlog_row_metadata
此參數(shù)在8.0.1版本引入,是可以動態(tài)調(diào)整的global級參數(shù),默認(rèn)值為MINIMAL,可以設(shè)置為FULL。此參數(shù)用于控制row格式下binlog中表的元數(shù)據(jù)數(shù)量,設(shè)置為MINMAL時記錄符號標(biāo)記、列字符集和空間類型,設(shè)置為FULL時會記錄表所有的元數(shù)據(jù),例如列名、枚舉或集合所有的值、主鍵信息等等。
? binlog_row_value_options
此參數(shù)在8.0.3版本引入,是可以動態(tài)調(diào)整global級參數(shù),默認(rèn)值為’’,可以設(shè)置為PARTIAL_JSON。
當(dāng)設(shè)置為PARTIAL_JSON并且binlog格式為ROW或者M(jìn)IXED模式時,使用JSON_SET(),JSON_REPLACE()和 JSON_REMOVE()對JSON的列進(jìn)行操作時,binlog只記錄更新的部分,而不是記錄整個JSON的變更,進(jìn)而減少binlog大小。不過當(dāng)對JSON文檔的更改需要比當(dāng)前文檔更大的空間或者SERVER不能夠進(jìn)行部分更新時,binlog還是會記錄整個JSON文檔。
? binlog_transaction_dependency_history_size
此參數(shù)在版本8.0.1中引入,是可以動態(tài)調(diào)整的global級參數(shù),默認(rèn)值為25000,可以設(shè)置為0-1000000之間的任意整數(shù)。8.0基于WriteSet進(jìn)行并行復(fù)制時,WriteSet是一個hash數(shù)組,binlog_transaction_dependency_history_size值就是這個hash數(shù)組的最大值。
? binlog_transaction_dependency_tracking
此參數(shù)在8.0.1版本引入,是可以動態(tài)調(diào)整的global級枚舉類型參數(shù),默認(rèn)值為COMMIT_ORDER,也可以設(shè)置為WRITESET、WRITESET_SESSION。此參數(shù)用于主庫決定事務(wù)間在從庫進(jìn)行多線程復(fù)制的依賴模式。
COMMIT_ORDERE:根據(jù)主庫事務(wù)提交時間戳進(jìn)行并行,也就5.7的GroupCommit;
WRITESET:根據(jù)WriteSet進(jìn)行并行,只要是不在同一個隊列里的都可以并行;
WRITESET_SESSION: 根據(jù)WriteSet進(jìn)行并行,但相同session的事務(wù)不會并行。
? caching_sha2_password_auto_generate_rsa_keys
在版本8.0.4引入,是不可動態(tài)調(diào)整的global級參數(shù),默認(rèn)值為ON,當(dāng)OpenSSL被編譯進(jìn)MySQL時,根據(jù)此參數(shù)判斷是否在啟動時自動生成公鑰和私鑰文件。
? caching_sha2_password_private_key_path
同上,用于指定私鑰文件路徑及文件名,當(dāng)設(shè)置為相對路徑時存儲在數(shù)據(jù)文件路徑下。
? caching_sha2_password_public_key_path
同上,用于存放公鑰文件路徑及文件名稱。
? cte_max_recursion_depth
在8.0.3版本引入,是可以動態(tài)調(diào)整的global、session級的整數(shù)類型參數(shù),默認(rèn)值為1000,可以設(shè)置為0 – 4294967295之間的任意整數(shù)。該參數(shù)用于設(shè)置公共表表達(dá)式的最大遞歸深度。如果SQL執(zhí)行過程中遞歸深度超過該值則會中斷執(zhí)行。
? default_collation_for_utf8mb4
在8.0.11版本中引入,是可以動態(tài)調(diào)整的global、session級枚舉類型參數(shù)。此參數(shù)值會從主庫傳遞到從庫,主要用于主從同步或者M(jìn)GR中從8.0之前版本向8.0同步數(shù)據(jù)時來保持主從間以一致的排序規(guī)則來處理數(shù)據(jù)。
? histogram_generation_max_mem_size
8.0.2版本引入,是可以動態(tài)設(shè)置的global、session級參數(shù),默認(rèn)值為20000000,可以設(shè)置為1000000到18446744073709551615(32位系統(tǒng)為4294967295)之間任意值。當(dāng)建立直方圖時,需要將表的數(shù)據(jù)讀入內(nèi)存,但是當(dāng)表過大時可能會將將大量數(shù)據(jù)讀入內(nèi)存,為規(guī)避這個風(fēng)險,server層根據(jù)histogram_generation_max_mem_size設(shè)置進(jìn)行計算,計算出讀出多少行進(jìn)入內(nèi)存,進(jìn)行取樣。
防城港網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,防城港網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為防城港近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的防城港做網(wǎng)站的公司定做!
? information_schema_stats_expiry
參數(shù)由8.03版本引入,是可以動態(tài)設(shè)置的global、session級參數(shù)。默認(rèn)值為86400,可以設(shè)置為0到315360000之間熱任意整數(shù)。
Information_schema庫中有一些列提供表的統(tǒng)計數(shù)據(jù),統(tǒng)計數(shù)據(jù)會隨著表中內(nèi)容的變化進(jìn)行更新。默認(rèn)情況下MySQL檢索mysql.index_stats 和mysql.table_stats兩個字典表進(jìn)行表信息檢索,這樣遠(yuǎn)比從存儲引擎層檢索相關(guān)信息高效的多。如果需要的表統(tǒng)計信息沒有被緩存或者已經(jīng)過期,則會從存儲引擎獲取相關(guān)統(tǒng)計信息并緩存到mysql.index_stats 和mysql.table_stats兩個表中,在表統(tǒng)計信息過期之前,后來的查詢都會使用此緩存信息。每個session可以獨立設(shè)置information_schema_stats_expiry,默認(rèn)值是86400秒也就是24小時,此數(shù)值最大可以設(shè)置為一年;如果想要更新某張表的統(tǒng)計信息執(zhí)行ANALYZE TABLE即可;如果每次查詢都想獲取最新的統(tǒng)計信息,將此值設(shè)置成0即可,MySQL每次都會跳過mysql.index_stats 和mysql.table_stats兩個字典表直接通過存儲引擎獲取統(tǒng)計信息。
? innodb_dedicated_server
參數(shù)在8.03版本中引入,是一個只能在啟動時設(shè)置的global級參數(shù)。此參數(shù)設(shè)置為ON時,MySQL會根據(jù)檢測到的內(nèi)存大小設(shè)置innodb_buffer_pool_size、innodb_log_file_size、innodb_flush_method三個參數(shù)。有了這個參數(shù)我們就不用再寫腳本根據(jù)內(nèi)存大小去修改配置文件的這三個參數(shù)了,運(yùn)維自動化又省了一步。當(dāng)服務(wù)器MySQL與其他應(yīng)用共享服務(wù)器內(nèi)存時建議設(shè)置為OFF。那么MySQL具體的設(shè)置策略是什么那?
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
當(dāng)開啟 innodb_dedicated_server時,刷盤方式會采用O_DIRECT_NO_FSYNC ,O_DIRECT_NO_FSYNC 不可用時將會采用默認(rèn)的刷盤方式。需要注意的是,目前在linux中當(dāng)文件大小發(fā)生變化時,O_DIRECT_NO_FSYNC 可能會導(dǎo)致系統(tǒng)hung住,因此不建議在linux中采用該刷盤方式。
? innodb_directories
參數(shù)在版本8.0.4中引入,只能在啟動時指定,不能夠動態(tài)調(diào)整。數(shù)據(jù)庫啟動時會根據(jù)此參數(shù)掃描innodb 表空間文件。在數(shù)據(jù)庫離線時,我們可以通過指定該參數(shù)用于移動或者恢復(fù)表空間文件到指定的路徑。
? innodb_log_spin_cpu_abs_lwm
參數(shù)在8.0.11版本中引入,是可以動態(tài)調(diào)整的全局參數(shù),默認(rèn)值為80,可以設(shè)置為0到4294967295之間的任意整數(shù)。此數(shù)值表示innodb用戶線程刷redo進(jìn)行自旋等待時CPU的低水位,當(dāng)cpu使用率低于此值時不進(jìn)行自旋等待。如果此值設(shè)置超過100例如150時,則表示在多核CPU時第一個核使用率為100%,第二個核使用率為50%。
? innodb_log_spin_cpu_pct_hwm
同上一個參數(shù),默認(rèn)值為50,可以設(shè)置為0到100之間的任意整數(shù)值。此參數(shù)表示innodb用戶線程刷redo進(jìn)行自旋等待的高水位,表示CPU總處理能力百分比,例如4核設(shè)置為50時,表示個2個核為100%。該參數(shù)核數(shù)計算以實際使用CPU為準(zhǔn),例如將mysqld進(jìn)程綁定到48核中的4核,則該參數(shù)忽略其他44核。
? innodb_log_wait_for_flush_spin_hwm
參數(shù)在8.0.11版本中引入,是可以動態(tài)調(diào)整的全局整型參數(shù),單位為毫秒,默認(rèn)值為400可以設(shè)置為0到2^64-1(32位系統(tǒng)為2^32-1)之間的整數(shù)值,當(dāng)用戶線程等待刷redo超過innodb_log_wait_for_flush_spin_hwm毫秒后不再進(jìn)行自旋。
? innodb_print_ddl_logsz
這個參數(shù)在8.03版本中引入是可以動態(tài)設(shè)置的global級參數(shù)。默認(rèn)值為OFF,設(shè)置為ON時能夠在標(biāo)準(zhǔn)錯誤輸出,根據(jù)系統(tǒng)和配置的不同可能是error log、Linux終端或windows控制臺。8.0引入了原子DDL的特性,InnoDB通過寫DDL日志到mysql.innodb_ddl_log的方式來實現(xiàn)DDL的重做和回滾,但除非在debug模式下,mysql.innodb_ddl_log對用戶是不可見的,可以通過設(shè)置innodb_print_ddl_logsz為ON來在錯誤輸出中查看DDL的重做和回滾信息。
? innodb_redo_log_encrypt
這個參數(shù)在8.0.1版本中引入,是可以動態(tài)設(shè)置的global級參數(shù),默認(rèn)值為OFF。此參數(shù)用于控制redo log的加密,將內(nèi)存中的redo寫入磁盤時進(jìn)行加密,從磁盤中讀取redo log進(jìn)內(nèi)存時進(jìn)行解密。Redo的元數(shù)據(jù)和加密秘鑰存放第一個redo文件頭部,如果啟動前將此文件刪除則會自動取消加密,如果有redo log已經(jīng)加密存儲,則會啟動失敗。
? innodb_stats_include_delete_marked
參數(shù)在8.0.1版本中引入,時可以動態(tài)設(shè)置的全局布爾類型參數(shù),默認(rèn)值為No。默認(rèn)情況下,MySQL進(jìn)行表統(tǒng)計信息計算時,會采用Repeatable-Read隔離級別,因此其他進(jìn)程在采用Repeatable-Read及以上隔離級別查詢時,數(shù)據(jù)和索引的統(tǒng)計信息已經(jīng)排除掉了其他未提交事務(wù)中刪除的數(shù)據(jù),這樣會導(dǎo)致執(zhí)行計劃不是最優(yōu)。當(dāng)開啟innodb_stats_include_delete_marked時,優(yōu)化器在計算統(tǒng)計數(shù)據(jù)時會將其他未提交事務(wù)中已刪除的數(shù)據(jù)計算在內(nèi)。
? innodb_undo_log_encrypt
這個參數(shù)在8.0.1版本引入,是可以動態(tài)設(shè)置的global級參數(shù),默認(rèn)值為OFF。只有在獨立開啟undo時此參數(shù)設(shè)置為ON才會生效。和redo一樣,undo在寫入磁盤時進(jìn)行加密,從磁盤讀取到內(nèi)存時進(jìn)行解密。Undo的加密和解密使用表空間的加密key。Undo的元數(shù)據(jù)和加密的密碼存放于undo表空間文件頭部。
? internal_tmp_mem_storage_engine
參數(shù)在8.0.2版本引入,是可以動態(tài)調(diào)整的全局、session級枚舉類型參數(shù),默認(rèn)值為TempTable,也可以設(shè)置為Memory。優(yōu)化器根據(jù)此參數(shù)選擇內(nèi)存中內(nèi)部臨時表的引擎類型。
? keyring_operations
參數(shù)在8.0.4版本引入,是可以動態(tài)設(shè)置的全局布爾型參數(shù),默認(rèn)值為ON。此參數(shù)設(shè)置是否允許對innodb表空間加密所用的秘鑰進(jìn)行遷移等操作。
? log_error_services
這個參數(shù)在8.0.2版本引入,是可以動態(tài)設(shè)置的global級參數(shù),默認(rèn)值為”log_filter_internal; log_sink_internal”。
? mandatory_roles
這個參數(shù)在8.0.2版本引入,是可以動態(tài)設(shè)置的global級參數(shù),默認(rèn)值為空字符串。
? original_commit_timestamp
在8.0.1版本引入,是可以動態(tài)調(diào)整的session級整型參數(shù)。從庫在進(jìn)行主從復(fù)制重放binlog時,該參數(shù)設(shè)置為事務(wù)在主庫提交時的時間戳,從公元紀(jì)元開始的毫秒數(shù)值。
? password_history
在版本8.0.3引入,是可以動態(tài)調(diào)整的全局整型參數(shù),默認(rèn)值為0,可以設(shè)置為0- 4294967295之間的任意整數(shù)。該參數(shù)數(shù)值用于設(shè)置歷史密碼可以再次使用之前需要進(jìn)行密碼修改的次數(shù)。設(shè)置為0則不會對歷史密碼是否可以重用進(jìn)行限制。
? password_reuse_interval
在版本8.0.3版本引入,是可以動態(tài)調(diào)整的整型參數(shù),默認(rèn)值為0,可以設(shè)置為0- 4294967295之間的任意整數(shù)。該參數(shù)用于設(shè)置歷史密碼可以重用的間隔天數(shù),設(shè)置為0則不會對歷史密碼重用進(jìn)行時間間隔設(shè)置。
? performance_schema_max_digest_sample_age
在8.0.3版本引入,是可以動態(tài)調(diào)整的全局整型參數(shù),默認(rèn)值為60,可以設(shè)置為0- 1048576之間任意整數(shù)。該參數(shù)用于設(shè)置events_statements_summary_by_digest表中語句重新采用時間,如果有新的相同摘要值得語句被采集到并且當(dāng)前表中的數(shù)據(jù)執(zhí)行時間為performance_schema_max_digest_sample_age秒之前,則會使用當(dāng)前語句替換events_statements_summary_by_digest中采樣的語句。
? persisted_globals_load
參數(shù)只能在啟動時指定,不可動態(tài)調(diào)整,默認(rèn)值為ON。當(dāng)設(shè)置為ON時,在讀取完其他配置文件后會讀取mysqld-auto.cnf文件,mysqld-auto.conf中配置項會覆蓋其他配置文件的設(shè)置,參數(shù)設(shè)置以json形式存儲于mysqld-auto.conf文件中。
8.0中支持通過set persist 語法改變當(dāng)前運(yùn)行實例和配置文件mysqld-auto.conf文件中的配置項,set persist_only語法只更改mysqld-auto.conf中的配置項,不改變當(dāng)前實例的配置項??梢酝ㄟ^RESET PERSIST、RESET PERSIST system_var_name、RESET PERSIST IF EXISTS system_var_name語法取消全部或者某一個配置項。
? regexp_stack_limit
參數(shù)在8.0.4版本中引入,是可以動態(tài)設(shè)置的全局參數(shù),默認(rèn)值為8000000,可以設(shè)置為0到2147483647之間的任意整數(shù)。此數(shù)值表示MySQL用于正則表達(dá)式匹配函數(shù)REGEXP_LIKE()以及相關(guān)函數(shù)的最大堆棧內(nèi)存可用字節(jié)數(shù)。
? regexp_time_limit
參數(shù)在8.0.4版本中引入,是可以動態(tài)設(shè)置的全局參數(shù),默認(rèn)值32。此參數(shù)表示匹配引擎進(jìn)行正則表達(dá)式匹配函數(shù)REGEXP_LIKE()以及相關(guān)函數(shù)的最大步數(shù),因而間接影響時間限制。
? rpl_read_size
參數(shù)在8.0.11版本中引入,是可以動態(tài)設(shè)置的全局整型參數(shù),默認(rèn)值為8192,可以設(shè)置為8192-4294967295之間的任意4k的倍數(shù)。該參數(shù)設(shè)置server從binlog和relaylog中一次讀取的最小字節(jié)數(shù)。如果binlog或relaylog的IO壓力較大,影響系統(tǒng)性能,可適當(dāng)增大該參數(shù),減少IO次數(shù),進(jìn)而減小磁盤IO壓力。 master的dump線程和slave的coordinator 線程等所有讀取binlog和relaylog的線程都會分配rpl_read_size大小的buffer,因此設(shè)置過大會對服務(wù)器內(nèi)存有一定影響。
? resultset_metadata
參數(shù)在8.0.3版本中引入,是可以動態(tài)設(shè)置的session級枚舉類型參數(shù),默認(rèn)值為FULL,可以設(shè)置為NONE。該參數(shù)控制傳輸元數(shù)據(jù)可選的鏈接server端是否傳輸元數(shù)據(jù),設(shè)置為FULL時返回所有元數(shù)據(jù),設(shè)置為NONE時不返回元數(shù)據(jù)。
? schema_definition_cache
是可以動態(tài)設(shè)置的global級參數(shù),默認(rèn)值為256,可以設(shè)置為256到524288之間的任意整數(shù)。此數(shù)值表示可以在字典對象緩存中保存的schema定義對象的最大數(shù)量。
? sha256_password_auto_generate_rsa_keys
此參數(shù)需要在MySQL啟動時指定,不可以動態(tài)設(shè)置。默認(rèn)值為ON。當(dāng)MySQL用OpenSSL編譯時,此參數(shù)可用。當(dāng)data目錄下沒有RSA私有/公共密鑰對時,此參數(shù)用于控制是否在啟動時自動生成生成RSA私有/公共密鑰對。
? sha256_password_private_key_path
此參數(shù)需要在MySQL啟動時指定,不可以動態(tài)設(shè)置。默認(rèn)值為private_key.pem。此參數(shù)用于設(shè)置私鑰文件,設(shè)置為相對路徑時保存在data目錄下。
? sha256_password_public_key_path
此參數(shù)用于設(shè)置公鑰文件。
ssl_fips_mode參數(shù)在8.0.11版本中引入,是可動態(tài)設(shè)置的global枚舉類型參數(shù)。默認(rèn)值OFF,可以設(shè)置為OFF (0) 、ON (1)、STRICT (2)。
? show_create_table_verbosity
參數(shù)在8.0.11版本引入,是可以動態(tài)設(shè)置的全局和session級布爾型參數(shù),默認(rèn)值為OFF。設(shè)置為OFF并且表行格式為默認(rèn)值時,執(zhí)行show create table顯示的建表語句不會顯示row_format值;啟用該參數(shù)時,show create table的create table語句會一直顯示row_format值。
? ssl_fips_mode
參數(shù)在8.0.11版本中引入,是可以動態(tài)設(shè)置global級枚舉類型參數(shù)。默認(rèn)值為OFF,可以設(shè)置為OFF (0) 、ON (1)、STRICT (2)。當(dāng)將OpenSSL編譯進(jìn)MySQL并且FIPS模塊可用時,用于設(shè)置FIPS模塊是否在服務(wù)端可用。
? temptable_max_ram
參數(shù)在8.0.2版本中引入,是可以動態(tài)設(shè)置的global級整型參數(shù),默認(rèn)值為1073741824(1GB),可以設(shè)置為2097152-2^64-1的任意整數(shù)。當(dāng)TempTable 存儲引擎的表小于temptable_max_ram時,臨時表不會存入磁盤。
MySQL8.0新增的的配置項較多,在配置線上應(yīng)用時還是需要多注意參數(shù)的不同配置對數(shù)據(jù)庫整體運(yùn)行的影響,結(jié)合自己的業(yè)務(wù)的實際情況設(shè)置最符合自己生產(chǎn)需要的配置文件。
本文由京東商城數(shù)據(jù)庫技術(shù)部張洋提供。