我正在使用SET GLOBAL <variable> = <value>
来修改mysql中的动态设置,我想知道是否有某种方法可以获取每个变量的默认值?例如,如果我使用以下内容:
SET GLOBAL max_connections = 1000;
,然后使用以下命令列出变量:
SHOW GLOBAL VARIABLES LIKE 'max_connections';
我可以看到修改后的值1000
,但是可以在不检查配置文件的情况下获得此系统变量的默认值吗?
我在ubuntu 16.04上使用mysql 5.7。
答案 0 :(得分:3)
在MySQL 5.7中,您可以使用performance_schema
来获取变量。
在进行修改或set
之前,您可以选择变量以查看默认值,然后进行修改。
方法1
SELECT
VARIABLE_VALUE
FROM
performance_schema.global_variables
WHERE
VARIABLE_NAME = 'max_connections';
输出#1
| VARIABLE_VALUE | | :------------- | | 151 |
方法2
如果不确定变量的确切名称使用like
,它也可以在上面的查询中使用。
SHOW GLOBAL VARIABLES LIKE 'max_connect%';
输出#2
Variable_name | Value :----------------- | :---- max_connect_errors | 100 max_connections | 151
方法3
SELECT @@GLOBAL.max_connections;
输出#3
| @@GLOBAL.max_connections | | -----------------------: | | 151 |
在此处db-fiddle
注意: 如果您需要某种历史记录,则需要创建一个表来存储这些值,然后再进行更改。
PS 。还有另外一种类型的变量session
。通过将global
替换为session
,可以更改这些变量,但只会影响当前会话。
积分: @ scaisedge,@ richard
答案 1 :(得分:2)
这可能不是理想的选择,但是如果我要解决问题,那么我将创建具有所有初始值的我自己的表,并在需要时引用该表。
CREATE TABLE
default_variables
SELECT
*
FROM
information_schema.GLOBAL_STATUS;
这将要求您启动新的数据库安装,该安装与您当前使用的安装版本相同,但是我认为您可以使用此方法来解决问题。
只需导出数据,然后将其导入到您需要的任何地方。
我目前看不到任何查询默认值的内置方法。
答案 2 :(得分:2)
要将全局系统变量值设置为内置的MySQL默认值 值[...]将变量设置为值
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
是用户变量。
答案 3 :(得分:1)
可以从information_schema.GLOBAL_STATUS中选择
select VARIABLE_VALUE
from information_schema.GLOBAL_STATUS
where VARIABLE_NAME = 'max_connections';
答案 4 :(得分:0)
您尝试过使用
mysqld --verbose --help
基于https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html,它将显示默认编译结果。
要查看特定变量,可以使用grep:
mysqld --verbose --help | grep -i 'max-connections'
答案 5 :(得分:0)
[编辑:扩展elomat的answer;我没有足够的声誉对此发表评论]
所有mysql *命令都具有--no-defaults
选项,用于不读取配置文件,因此可以使用:
mysqld --no-defaults --verbose --help | awk '/Variables/,/^$/' | less
由于您无法执行命令,因此我建议在使用相同发行版/发行版/ MySQL版本创建的虚拟机中运行此命令(要查找MySQL的版本,请使用查询select version();
)。
另一方面,如果它是本地编译的二进制文件,则可以将可执行文件复制到具有兼容运行时库且没有执行限制的另一台计算机上。
注意:awk
模式过滤出起始选项,直到找到单词 Variable ,然后继续打印文本,直到到达空行或文本结尾。 mysqld
的该实例由于没有--daemonize
选项而无法继续运行。