6

我正在使用SET GLOBAL <variable> = <value>修改 mysql 中的动态设置,我想知道是否有某种方法可以获取每个变量的默认值?例如,如果我使用以下内容:

SET GLOBAL max_connections = 1000;

然后使用以下命令列出变量:

SHOW GLOBAL VARIABLES LIKE 'max_connections';

我可以看到修改后的值1000,但是是否可以在不检查配置文件的情况下获取此系统变量的默认值?

我在 ubuntu 16.04 上使用 mysql 5.7。

4

6 回答 6

3

在 MySQL 5.7 中,您可以使用performance_schema来获取变量。

修改前set也可以选择变量查看默认值再修改。

方法#1

SELECT 
    VARIABLE_VALUE
FROM
    performance_schema.global_variables
WHERE
    VARIABLE_NAME = 'max_connections';

输出#1

| 变量值 |
| :------------- |
| 151 |

方法#2

如果您不确定变量 use 的确切名称like,也可以在上述查询中使用 used。

SHOW GLOBAL VARIABLES LIKE 'max_connect%';

输出#2

变量名 | 价值
:----------------- | :----
最大连接错误 | 100  
最大连接数 | 151  

方法#3

SELECT @@GLOBAL.max_connections;

输出#3

| @@GLOBAL.max_connections |
| ------------------------------------: |
| 151 |

参考这里db-fiddle

注意: 如果您需要有历史记录,那么您需要在更改之前创建一个表来存储这些值。

PS还有另一种类型的变量sessionglobal通过替换session这些变量可以更改,但它只会影响当前会话。

学分: @scaisedge,@richard

于 2019-10-20T06:10:45.103 回答
2

可以从 information_schema.GLOBAL_STATUS 中选择

select VARIABLE_VALUE 
from information_schema.GLOBAL_STATUS 
where VARIABLE_NAME = 'max_connections';
于 2019-04-21T12:54:05.213 回答
2

这可能并不理想,但如果是我试图解决问题,我会用所有初始值创建我自己的表,并在需要时引用它。

CREATE TABLE 
   default_variables
SELECT 
   * 
FROM 
   information_schema.GLOBAL_STATUS;

这将要求您启动一个与您当前使用的版本相同的新数据库安装,但我认为您可以使用这种方法来解决您的问题。

只需导出数据并将其导入任何您需要的地方。

我目前没有看到任何查询默认值的内置方法。

于 2019-10-19T20:38:46.910 回答
2

从手册

要将全局系统变量值设置为已编译的 MySQL 默认值 [...],请将变量设置为 value DEFAULT

这意味着你可以这样做:

SET @@GLOBAL.max_connections = 1234;

/*
 * Proceed in this order
 * 1) Backup current value
 * 2) Reset to default
 * 3) Read the current value
 * 4) Restore the backup value if necesssary
 */

SET @oldvalue = @@GLOBAL.max_connections;
SET @@GLOBAL.max_connections = DEFAULT;
SET @defvalue = @@GLOBAL.max_connections;
SET @@GLOBAL.max_connections = @oldvalue;

SELECT @@GLOBAL.max_connections AS `current value`
     , @defvalue AS `default value`
-- 1234 and 151

和是用户变量@oldvalue@defvalue

于 2019-10-22T07:32:00.267 回答
1

你试过用这个

mysqld --verbose --help

基于https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html它将显示编译的默认值。

要查看特定变量,您可以使用 grep:

mysqld --verbose --help | grep -i 'max-connections'
于 2019-10-22T10:18:33.713 回答
0

[编辑:扩展elomat答案;我没有足够的声誉来评论它]

所有 mysql* 命令都有不读取配置文件的--no-defaults选项,因此您可以使用:

mysqld --no-defaults --verbose --help | awk '/Variables/,/^$/' | less

由于您无法执行命令,我建议在使用相同发行版/发行版/MySQL 版本创建的虚拟机中运行此命令(要查找 MySQL 的版本,请使用查询select version();)。

另一方面,如果它是本地编译的二进制文件,也许您可​​以将可执行文件复制到另一台具有兼容运行时库且不受执行限制的机器。

注意:awk模式过滤掉开始选项,直到找到单词变量,然后继续打印文本,直到到达空行或文本结尾。这个实例mysqld不会继续运行,因为它没有--daemonize选项。

于 2020-10-04T01:52:10.257 回答