会话变量不同于 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
特别棘手。不仅有SESSION
和GLOBAL
,还有交互式和批处理。此外,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_timeout
(28800
)。
注释掉 interactive_timeout
为我解决了这个问题。
【讨论】:
以上是关于会话变量不同于 MariaDB 中的全局变量的主要内容,如果未能解决你的问题,请参考以下文章