• 售前

  • 售后

热门帖子
入门百科

MySQL8新特性:持久化全局变量的修改方法

[复制链接]
四龙全缴 显示全部楼层 发表于 2021-10-26 13:26:24 |阅读模式 打印 上一主题 下一主题
媒介
在8之前的版本中,对于全局变量的修改,其只会影响其内存值,而不会持久化到设置文件中。数据库重启,又会规复成修改前的值。从8开始,可通过SET PERSIST命令将全局变量的修改持久化到设置文件中。
试举一例
  1. mysql> show variables like '%max_connections%';
  2. +------------------------+-------+
  3. | Variable_name | Value |
  4. +------------------------+-------+
  5. | max_connections | 151 |
  6. | mysqlx_max_connections | 100 |
  7. +------------------------+-------+
  8. rows in set (0.00 sec)
  9. mysql> set persist max_connections=200;
  10. Query OK, 0 rows affected (0.00 sec)
  11. mysql> show variables like '%max_connections%';
  12. +------------------------+-------+
  13. | Variable_name | Value |
  14. +------------------------+-------+
  15. | max_connections | 200 |
  16. | mysqlx_max_connections | 100 |
  17. +------------------------+-------+
  18. rows in set (0.00 sec)
复制代码
全局变量的修改会保存在两处,

1.  数据目录下mysqld-auto.cnf文件,

     留意,不是启动时--defaults-file指定的设置文件。
  1. [root@slowtech ~]# cat /var/lib/mysql/mysqld-auto.cnf
  2. { "Version" : 1 , "mysql_server" : { "max_connections" : { "Value" : "200" , "Metadata" : { "Timestamp" : 1525509217566258 , "User" : "root" , "Host" : "localhost" } } } }
复制代码
持久化信息以json格式保存,此中,Metadata记载了这次修改的用户实时间信息。

在数据库启动时,会起首读取其它设置文件,最后才读取mysqld-auto.cnf文件。不发起手动修改该文件,其有可能导致数据库在启动过程中因解析错误而失败。如果出现这种情况,可手动删除mysqld-auto.cnf文件或将persisted_globals_load变量设置为off来避免该文件的加载。

2. performance_schema.persisted_variables
  1. mysql> select * from performance_schema.persisted_variables;
  2. +-----------------+----------------+
  3. | VARIABLE_NAME | VARIABLE_VALUE |
  4. +-----------------+----------------+
  5. | max_connections | 200 |
  6. +-----------------+----------------+
  7. row in set (0.00 sec)
复制代码
全局变量的持久化除了SET PERSIST外,还有SET PERSIST_ONLY,与前者相比,其只持久化全局变量,而不修改其内存值。同时,在权限方面,前者只必要SYSTEM_VARIABLES_ADMIN,后者还必要PERSIST_RO_VARIABLES_ADMIN权限。

对于已经持久化了变量,可通过RESET PERSIST命令清撤除,留意,其只是清空mysqld-auto.cnf和
  1. performance_schema.persisted_variables
复制代码
中的内容,对于已经修改了的变量的值,不会产生任何影响。

除此之外,还可以通过下述方式将全局变量持久化为默认值。留意,是默认值,而不是修改前的值。
  1. mysql> set persist max_connections=default;
复制代码
这个命令同“
  1. set global max_connections=default
复制代码
”类似,都会将变量的值设置为默认值,只不外前者还会将默认值持久化到设置文件中。
总结
以上就是这篇文章的全部内容了,渴望本文的内容对各人的学习大概工作具有一定的参考学习代价,如果有疑问各人可以留言交换,谢谢各人对草根技术分享的支持。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作