【MySQL 8.x】从参数变化解读 MySQL 8.2.0 发版说明
日前,MySQL 8.2.0 创新版本已正式上线,并提供安装包下载,但 docker 镜像尚未更新。
在 MySQL 8.1.0 刚发版时也做过分析,欢迎阅读: 重磅!MySQL 8.1.0 已来!有彩蛋~
本文将通过 MySQL 启动选项和系统参数的变更情况,来深入了解 8.2.0 都有哪些变化。
启动 MySQL 8.2.0
这一小节不是本文的重点,我们快速推进。
从官网直接下载二进制包,并初始化运行。
- 初始化日志:
1 | [shawnyan@centos7 ~]$ sudo /usr/local/mysql/bin/mysqld --initialize-insecure |
- 服务器启动日志:
1 | [mysql@centos7 ~]$ /usr/local/mysql/bin/mysqld |
为了便于测试,这里直接将 root 用户密码设为空,并直接运行 mysqld 服务。
- 登陆 MySQL 并查看版本信息:
删除的参数 (3)
1. abort-slave-event-count
The deprecated server startup options --abort-slave-event-count and --disconnect-slave-event-count, deprecated in MySQL 8.0, have been removed in this release. Attempting to start mysqld with either of these options now results in an error.
abort_slave_event_count
/ disconnect_slave_event_count
这两个启动参数在之前的版本中用做测试,并非真的生产环境参数。
从 8.0.29 版本开始,被标记为废弃状态,从 8.2.0 开始,正式被移除。
2. disconnect-slave-event-count
同上。
3. expire-logs-days
expire_logs_days
参数用于设定二进制日志保留天数,从 8.2.0 开始,正式被移除。
从 MySQL 8.0.1 开始,新增参数 binlog_expire_logs_seconds
,以秒为单位控制二进制日志的保留时长。
默认值为 2592000 ,即 30 天。最大值为 4294967295 ,即 unsigned int 最大值,约 138 年。
在 MariaDB 中,从 10.6.1 开始引入 binlog_expire_logs_seconds
参数,但默认值为 0 ,需要自己进行设定。
变更值的参数 (6)
1. master-retry-count
master_retry_count
参数用于设定复制连接超时后,重试连接的最大次数。 在 8.2.0 默认值为 10 ,而 8.0.35 的默认值为 86400 ,这一变更是从 8.1.0 开始的。
需要注意的是,创建复制的语法 change master to
已经废弃,改为 change replication source to
。
2. optimizer-switch (hash_set_operations=on)
从 8.2.0 开始, optimizer_switch
中新增了一个控制标记 hash_set_operations
,默认值为 on
。
用于对集合操作(包括 EXCEPT 和 INTERSECT)进行哈希表优化,这种优化用于哈希的内存量可以使用 set_operations_buffer_size
系统变量来控制。
系统变量 set_operations_buffer_size
是 MySQL 8.2.0 新引入的,下面会再介绍。
3. performance-schema-error-size
performance_schema_error_size
表示数据库错误码的数量,在 MySQL 8.0.35 中,默认值为 5307 ,而在 MySQL 8.2.0 中,变更为 5377 。
1 | mysql> SELECT version(),count(*) FROM performance_schema.events_errors_summary_global_by_error; |
源码中的定义如下:
1 | static Sys_var_long Sys_pfs_error_size( |
4. performance-schema-max-memory-classes
performance_schema_max_memory_classes
是全局只读参数,表示 memory instruments 的最大数量。
在 MySQL 8.0.35 中,默认值为 450 ,但在 MySQL 8.2.0 中变为 470 ,不过官方文档尚未更新。
已在 MySQL Bugs 网站提交相关 bug:
https://bugs.mysql.com/bug.php?id=112839
5. performance-schema-max-rwlock-classes
performance_schema_max_rwlock_classes
是全局只读参数,表示 rwlock instruments 的最大数量。
在 MySQL 8.0.35 中,默认值为 60 ,但在 MySQL 8.2.0 中变为 100 。
6. performance-schema-max-statement-classes
performance_schema_max_statement_classes
是全局只读参数,表示 statement instruments 的最大数量。
默认值是在服务器构建时根据客户机/服务器协议中的命令数量和服务器支持的SQL语句类型数量计算的。
在 MySQL 8.0.35 中,默认值为 219 ,而在 MySQL 8.2.0 中变为 220 。
那么,多的1个是从哪来的呢?
从相关代码提交记录可以看到描述:
https://github.com/mysql/mysql-server/commit/eb7dd6c6c10c0437658caa7b9c7716c0468582fa
WL#15426: Implement SHOW PARSE_TREE
Implemented a SHOW PARSE_TREE statement in debug builds to display the JSON-formatted parse tree for a SELECT statement. This statement is not supported in release builds, and is available only in debug builds, or by compiling the server using -DWITH_SHOW_PARSE_TREE. (WL #15426)
从 MySQL 8.1.0 开始,引入新 SQL 语句, show parse_tree
用来调试 select
语句,并以 json 格式展示。
需要注意的是,该参数只能用于 Debug 模式,所以官方下载的正式安装包是无法使用该语法的,否则会报语法错误。
1 | mysql> SHOW PARSE_TREE select 1; |
新增的参数 (7)
1. mysql-native-password
MySQL 中创建用户时默认的密码插件已经变更为 caching_sha2_password
,但目前仍然支持使用 mysql_native_password
,该参数就是控制服务器启动时,是否启用该密码插件。
在 8.1.0 的发版说明中有如下一段描述:
https://dev.mysql.com/doc/relnotes/mysql/8.1/en/news-8-1-0.html
The mysql_native_password authentication plugin now is deprecated and subject to removal in a future version of MySQL. CREATE USER, ALTER USER, and SET PASSWORD operations now insert a deprecation warning into the server error log if an account attempts to authenticate using mysql_native_password as an authentication method. (Bug #35336317)
具体演示如下:
1 | mysql> create user shawnyan identified with mysql_native_password by '1'; |
日志中会提示该插件已弃用,请用 caching_sha2_password
代替。
1 | 2023-10-26T09:04:32.364529Z 12 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead' |
2. ndb-mgm-tls
启动选项 ndb-mgm-tls
/ndb-tls-search-path
是 MySQL 8.2.0 新引入的,为 NDB 引擎增加 TLS 相关选项。
但由于文档中暂无相关参数描述,而且官网公开的 worklog 不再更新,所以无法查阅到具体的功能描述,仅能通过社区版的代码提交记录窥视一二。
1 | WL#15524 post-push fixes (2nd set) |
以及,从源码中,可以看到这个选项提供了三个选项值,分别是 relaxed
,strict
,deferred
,默认值为 relaxed
。
1 | /* ndb_mgm uses an extended form of the --ndb-mgm-tls enum, which accepts |
3. ndb-tls-search-path
用于存放 NDB 集群 TLS 私钥的目录。
具体内容,同上。
4. performance-schema-max-meter-classes
performance_schema_max_meter_classes
是全局只读系统变量,从 MySQL 8.2.0 开始引入,表示 meter instruments 可被创建的最大数量。
5. performance-schema-max-metric-classes
performance_schema_max_metric_classes
是全局只读系统变量,从 MySQL 8.2.0 开始引入,表示 metric instruments 可被创建的最大数量。
performance_schema_max_meter_classes
/ performance_schema_max_metric_classes
这两个变量是一个 worklog 里增加的,用于服务器的遥测指标接口。
另外,命令很相似,一个是 meter,另一个是 metric,需要注意区分。
总结
MySQL 8.2.0 启动选项和系统变量的变化多达 16 项,还有很多系统状态变量文本没有列举。
MySQL 8.2.0 是 MySQL 变更发版模型后的第二个版本,是创新版本 (Innovation Release),不建议部署到生产环境。
- Title: 【MySQL 8.x】从参数变化解读 MySQL 8.2.0 发版说明
- Author: ShawnYan
- Created at: 2023-10-27 11:12:28
- Updated at: 2023-10-27 11:12:28
- Link: https://shawnyan.cn/2023/mysql/mysql-8.2.0-sys-vars/
- License: This work is licensed under CC BY-NC-SA 4.0.