MySQL 8.0 新特性:Persisted System Variables
一、前言
MySQL 5.7 之前我们修改参数变量后,需要将其手动写入到服务端配置文件中,否则重启后又恢复原有的配置,在 8.0 中可以在 MySQL 客户端直接将参数持久化,节省在服务器操作的步骤,下面我们一起测试一下,
二、测试
以 max_connections 参数为例:
目前 `max_connectios` 设置为 1000 当我们使用 set global 设置为 1200 后,参数并没有持久化,重启之后依然为 1000 👇
重启 MySQL 参数依然为 1000
接下来我们使用 8.0 新特性 PERSIST 测试一下
SET PERSIST max_connections = 1200;
重启 MySQL 发现 max_connections = 1200 参数已经被持久化
二、原理
当使用 PERSIST 关键字时,变量更改将更新到数据目录中的 mysqld-auto.cnf 选项文件。mysqld-auto.cnf 是仅在第一次执行 PERSIST 或 PERSIST_ONLY 语句时创建的 JSON 格式文件。内容如下👇
SET PERSIST
语句可以修改内存中变量的值,并且将修改后的值写⼊数据⽬录中的 mysqld-auto.cnf 中。SET PERSIST_ONLY
语句不会修改内存中变量的值,只是将修改后的值写⼊数据⽬录中的 mysqld-auto.cnf 中。
当需要修改只读变量时,如果使用 PERSIST 会出👇错误:
ERROR 1238 (HY000): Variable 'innodb_log_file_size' is a read only variable
此时需要使用 PERSIST_ONLY 修改,重启后生效。
清空变量设置
RESET PERSIST;
需要的权限
GRANT SYSTEM_VARIABLES_ADMIN, PERSIST_RO_VARIABLES_ADMIN, SHUTDOWN on *.* to 'admin'@'localhost';