1. 命令测试
MySQL在8.0增加了配置变量持久化的命令
文档地址:MySQL :: MySQL 8.0 Reference Manual :: 5.1.9 Using System Variables
-- 例子
SET PERSIST max_connections = 3000;
执行以后,会在mysql的数据目录生成mysqld-auto.cnf
文件,同时数据库的global变量会变成设置的变量:
2. mysqld-auto.cnf文件内容
mysqld-auto.cnf
文件内的内容为json格式:
more mysqld-auto.cnf
{ "Version" : 1 , "mysql_server" : { "transaction_isolation" : { "Value" : "READ-COMMITTED" , "Metadata" : { "Timestamp" : 1639394735042259 , "User" : "root" , "Host" : "localhost"} } , "max_connections" : { "Value" : "30000" , "Metadata" : { "Timestamp" : 1691575174151149 , "User" : "root" , "Host" : "localhost" } } } }
格式化一下:
{
"Version": 1,
"mysql_server": {
"transaction_isolation": {
"Value": "READ-COMMITTED",
"Metadata": {
"Timestamp": 1639394735042259,
"User": "root",
"Host": "localhost"
}
},
"max_connections": {
"Value": "30000",
"Metadata": {
"Timestamp": 1691575174151149,
"User": "root",
"Host": "localhost"
}
}
}
}
3. 代码相关函数
参考文章的解释:MySQL 8.0中的全局参数持久化怎样理解?-群英 (qycn.com)
接口函数大多定义在sql/persisted_variable.cc文件中:
启动时载入mysqld-auto.cnf的内容: Persisted_variables_cache::load_persist_file(); 通过json解析合法性,并存入内存
将文件中读取的配置进行设置: Persisted_variables_cache::set_persist_options
运行SET PERSIST命令时,调用Persisted_variables_cache::set_variable 更新内存中存储的值
写入mysqld-auto.cnf文件中: Persisted_variables_cache::flush_to_file
评论区