会话变量不同于 MariaDB 中的全局变量

Posted

技术标签:

【中文标题】会话变量不同于 MariaDB 中的全局变量【英文标题】:Session Variables different to global Variables in MariaDB 【发布时间】:2021-03-01 10:58:59 【问题描述】:

我正在运行一个 Galera 集群,前面有一个 HAProxy-LB。 但是我的用户报告会话变量 wait_timeout 设置为 60。

我检查过 SHOW SESSION VARIABLES LIKE "%wait_timeout%" 对我来说,结果是wait_timeout 610

在我的/etc/mysql/my.cnf(在每个集群节点上)中,设置了值“28800”(默认) 我可以通过运行来确认这是使用的: SHOW GLOBAL VARIABLES LIKE "%wait_timeout%" 结果是wait_timeout 28800

任何想法为什么这不适用于新会话? HAProxy 只是 3306 端口上的一个愚蠢的转发器..

编辑:更新了所有集群节点上的所有包。还是同样的问题。 我什至尝试使用 root 的 mysql 套接字连接来检查它,并且新会话产生的 wait_timeout 值为 60。

【问题讨论】:

会话变量值可以在连接过程中根据连接器设置进行更改,例如... 我使用 MySQL Workbench 检查变量,但找不到设置连接时会话变量的设置。报告此行为的用户可以连接到另一个集群,并将会话变量设置为正确的值,所以我不确定这是一个连接器问题。 AFAIR Workbench 从服务器(配置文件,[mysql] 部分)获取变量值。 我也是这么想的。我在 [mysqld] 下设置了“wait_timeout”(如果我在那里更改它会影响全局变量)。我尝试将其添加到 [mysql] 但没有任何更改:( 我在 [mysqld] 下设置了“wait_timeout” 这是服务器设置部分。请参阅 [mysql] 和 [client] 部分。 【参考方案1】:

一般SESSION VARIABLES 在建立连接时初始化GLOBAL 设置。之后,任一组设置都可以更改。

但是,wait_timeout 特别棘手。不仅有SESSIONGLOBAL,还有交互式和批处理。此外,InnoDB 也有类似的价值。

610 是一个不寻常的值。一定是某个人或某个程序改变了它。

你是否达到了意想不到的极限?

可以使用“ping”来保持连接处于活动状态。

您可以检查连接是否已断开,然后重新启动。

请详细说明您的情况。

【讨论】:

您好,感谢您的回答。我对应用程序没有问题,但对 Galera Cluster 的配置没有问题。 GLOBAL 变量都很好,但调用的会话不是。重新启动与 Workbench 连接的节点后,我得到 wait_timeout 60,重新连接后是 610。这实际上只是我没有得到的这个会话变量的值。我刚刚更新了所有节点,但仍然是同样的问题。【参考方案2】:

我发现了问题。 在不同的配置中(一些管理员在/etc/mysql/conf.d/finetuning.cnf 下为“微调”做了一个单独的配置)是一个名为interactive_timeout 的变量,它被设置为60。这似乎将wait_timeout的会话变量设置为60,而不是使用全局变量中的wait_timeout28800)。 注释掉 interactive_timeout 为我解决了这个问题。

【讨论】:

以上是关于会话变量不同于 MariaDB 中的全局变量的主要内容,如果未能解决你的问题,请参考以下文章

mariadb的一些常用命令

MariaDB/MySQL中的变量

微信小程序WXML页面如何获取全局变量值

数据库第六天

MySQL基础_变量

PHP超级全局变量——Session 变量