修改全局变量成功但未生效
场景描述
使用Console上的参数修改功能修改long_query_time成功,但未生效。
原因分析
使用Console修改参数时,系统实际使用“set global 变量名=新的变量值;”修改全局参数。
在使用set global命令修改全局变量值时需要注意,该参数在当前连接和已经连接上数据库的其他连接中是不生效的,只对新连接生效,所以此时将所有连接断开重连,即可看到变量修改生效。
示例
举例中使用的是命令的方式做描述。
- 创建会话1。
# 查看参数值。 show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.08 sec) # 修改变量值 set global long_query_time=1; Query OK, 0 rows affected (0.02 sec) # 重新查看,发现未生效。 show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.01 sec)
- 创建会话2。
show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.01 sec)
- 在会话1中执行。
#会话1中执行set global后,再次查看,变量未生效。 show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+ 1 row in set (0.01 sec)
# 会话1断开,重新连接,发现修改生效。 show variables like 'long_query_time'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 1.000000 | +-----------------+----------+ 1 row in set (0.00 sec)
- 会话2断开,重新连接,发现修改生效。
show variables like 'long_query_time'; +-----------------+----------+ | Variable_name | Value | +-----------------+----------+ | long_query_time | 1.000000 | +-----------------+----------+ 1 row in set (0.01 sec)