MySQL 8.0新特性 -- 持久化全局变量

在之前的版本中,对于全局变量的修改,其只会影响其内存值,而不会持久化到配置文件中。数据库重启,又会恢复成修改前的值。从8.0开始,可通过SET PERSIST命令将全局变量的修改持久化到配置文件中。

>show variables like 'max_connections';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| max_connections        | 151   |
+------------------------+-------+
1 rows in set (0.01 sec)

>set global.max_connections=155;
Query OK, 0 rows affected (0.00 sec)

>show variables like 'max_connections';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| max_connections        | 155   |
+------------------------+-------+
1 rows in set (0.01 sec)

  

查看持久化的变量

修改之后,data目录下会多出一个文件mysqld-auto.cnf。可以直接查看该文件

# more mysqld-auto.cnf
{ "Version" : 1 , "mysql_server" : { "max_connections" : { "Value" : "155" , "Metadata" : { "Timestamp" : 1585748279787787 , "User" :
 "root" , "Host" : "localhost" } } } }

也可以通过表查看:

mysql> select * from performance_schema.persisted_variables;
+-----------------+----------------+
| VARIABLE_NAME   | VARIABLE_VALUE |
+-----------------+----------------+
| max_connections | 160            |
+-----------------+----------------+
1 row in set (0.00 sec)

在数据库启动时,会首先读取其它配置文件,最后才读取mysqld-auto.cnf文件

执行set persist需要不同的权限,取决于系统变量的类型:
·动态的系统变量,set persist需要system_variables_admin或super权限
·只读的系统变量,set persist需要system_variables_admin和persist_ro_variables_admin权限

set persist设置的变量不仅运行时生效,还会将变量写入mysqld-auto.cnf
set persist_only将变量写入mysqld-auto.cnf,但是不会影响运行时的变量值。重启后才会生效。

移除持久化变量
·reset persist:移除mysqld-auto.cnf中所有的变量
·reset persist system_var_name:移除mysqld-auto.cnf中名为system_var_name的变量
·reset persist IF exists system_var_name:如果变量不存在,不会报错,只会给出warning提示

注意,其只是清空mysqld-auto.cnf和performance_schema.persisted_variables中的内容,对于已经修改了的变量的值,不会产生任何影响。

通过下述方式将全局变量持久化为默认值。注意,是默认值,而不是修改前的值。
mysql> set persist max_connections=default;

这个命令同“set global max_connections=default”类似,都会将变量的值设置为默认值,只不过前者还会将默认值持久化到配置文件中。

原文地址:https://www.cnblogs.com/abclife/p/12616580.html