MySQL8.0新增配置参数详解
MySQL8.0新增或改进了数据字典、原⼦DDL、安全和账户、资源管理、InnoDB增强、字符集⽀持、JSON增强、字段类型⽀持、优化器、通⽤表达式、窗⼝函数、正则表达式⽀持、内部临时表、⽇志、备份锁等特性,MySQL本⾝是⼀个配置⽐较多⽐较复杂的数据库,那么新的版本中有哪些参数项是新增的⽤来控制这些新特性的使⽤那?接下来我们对新增的配置项进⾏逐⼀分析。
activate_all_roles_on_login
此参数在版本8.0.2引⼊,是⼀个可以动态调整的global级参数,默认值为OFF。此参数⽤于控制在账户登录时是否激活已经授予的⾓⾊,如果为ON则授予的⾓⾊会被激活,设置为OFF时只能通过SET DEFAULT ROLE显式激活⽤户⾓⾊。activate_all_roles_on_login设置只在账户登录或者开始执⾏存储过程时⽣效,如果想更改session的role需要执⾏SET ROLE语句。
binlog_expire_logs_seconds
参数在版本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参数设置。
binlog_row_metadata
此参数在8.0.1版本引⼊,是可以动态调整的global级参数,默认值为MINIMAL,可以设置为FULL。此参数⽤于控制row格式下binlog中表的元数据数量,设置为MINMAL时记录符号标记、列字符集和空间类型,设置为FULL时会记录表所有的元数据,例如列名、枚举或集合所有的值、主键信息等等。
binlog_row_value_options
此参数在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⽂档。
binlog_transaction_dependency_history_size
此参数在版本8.0.1中引⼊,是可以动态调整的global级参数,默认值为25000,可以设置为0-1000000之间的任意整数。8.0基于WriteSet进⾏并⾏复制时,WriteSet是⼀个hash数组,binlog_transaction_dependency_history_size值就是这个hash数组的最⼤值。  binlog_transaction_de
pendency_tracking
此参数在8.0.1版本引⼊,是可以动态调整的global级枚举类型参数,默认值为COMMIT_ORDER,也可以设置为WRITESET、WRITESET_SESSION。此参数⽤于主库决定事务间在从库进⾏多线程复制的依赖模式。
COMMIT_ORDERE:根据主库事务提交时间戳进⾏并⾏,也就5.7的GroupCommit;
WRITESET:根据WriteSet进⾏并⾏,只要是不在同⼀个队列⾥的都可以并⾏;
WRITESET_SESSION: 根据WriteSet进⾏并⾏,但相同session的事务不会并⾏。
caching_sha2_password_auto_generate_rsa_keys
在版本8.0.4引⼊,是不可动态调整的global级参数,默认值为ON,当OpenSSL被编译进MySQL时,根据此参数判断是否在启动时⾃动⽣成公钥和私钥⽂件。
caching_sha2_password_private_key_path
同上,⽤于指定私钥⽂件路径及⽂件名,当设置为相对路径时存储在数据⽂件路径下。
caching_sha2_password_public_key_path
同上,⽤于存放公钥⽂件路径及⽂件名称。
cte_max_recursion_depth
在8.0.3版本引⼊,是可以动态调整的global、session级的整数类型参数,默认值为1000,可以设置为0 – 4294967295之间的任意整数。该参数⽤于设置公共表表达式的最⼤递归深度。如果SQL执⾏过程中递归深度超过该值则会中断执⾏。
default_collation_for_utf8mb4
在8.0.11版本中引⼊,是可以动态调整的global、session级枚举类型参数。此参数值会从主库传递到从库,主要⽤于主从同步或者MGR 中从8.0之前版本向8.0同步数据时来保持主从间以⼀致的排序规则来处理数据。
histogram_generation_max_mem_size
8.0.2版本引⼊,是可以动态设置的global、session级参数,默认值为20000000,可以设置为1000000到
18446744073709551615(32位系统为4294967295)之间任意值。当建⽴直⽅图时,需要将表的数据读⼊内存,但是当表过⼤时可能会将将⼤量数据读⼊内存,为规避这个风险,server层根据histogram_generation_max_mem_size设置进⾏计算,计算出读出多少⾏进⼊内存,进⾏取样。
information_schema_stats_expiry
参数由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秒也mysql下载配置
信息过期之前,后来的查询都会使⽤此缓存信息。每个session可以独⽴设置information_schema_stats_expiry,默认值是86400秒也就是24⼩时,此数值最⼤可以设置为⼀年;如果想要更新某张表的统计信息执⾏ANALYZE TABLE即可;如果每次查询都想获取最新的统计信息,将此值设置成0即可,MySQL每次都会跳过mysql.index_stats 和mysql.table_stats两个字典表直
接通过存储引擎获取统计信息。
innodb_dedicated_server
参数在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中采⽤该刷盘⽅式。
innodb_directories
参数在版本8.0.4中引⼊,只能在启动时指定,不能够动态调整。数据库启动时会根据此参数扫描innodb 表空间⽂件。在数据库离线时,我们可以通过指定该参数⽤于移动或者恢复表空间⽂件到指定的路径。
innodb_log_spin_cpu_abs_lwm
参数在8.0.11版本中引⼊,是可以动态调整的全局参数,默认值为80,可以设置为0到4294967295之间的任意整数。此数值表⽰innodb⽤户线程刷redo进⾏⾃旋等待时CPU的低⽔位,当cpu使⽤率低于此值时不进⾏⾃旋等待。如果此值设置超过100例如150时,则表⽰在多核CPU时第⼀个核使⽤率为100%,第⼆个核使⽤率为50%。
innodb_log_spin_cpu_pct_hwm
同上⼀个参数,默认值为50,可以设置为0到100之间的任意整数值。此参数表⽰innodb⽤户线程刷redo进⾏⾃旋等待的⾼⽔位,表⽰CPU总处理能⼒百分⽐,例如4核设置为50时,表⽰个2个核为100%。该参数核数计算以实际使⽤CPU为准,例如将mysqld进程绑定到48核中的4核,则该参数忽略其他44核。
innodb_log_wait_for_flush_spin_hwm
参数在8.0.11版本中引⼊,是可以动态调整的全局整型参数,单位为毫秒,默认值为400可以设置为0到2^64-1(32位系统为2^32-1)之间的整数值,当⽤户线程等待刷redo超过innodb_log_wait_for_flush_spin_hwm毫秒后不再进⾏⾃旋。
innodb_print_ddl_logsz
这个参数在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的重做和回滚信息。
innodb_redo_log_encrypt
这个参数在8.0.1版本中引⼊,是可以动态设置的global级参数,默认值为OFF。此参数⽤于控制redo log的加密,将内存中的redo写⼊磁盘时进⾏加密,从磁盘中读取redo log进内存时进⾏解密。Redo的元数据和加密秘钥存放第⼀个redo⽂件头部,如果启动前将此⽂件删除则会⾃动取消加密,如果有redo log已经加密存储,则会启动失败。
innodb_stats_include_delete_marked
参数在8.0.1版本中引⼊,时可以动态设置的全局布尔类型参数,默认值为No。默认情况下,MySQL进⾏表统计信息计算时,会采⽤Repeatable-Read隔离级别,因此其他进程在采⽤Repeatable-Read及以上隔离级别查询时,数据和索引的统计信息已经排除掉了其他未提交事务中删除的数据,这样会导致执⾏计划不是最优。当开启innodb_stats_include_delete_marked时,优化器在计算统计数据时会将其他未提交事务中已删除的数据计算在内。
innodb_undo_log_encrypt
这个参数在8.0.1版本引⼊,是可以动态设置的global级参数,默认值为OFF。只有在独⽴开启undo时此参数设置为ON才会⽣效。和redo ⼀样,undo在写⼊磁盘时进⾏加密,从磁盘读取到内存时进⾏解密。Undo的加密和解密使⽤表空间的加密key。Undo的元数据和加密的
⼀样,undo在写⼊磁盘时进⾏加密,从磁盘读取到内存时进⾏解密。Undo的加密和解密使⽤表空间的加密key。Undo的元数据和加密的密码存放于undo表空间⽂件头部。
internal_tmp_mem_storage_engine
参数在8.0.2版本引⼊,是可以动态调整的全局、session级枚举类型参数,默认值为TempTable,也可
以设置为Memory。优化器根据此参数选择内存中内部临时表的引擎类型。
keyring_operations
参数在8.0.4版本引⼊,是可以动态设置的全局布尔型参数,默认值为ON。此参数设置是否允许对innodb表空间加密所⽤的秘钥进⾏迁移等操作。
log_error_services
这个参数在8.0.2版本引⼊,是可以动态设置的global级参数,默认值为”log_filter_internal; log_sink_internal”。
mandatory_roles
这个参数在8.0.2版本引⼊,是可以动态设置的global级参数,默认值为空字符串。
original_commit_timestamp
在8.0.1版本引⼊,是可以动态调整的session级整型参数。从库在进⾏主从复制重放binlog时,该参数设置为事务在主库提交时的时间戳,从公元纪元开始的毫秒数值。
password_history
在版本8.0.3引⼊,是可以动态调整的全局整型参数,默认值为0,可以设置为0- 4294967295之间的任意整数。该参数数值⽤于设置历史密码可以再次使⽤之前需要进⾏密码修改的次数。设置为0则不会对历史密码是否可以重⽤进⾏限制。
password_reuse_interval
在版本8.0.3版本引⼊,是可以动态调整的整型参数,默认值为0,可以设置为0- 4294967295之间的任意整数。该参数⽤于设置历史密码可以重⽤的间隔天数,设置为0则不会对历史密码重⽤进⾏时间间隔设置。
performance_schema_max_digest_sample_age
在8.0.3版本引⼊,是可以动态调整的全局整型参数,默认值为60,可以设置为0- 1048576之间任意整数。该参数⽤于设置
events_statements_summary_by_digest表中语句重新采⽤时间,如果有新的相同摘要值得语句被采集到并且当前表中的数据执⾏时间为performance_schema_max_digest_sample_age秒之前,则会使⽤当前语句替换events_statements_summary_by_digest中采样的语句。
persisted_globals_load
参数只能在启动时指定,不可动态调整,默认值为ON。当设置为ON时,在读取完其他配置⽂件后会读取mysqld-autof⽂件,f中配置项会覆盖其他配置⽂件的设置,参数设置以json形式存储于f⽂件中。
8.0中⽀持通过set persist 语法改变当前运⾏实例和配置⽂件f⽂件中的配置项,set persist_only语法只更改f中的配置项,不改变当前实例的配置项。可以通过RESET PERSIST、RESET PERSIST system_var_name、RESET PERSIST IF EXISTS system_var_name语法取消全部或者某⼀个配置项。
regexp_stack_limit
参数在8.0.4版本中引⼊,是可以动态设置的全局参数,默认值为8000000,可以设置为0到2147483647之间的任意整数。此数值表⽰MySQL⽤于正则表达式匹配函数REGEXP_LIKE()以及相关函数的最⼤堆栈内存可⽤字节数。
regexp_time_limit
参数在8.0.4版本中引⼊,是可以动态设置的全局参数,默认值32。此参数表⽰匹配引擎进⾏正则表达
式匹配函数REGEXP_LIKE()以及相关函数的最⼤步数,因⽽间接影响时间限制。
rpl_read_size
参数在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,因此设置过⼤会对服务器内存有⼀定影响。
resultset_metadata
参数在8.0.3版本中引⼊,是可以动态设置的session级枚举类型参数,默认值为FULL,可以设置为NONE。该参数控制传输元数据可选的链接server端是否传输元数据,设置为FULL时返回所有元数据,设置为NONE时不返回元数据。
schema_definition_cache
是可以动态设置的global级参数,默认值为256,可以设置为256到524288之间的任意整数。此数值表⽰可以在字典对象缓存中保存的schema定义对象的最⼤数量。
sha256_password_auto_generate_rsa_keys
此参数需要在MySQL启动时指定,不可以动态设置。默认值为ON。当MySQL⽤OpenSSL编译时,此参数可⽤。当data⽬录下没有RSA 私有/公共密钥对时,此参数⽤于控制是否在启动时⾃动⽣成⽣成RSA私有/公共密钥对。
sha256_password_private_key_path
此参数需要在MySQL启动时指定,不可以动态设置。默认值为private_key.pem。此参数⽤于设置私钥⽂件,设置为相对路径时保存在data⽬录下。
sha256_password_public_key_path
sha256_password_public_key_path
此参数⽤于设置公钥⽂件。
ssl_fips_mode参数在8.0.11版本中引⼊,是可动态设置的global枚举类型参数。默认值OFF,可以设置为OFF (0) 、ON (1)、STRICT (2)。
show_create_table_verbosity
参数在8.0.11版本引⼊,是可以动态设置的全局和session级布尔型参数,默认值为OFF。设置为OFF并且表⾏格式为默认值时,执⾏show create table显⽰的建表语句不会显⽰row_format值;启⽤该参数时,show create table的create table语句会⼀直显⽰
row_format值。
ssl_fips_mode
参数在8.0.11版本中引⼊,是可以动态设置global级枚举类型参数。默认值为OFF,可以设置为OFF (0) 、ON (1)、STRICT (2)。当将OpenSSL编译进MySQL并且FIPS模块可⽤时,⽤于设置FIPS模块是否在服务端可⽤。
temptable_max_ram
参数在8.0.2版本中引⼊,是可以动态设置的global级整型参数,默认值为1073741824(1GB),可以设置为2097152-2^64-1的任意整数。当TempTable 存储引擎的表⼩于temptable_max_ram时,临时表不会存⼊磁盘。
MySQL8.0新增的的配置项较多,在配置线上应⽤时还是需要多注意参数的不同配置对数据库整体运⾏的影响,结合⾃⼰的业务的实际情况设置最符合⾃⼰⽣产需要的配置⽂件。
本⽂由京东商城数据库技术部张洋提供。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。