MySQL 8.0新特性 -- 持久化全局变量
2020-04-01 22:50 abce 阅读(991) 评论(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”类似,都会将变量的值设置为默认值,只不过前者还会将默认值持久化到配置文件中。