当前位置: 首页 > 科技观察

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

时间:2023-03-11 21:09:34 科技观察

本文转载自微信公众号《路西法三思而后行》,作者路西法。转载本文请联系路西法三思公众号。前言自2018年第一个正式版MySQL8.0.11发布以来,MySQL版本更新迭代到8.0.26。与稳定版5.7相比,8.0的性能提升毋庸置疑!随着越来越多的公司开始使用MySQL8.0,这对DBA来说是挑战也是机遇!???本文主要讨论MySQL8.0的新特性:全局参数持久化修改全局参数并持久化。通过添加PERSIST关键字,可以将修改后的参数持久化到一个新的配置文件(mysqld-auto.cnf)中。当MySQL重启后,可以从这个配置文件中获取最新的配置参数![WL#8688]:https://dev.mysql.com/worklog/task/?id=8688开启这个功能,使用特定语法SET坚持设置任何可动态修改的全局变量!SETPERSIST语句可以修改内存中变量的值,并将修改后的值写入数据目录下的mysqld-auto.cnf中。SETPERSIST_ONLY语句不会修改内存中变量的值,只会将修改后的值写入数据目录下的mysqld-auto.cnf中。以max_connections参数为例:mysql>select*fromperformance_schema.persisted_variables;Emptyset(0.00sec)mysql>showvariableslike'%max_connections%';+-------------------------+--------+|Variable_name|Value|+------------------------+-------+|max_connections|151||mysqlx_max_connections|100|+------------------------+--------+2rowsinset(0.00sec)mysql>setpersistmax_connections=300;QueryOK,0rowsaffected(0.00sec)mysql>select*fromperformance_schema.persisted_variables;+----------------+----------------+|VARIABLE_NAME|VARIABLE_VALUE|+----------------+----------------+|max_connections|300|+----------------+----------------+1rowinset(0.00sec)系统将处于data目录生成一个json格式的包含mysqld-auto.cnf的文件,格式如下,当my.cnf和mysqld-auto.cnf同时存在时,后者优先级更高。{“版本”:1,“mysql_server”:{“max_connections”:{“值”:“300”,“元数据”:{“时间戳”:1632575065787609,“用户”:“root”,“主机”:“localhost"}}}}注意:即使通过SETPERSIST修改配置值没有变化,也会写入到mysqld-auto.cnf文件中。但是您可以通过将其设置为DEFAULT值来恢复初始默认值!如果想恢复max_connections参数为初始默认值,只需要执行:mysql>setpersistmax_connections=DEFAULT;QueryOK,0rowsaffected(0.00sec)mysql>select*fromperformance_schema。persisted_variables;+----------------+----------------+|VARIABLE_NAME|VARIABLE_VALUE|+----------------+----------------+|max_connections|151|+------------------+----------------+1rowinset(0.00sec)如果要去掉所有全局持久化参数,只需要执行:mysql>RESETPERSIST;QueryOK,0rowsaffected(0.00sec)mysql>select*fromperformance_schema.persisted_variables;Emptyset(0.00sec)当然删除mysqld-auto.cnf文件后,重启MySQL即可!