天天看点

MySQL · 8.0.0新特性 · 持久化全局参数修改

ps: 本文内容基于mysql8.0.0版本,由于目前才release了第一个开发版本,不排除后续行为会发生变化

相信很多朋友都有这样的体验,在实例启动的时候动态修改了某些配置,但是忘了修改配置文件,结果实例一重启修改就丢失了。或者对于诸如部署在云上的业务(例如rds),通常用户是没有修改配置文件的权限的,这导致配置的设定不够灵活。从mysql8.0开始,大家不用担心这个问题了,用户可以选择性的将配置进行持久化。

此时检查默认的my.cnf文件并没有发生任何修改,但是数据目录下,多了个和之前mysql版本不一样的文件:

文件的格式是json存储的,因此可以直接用内置的解析器进行解析

mysqld-auto.cnf文件中的配置相比my.cnf文件具有高优先级,如果相同配置出现在两个文件中,就以mysqld-auto.cnf文件中的记录为主。

注意,即使你通过set persist修改配置的值并没有任何变化,也会写入到mysqld-auto.cnf文件中。但你可以通过设置成default值的方式将其从mysqld-auto.cnf文件中移走:

你可以通过新的ps表performance_schema.variables_info来确定配置项的值的来源,共有几类:

如果你不想让mysqld-auto.cnf中的配置生效,可以在启动时关闭只读参数persisted_globals_load,这样在启动时就不会载入mysqld-auto.cnf中的配置项了。

主要代码:

<a href="https://github.com/mysql/mysql-server/commit/f2bc0f89b7f94cc8fe963d08157413a01d14d994">commit f2bc0f89b7f94cc8fe963d08157413a01d14d994</a>

主要入口函数(8.0.0):

参考文档:

<a href="http://mysqlserverteam.com/mysql-8-0-persisting-configuration-variables/">http://mysqlserverteam.com/mysql-8-0-persisting-configuration-variables/</a>

<a href="http://dev.mysql.com/worklog/task/?id=8688">http://dev.mysql.com/worklog/task/?id=8688</a>

<a href="https://bugs.mysql.com/bug.php?id=82807">https://bugs.mysql.com/bug.php?id=82807</a>

继续阅读