侧边栏壁纸
  • 累计撰写 35 篇文章
  • 累计创建 14 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

MySQL SET PERSIST的使用

子曰
2023-08-10 / 0 评论 / 0 点赞 / 433 阅读 / 393 字 / 正在检测是否收录...

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变量会变成设置的变量:

image-20230809181032994

image-20230809181209599

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
0

评论区