你能在 MySQL 中看到其他用户的会话变量吗?

edi*_*nor 5 mysql configuration session

在 MySQL 中,使用SHOW GLOBAL VARIABLES提供了查看全局变量的能力。 SHOW SESSION VARIABLES是该会话的变量设置。

有没有办法SESSION从超级用户连接中查看其他活动的、连接的用户的变量?例如,是否有查询或视图可以显示哪些活动会话的变量设置与全局变量不同?

Cou*_*les 7

从 MySQL 5.7 开始,performance_schema可以提供此信息。

有没有办法从超级用户连接中查看其他活动的已连接用户的 SESSION 变量?

您可以从performance_schema.variables_by_thread.

您将需要知道Thread ID。ID fromSHOW PROCESSLISTProcess ID。知道进程 ID,然后您可以从 中查找线程 ID performance_schema.threads

是否有查询或视图可以显示哪些活动会话的变量设置与全局变量不同?

你肯定可以。

SELECT VARIABLE_NAME, gv.VARIABLE_VALUE, tv.VARIABLE_VALUE
FROM performance_schema.global_variables gv
  JOIN performance_schema.variables_by_thread tv USING (VARIABLE_NAME)
WHERE gv.VARIABLE_VALUE <> tv.VARIABLE_VALUE
  AND THREAD_ID = ?;
Run Code Online (Sandbox Code Playgroud)


Rol*_*DBA 2

问题#1

有没有办法从超级用户连接中查看其他活动的连接用户的 SESSION 变量?

不,没有办法。

问题2

是否有一个查询或视图可以显示哪些活动会话的变量设置与全局变量不同?

不,没有办法。

警告

从您的个人连接中,您可以运行此命令

SELECT A.variable_name VarName,
A.variable_value Global_Value,
B.variable_value Session_Value FROM
information_schema.global_variables A INNER JOIN
information_schema.session_variables B USING (variable_name)
WHERE A.variable_value <> B.variable_value;
Run Code Online (Sandbox Code Playgroud)

查看哪些会话设置与全局设置不同。

例如,这是我正在运行的

mysql> SHOW VARIABLES LIKE 'version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| version                 | 5.6.15                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Win64                        |
+-------------------------+------------------------------+
4 rows in set (0.00 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

注意查询的输出

mysql> SELECT A.variable_name VarName,
    -> A.variable_value Global_Value,
    -> B.variable_value Session_Value FROM
    -> information_schema.global_variables A INNER JOIN
    -> information_schema.session_variables B USING (variable_name)
    -> WHERE A.variable_value <> B.variable_value;
+--------------------------+-------------------+------------------+
| VarName                  | Global_Value      | Session_Value    |
+--------------------------+-------------------+------------------+
| CHARACTER_SET_CONNECTION | latin1            | cp850            |
| CHARACTER_SET_RESULTS    | latin1            | cp850            |
| CHARACTER_SET_DATABASE   | latin1            | utf8             |
| COLLATION_DATABASE       | latin1_swedish_ci | utf8_general_ci  |
| CHARACTER_SET_CLIENT     | latin1            | cp850            |
| COLLATION_CONNECTION     | latin1_swedish_ci | cp850_general_ci |
+--------------------------+-------------------+------------------+
6 rows in set (0.08 sec)
Run Code Online (Sandbox Code Playgroud)

如果您想找到具有此差异的所有活动连接,也许您可​​以让应用程序将该查询的输出与连接 ID 一起转储到文本文件(使用 CONNECTION_ID ()函数),并根据需要对其进行解析。