PS: 本文内容基于MySQL8.0.0版本,由于目前才Release了第一个开发版本,不排除后续行为会发生变化
相信很多朋友都有这样的体验,在实例启动的时候动态修改了某些配置,但是忘了修改配置文件,结果实例一重启修改就丢失了。或者对于诸如部署在云上的业务(例如RDS),通常用户是没有修改配置文件的权限的,这导致配置的设定不够灵活。从MySQL8.0开始,大家不用担心这个问题了,用户可以选择性的将配置进行持久化。
对应的Worklog: WL#8688
启用这个功能,使用特定的语法SET PERSIST来设定任意可动态修改的全局变量,例如:
mysql> SET PERSIST innodb_flush_log_at_trx_commit = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SET PERSIST sync_binlog = 1;
Query OK, 0 rows affected (0.00 sec)
此时检查默认的my.cnf文件并没有发生任何修改,但是数据目录下,多了个和之前MySQL版本不一样的文件:
$ls -lh mysqld-auto.cnf
-rw-r----- 1 zhaiwx users 81 Sep 17 18:09 mysqld-auto.cnf
文件的格式是JSON存储的,因此可以直接用内置的解析器进行解析
$cat mysqld-auto.cnf
{ "mysql_server": {"innodb_flush_log_at_trx_commit": "1" , "sync_b