MySQL 8 新特性:全局参数持久化!

数据库 MySQL
自从 2018 年发布第一版 MySQL 8.0.11 正式版至今,MySQL 版本已经更新迭代到 8.0.26,相对于稳定的 5.7 版本来说,8.0 在性能上的提升是毋庸置疑的!

本文转载自微信公众号「Lucifer三思而后行」,作者Lucifer。转载本文请联系Lucifer三思而后行公众号。

前言

自从 2018 年发布第一版 MySQL 8.0.11 正式版至今,MySQL 版本已经更新迭代到 8.0.26,相对于稳定的 5.7 版本来说,8.0 在性能上的提升是毋庸置疑的!

随着越来越多的企业开始使用 MySQL 8.0 版本,对于 DBA 来说是一个挑战,也是一个机遇!????

本文主要讨论下 MySQL 8.0 版本的新特性:全局参数持久化

 全局参数持久化

MySQL 8.0 版本支持在线修改全局参数并持久化,通过加上 PERSIST 关键字,可以将修改的参数持久化到新的配置文件(mysqld-auto.cnf)中,重启 MySQL 时,可以从该配置文件获取到最新的配置参数!

[WL#8688]:https://dev.mysql.com/worklog/task/?id=8688

启用这个功能,使用特定的语法 SET PERSIST 来设定任意可动态修改的全局变量!

  • SET PERSIST语句可以修改内存中变量的值,并且将修改后的值写?数据?录中的 mysqld-auto.cnf 中。
  • SET PERSIST_ONLY语句不会修改内存中变量的值,只是将修改后的值写?数据?录中的 mysqld-auto.cnf 中。

以 max_connections 参数为例:

  1. mysql> select * from performance_schema.persisted_variables; 
  2. Empty set (0.00 sec) 
  3.  
  4. mysql> show variables like '%max_connections%'
  5. +------------------------+-------+ 
  6. | Variable_name          | Value | 
  7. +------------------------+-------+ 
  8. | max_connections        | 151   | 
  9. | mysqlx_max_connections | 100   | 
  10. +------------------------+-------+ 
  11. rows in set (0.00 sec) 
  12.  
  13. mysql> set persist max_connections=300; 
  14. Query OK, 0 rows affected (0.00 sec) 
  15.  
  16. mysql> select * from performance_schema.persisted_variables; 
  17. +-----------------+----------------+ 
  18. | VARIABLE_NAME   | VARIABLE_VALUE | 
  19. +-----------------+----------------+ 
  20. | max_connections | 300            | 
  21. +-----------------+----------------+ 
  22. 1 row in set (0.00 sec) 

系统会在数据目录下生成一个包含 json 格式的 mysqld-auto.cnf 的文件,格式化后如下所示,当 my.cnf 和mysqld-auto.cnf 同时存在时,后者具有更高优先级。

  1.     "Version": 1,  
  2.     "mysql_server": { 
  3.         "max_connections": { 
  4.             "Value""300",  
  5.             "Metadata": { 
  6.                 "Timestamp": 1632575065787609,  
  7.                 "User""root",  
  8.                 "Host""localhost" 
  9.             } 
  10.         } 
  11.     } 

 注意: 即使你通过 SET PERSIST 修改配置的值并没有任何变化,也会写入到 mysqld-auto.cnf 文件中。但你可以通过设置成 DEFAULT 值的方式来恢复初始默认值!

如果想要恢复 max_connections 参数为初始默认值,只需要执行:

  1. mysql> set persist max_connections=DEFAULT
  2. Query OK, 0 rows affected (0.00 sec) 
  3.  
  4. mysql> select * from performance_schema.persisted_variables; 
  5. +-----------------+----------------+ 
  6. | VARIABLE_NAME   | VARIABLE_VALUE | 
  7. +-----------------+----------------+ 
  8. | max_connections | 151            | 
  9. +-----------------+----------------+ 
  10. 1 row in set (0.00 sec) 

如果想要移除所有的全局持久化参数,则只需执行:

  1. mysql> RESET PERSIST; 
  2. Query OK, 0 rows affected (0.00 sec) 
  3.  
  4. mysql> select * from performance_schema.persisted_variables; 
  5. Empty set (0.00 sec) 

 

当然,删除 mysqld-auto.cnf 文件后,重启 MySQL 也可!

 

责任编辑:武晓燕 来源: Lucifer三思而后行
相关推荐

2023-07-03 08:20:35

MySQL窗口函数

2021-02-22 11:51:15

Java开发代码

2014-07-15 14:48:26

Java8

2011-11-07 12:34:48

Windows 8特性

2020-05-14 11:19:19

降序索引子集

2014-10-20 13:57:59

JavaFX 8Java 8

2013-04-09 12:59:21

WindowsPhon

2014-07-14 11:34:53

Java 8Nashorn

2009-01-16 10:01:57

MySQL复制特性测试

2011-05-07 16:08:29

Windows 8

2009-07-08 09:47:49

Scala 2.8Scala

2023-05-10 08:04:55

MySQL离线模式生效

2014-04-16 07:43:31

Java 8JRE

2013-05-02 09:14:19

Java 8Java 8的新特性

2012-05-23 11:13:57

2014-03-19 11:04:14

Java 8Java8特性

2014-04-15 15:45:22

Java8Java8教程

2014-05-05 09:58:01

2018-09-19 16:15:18

MySQL直方图数据库

2021-01-29 09:58:55

MySQL数据库
点赞
收藏

51CTO技术栈公众号