MySQL8.0新增配置参数是什么

74次阅读
没有评论

共计 8457 个字符,预计需要花费 22 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 MySQL8.0 新增配置参数是什么,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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_dependency_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 秒也就是 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 表空间文件头部。

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-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 语法取消全部或者某一个配置项。

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

此参数用于设置公钥文件。

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 新增的的配置项较多,在配置线上应用时还是需要多注意参数的不同配置对数据库整体运行的影响,结合自己的业务的实际情况设置最符合自己生产需要的配置文件。

关于“MySQL8.0 新增配置参数是什么”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-15发表,共计8457字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)