网易首页 > 网易号 > 正文 申请入驻

MySQL 的持久化全局系统变量-爱可生

0
分享至

作者:Arunjith Aravindan

翻译:

管长龙

本文来源:https://www.percona.com/blog/2020/10/27/using-mysql-8-persisted-system-variables/

MySQL 8 之前,使用的动态变量不是永久性的,并且在重启后会重置。可在运行时使用 SET 语句更改这些变量,以影响当前实例的操作,但是我们必须手动更新 my.cnf 配置文件以使其持久化。

在许多情况下,从服务端更新 my.cnf 并不是一个方便的选择,并且使变量仅被更新才能在后续重新启动时动态还原,而没有任何历史记录。

持久化系统变量是 MySQL 8 中引入的功能之一。新功能可帮助 DBA 动态更新变量并注册它们,而无需从服务器端访问配置文件。

如何持久化全局系统变量?

SET GLOBAL 一样,SET PERSIST 是可用于在运行时更新系统变量并使它们在重新启动后保持不变的命令。当我们使用 PERSIST 关键字时,变量更改将更新到数据目录中的 mysqld-auto.cnf 选项文件。mysqld-auto.cnf 是仅在第一次执行 PERSISTPERSIST_ONLY 语句时创建的 JSON 格式文件。

让我们以更新最大连接数为例,看看此功能的工作原理。

mysql> SET PERSIST max_connections = 1000;Query OK, 0 rows affected (0.00 sec)mysql> select max_connections: 10001 row in set (0.00 sec)

生成的 mysqld-auto.cnf 如下所示:

cat /var/lib/mysql/mysqld-auto.cnf{ "Version" : 1 , "mysql_server" : { "max_connections" : { "Value" : "1000" , "Metadata" : { "Timestamp" : 1602543199335909 , "User" : "root" , "Host" : "localhost" } } } }

如何保留只读的系统变量?

当需要更改只读变量时,我们需要使用 PERSIST_ONLY 关键字。该子句更新 mysqld-auto.cnf 文件中的更改,但不适用于 MySQL,在下一次 MySQL 重新启动时继续存在。这使得 PERSIST_ONLY 适合配置只能在服务器启动时设置的只读系统变量。

mysql> SET PERSIST innodb_log_file_size=50331648*2;ERROR 1238 (HY000): Variable 'innodb_log_file_size' is a read-only variablemysql> set persist_only innodb_log_file_size=50331648*2;Query OK, 0 rows affected (0.01 sec)

如何清除永久系统变量设置?

我们可以使用 RESET PERSIST 命令从 mysqld-auto.cnf 中删除持久设置。运行不带特定变量名的命令时要小心,因为它将从配置文件中删除所有设置。实际上,它从 mysqld-auto.cnf 中删除了持久设置,但没有从 MySQL中 删除。

看几个例子:

mysql> RESET PERSIST;Query OK, 0 rows affected (0.00 sec)cat /var/lib/mysql/mysqld-auto.cnf{ "Version" : 1 , "mysql_server" : { } }mysql> select max_connections |+-------------------+| 1000 |+-------------------+1 row in set (0.01 sec)

如果想清除特定变量而不是清除配置文件中的所有设置,则以下示例向我们展示了如何执行此操作。如果我们尝试删除 mysqld-auto.cnf 中不存在的变量,则会导致错误,如下所示,我们可以使用 IF EXISTS 子句来抑制该错误。

mysql> RESET PERSIST max_connections;Query OK, 0 rows affected (0.00 sec)mysql> RESET PERSIST innodb_max_dirty_pages_pct;ERROR 3615 (HY000): Variable innodb_max_dirty_pages_pct does not exist in persisted config filemysql>mysql> RESET PERSIST IF EXISTS innodb_max_dirty_pages_pct;Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> show warnings;| Warning | 3615 | Variable innodb_max_dirty_pages_pct does not exist in persisted config file |

有没有办法禁用持久性?

是的,persisted_globals_load 参数用于启用或禁用持久化的系统变量。禁用后,服务器启动顺序将忽略 mysqld-auto.cnf 文件。手动更改为 mysqld-auto.cnf 文件可能会在服务器启动时导致解析错误。在这种情况下,服务器报告错误并退出。如果发生此问题,则必须在禁用 persisted_globals_load 系统变量或使用以下示例中提供的 --no-defaults 选项的情况下启动服务器。

mysql> select persisted_globals_load |+-------------------------------------+| 1 |+-------------------------------------+1 row in set (0.00 sec)grep -i persisted_globals_load /etc/my.cnfpersisted_globals_load=0mysql> restart;Query OK, 0 rows affected (0.00 sec)mysql> select persisted_globals_load |+-----------------------------------+| 0 |+----------------------------------+1 row in set (0.00 sec)mysql> select max_connections |+-------------------+| 500 |+-------------------+1 row in set (0.00 sec)

需要什么授权?

考虑到安全性,正确用户的正确权限绝对是最佳实践。SYSTEM_VARIABLES_ADMIN 和 PERSIST_RO_VARIABLES_ADMIN 是用户使用 SET PERSIST_ONLY 将全局系统变量持久保存到 mysqld-auto.cnf 的必需特权。

用户还需要具有 SHUTDOWN 特权才能使用 RESTART 命令。它提供了一种从客户端会话重新启动 MySQL 的方法,而无需在服务器主机上进行命令行访问。

mysql> CREATE USER 'admin_persist'@'localhost' IDENTIFIED BY '*********';Query OK, 0 rows affected (0.02 sec)mysql> GRANT SYSTEM_VARIABLES_ADMIN, PERSIST_RO_VARIABLES_ADMIN, SHUTDOWN on *.* to 'admin_persist'@'localhost';Query OK, 0 rows affected (0.03 sec)

如何监视变量?

要列出使用 PERSIST 选项更新的变量,我们可以查询 performance_schema.persisted_variables 表以及其他几个表,如下所示。这是一个如何从 MySQL 端监视变量的简单示例,您可以根据需要修改查询。

mysql> select v.VARIABLE_NAME,g.VARIABLE_VALUE current_value,p.VARIABLE_VALUE as persist_value,SET_TIME,SET_USER,VARIABLE_SOURCE,VARIABLE_PATH from performance_schema.variables_info v JOIN performance_schema.persisted_variables p USING(VARIABLE_NAME) JOIN performance_schema.global_variables g USING(VARIABLE_NAME)\G*************************** 1. row *************************** VARIABLE_NAME: innodb_log_file_size current_value: 50331648 persist_value: 100663296 SET_TIME: 2020-10-12 18:54:35.725177 SET_USER: arunVARIABLE_SOURCE: COMPILED VARIABLE_PATH:*************************** 2. row *************************** VARIABLE_NAME: max_connections current_value: 1000 persist_value: 1000 SET_TIME: 2020-10-12 18:53:19.336115 SET_USER: rootVARIABLE_SOURCE: DYNAMIC VARIABLE_PATH:2 rows in set (0.06 sec)mysql> restart;Query OK, 0 rows affected (0.01 sec)select v.VARIABLE_NAME,g.VARIABLE_VALUE current_value,p.VARIABLE_VALUE as persist_value,SET_TIME,SET_USER,VARIABLE_SOURCE,VARIABLE_PATH from performance_schema.variables_info v JOIN performance_schema.persisted_variables p USING(VARIABLE_NAME) JOIN performance_schema.global_variables g USING(VARIABLE_NAME)\G*************************** 1. row *************************** VARIABLE_NAME: innodb_log_file_size current_value: 100663296 persist_value: 100663296 SET_TIME: 2020-10-12 18:54:35.725177 SET_USER: arunVARIABLE_SOURCE: PERSISTED VARIABLE_PATH: /var/lib/mysql/mysqld-auto.cnf*************************** 2. row *************************** VARIABLE_NAME: max_connections current_value: 1000 persist_value: 1000 SET_TIME: 2020-10-12 18:53:19.335909 SET_USER: rootVARIABLE_SOURCE: PERSISTED VARIABLE_PATH: /var/lib/mysql/mysqld-auto.cnf2 rows in set (0.16 sec)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
重磅!北京房贷政策有变!

重磅!北京房贷政策有变!

美丽大北京
2024-04-24 14:18:33
周恩来是何时认识到自己军事才能不如毛泽东的?从这三场战役开始

周恩来是何时认识到自己军事才能不如毛泽东的?从这三场战役开始

阿胡
2024-04-19 12:04:51
绝了!辽宁一奶奶因保养好抱孙子的视频火爆全网,网友:风韵犹存

绝了!辽宁一奶奶因保养好抱孙子的视频火爆全网,网友:风韵犹存

元爸体育
2024-04-24 16:12:41
涉嫌严重违纪违法!正厅级牛兰英被查

涉嫌严重违纪违法!正厅级牛兰英被查

鲁中晨报
2024-04-24 16:57:05
中国刚开口,沙特马上拿出50亿美元,用真金白银,助中国一臂之力

中国刚开口,沙特马上拿出50亿美元,用真金白银,助中国一臂之力

掘密探索家啊
2024-04-24 15:02:55
TA:阿森纳下赛季所有球衣都将用大炮代替队徽

TA:阿森纳下赛季所有球衣都将用大炮代替队徽

直播吧
2024-04-24 00:14:07
太炸裂了!阿尔巴尼亚新闻女主播内搭真空出镜,胸前风光引争议

太炸裂了!阿尔巴尼亚新闻女主播内搭真空出镜,胸前风光引争议

娱乐八卦木木子
2024-04-24 03:38:08
2024年起,土葬火葬一刀切?中央定调:统一推行农村丧葬改革

2024年起,土葬火葬一刀切?中央定调:统一推行农村丧葬改革

天下纵览
2024-04-23 12:12:08
上海女人真会打扮,满街都是“膝下裙+奶奶鞋”,看似随意却高级

上海女人真会打扮,满街都是“膝下裙+奶奶鞋”,看似随意却高级

疯说时尚
2024-04-20 08:00:27
经济学家樊纲:限什么都可以,千万别限房价,房价要上涨了吗?

经济学家樊纲:限什么都可以,千万别限房价,房价要上涨了吗?

重庆地产视野
2024-04-24 11:37:56
米体:除300万夺冠奖金外,张康阳还给国米球员额外奖金和一块表

米体:除300万夺冠奖金外,张康阳还给国米球员额外奖金和一块表

直播吧
2024-04-24 18:19:31
用网上推荐的名字,孩子差点上不了户口

用网上推荐的名字,孩子差点上不了户口

极目新闻
2024-04-24 08:44:33
终于知道什么是披着麻袋也好看的人了,林更新披件军大衣照样帅。

终于知道什么是披着麻袋也好看的人了,林更新披件军大衣照样帅。

阿芒娱乐说
2024-04-24 00:45:03
4月还没结束,37岁杨幂以这样的方式败光观众缘,孙俪的话应验了

4月还没结束,37岁杨幂以这样的方式败光观众缘,孙俪的话应验了

糊咖娱乐
2024-04-23 17:47:12
俄媒:加拿大教授认为“西方将因移民问题爆发内战”,马斯克赞同

俄媒:加拿大教授认为“西方将因移民问题爆发内战”,马斯克赞同

环球网资讯
2024-04-24 19:07:46
“可惜了这么美的脸蛋”,网红考北电作弊被曝光,日常照惹人惋惜

“可惜了这么美的脸蛋”,网红考北电作弊被曝光,日常照惹人惋惜

熙熙说教
2024-04-23 16:19:35
大局已定!CBA总冠军将从以下3队中产生!

大局已定!CBA总冠军将从以下3队中产生!

历史遗失的真相
2024-04-22 15:51:45
中国工程院院士,任地方高校校长!

中国工程院院士,任地方高校校长!

TOP大学来了
2024-04-24 16:54:03
论中国人脱敏的一生!把过敏的食物都吃脱敏了!网友:这是祖传的

论中国人脱敏的一生!把过敏的食物都吃脱敏了!网友:这是祖传的

今日养生之道
2024-04-24 13:28:38
章子怡在意大利参加晚宴活动

章子怡在意大利参加晚宴活动

娱乐圈酸柠檬
2024-04-23 14:04:58
2024-04-24 19:54:44
爱可生云数据库技术
爱可生云数据库技术
用数据技术推动企业增长
345文章数 502关注度
往期回顾 全部

科技要闻

特斯拉被爆大量毁约应届生 友商"在线抢人"

头条要闻

去年中纪委打掉的3个"正部" 1个被公诉、2个移送检方

头条要闻

去年中纪委打掉的3个"正部" 1个被公诉、2个移送检方

体育要闻

足智多谋的哈姆,温水里的青蛙

娱乐要闻

方媛带两女儿参加婚礼,当花童超可爱

财经要闻

居民气价确实在涨,多地正普遍发生

汽车要闻

续航708公里 极狐阿尔法S5展前现身

态度原创

本地
艺术
亲子
数码
教育

本地新闻

荒野求生贝爷都得靠边站,真求生还得看留子

艺术要闻

艺术名画︱爱尔兰画家大卫·科因的刀画作品

亲子要闻

有子宫肌瘤有生育计划想做消融治疗! 有子宫肌瘤有生育计划想做消融治疗!

数码要闻

消息称 AMD 将推 EPYC 霄龙 4004 处理器:AM5 插槽,含 X3D 版本

教育要闻

我想和它搞好关系,奈何它每次都不给面子!

无障碍浏览 进入关怀版