Bug #363 | SHOW SESSION VARIABLES LIKE 'x' != SELECT @@SESSION.x | ||
---|---|---|---|
Submitted: | 3 May 2003 6:19 | Modified: | 19 May 2009 17:55 |
Reporter: | Guilhem Bichot | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.0 | OS: | Any (all) |
Assigned to: | Marc ALFF | CPU Architecture: | Any |
Tags: | affects_connectors |
[3 May 2003 6:19]
Guilhem Bichot
[15 May 2003 14:38]
Guilhem Bichot
Some more strange things : mysql> select @@session.max_binlog_size; ERROR 1229: Variable 'max_binlog_size' is a GLOBAL variable and should be set with SET GLOBAL mysql> show session variables like 'max_binlog_size'; +-----------------+------------+ | Variable_name | Value | +-----------------+------------+ | max_binlog_size | 1073741824 | +-----------------+------------+ 1 row in set (0.00 sec) mysql> show global variables like 'max_binlog_size'; +-----------------+------------+ | Variable_name | Value | +-----------------+------------+ | max_binlog_size | 1073741824 | +-----------------+------------+ 1 row in set (0.00 sec)
[15 May 2003 14:40]
Guilhem Bichot
Apparently SHOW SESSION VARIABLES prints nothing for a session-only variable, and prints the global value for a global-only variable. It works fine for a session-and-global variable. I will check mysqld_show() in sql_show.cc.
[26 May 2003 13:29]
Guilhem Bichot
Even the current SELECT @@SESSION.xx behaviour may not be consistent. When I write SELECT @@SESSION.xx, I probably want the value of xx that applies to me, that is: - if this variable has a session variant, I want the session value. - if it does not, i.e. is only global, then the global value is what applies to me, so I should get the global value, not an error like now (but I should still get an error when doing SET @@SESSION.xx = ). Here's an array to sum up the consistent way that should be: (in [] the current way when it is different) : | x is glob&sess | x is glob only | x is sess only --------------------|-----------------|--------------------|-------------------- SELECT @@SESSION.x | sess val of x | glob val of x [err]| sess val of x SHOW SESSION LIKE x | sess val of x | glob val of x |sess val of x[empty] SET @@SESSION.x | sess val of x | error | sess val of x SELECT @@GLOBAL.x | glob val of x | glob val of x | error SHOW GLOBAL LIKE x | glob val of x | glob val of x | empty SET @@GLOBAL.x | glob val of x | glob val of x | error Note that we must always honour SHOW VARIABLES = SHOW SESSION VARIABLES.
[27 Aug 2003 0:07]
Michael Widenius
Extension, not bug report. Should be in worklog, not here.
[27 Aug 2003 0:19]
Michael Widenius
A small addtion to this: log_bin stands for 'server is logging data to the binary log' sql_log_bin stands for 'should data updated in the current thread be logged to the binary log' We should probably in the future add all sql_xxx variables to 'show variables'
[21 Aug 2013 19:31]
MySQL Verification Team
this looks fixed. mysql> show session variables like 'sql_log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_log_bin | ON | +---------------+-------+ 1 row in set (0.00 sec) mysql> select @@session.sql_log_bin; +-----------------------+ | @@session.sql_log_bin | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 5.7.3-m13 | +-----------+ 1 row in set (0.00 sec)
[3 Sep 2013 14:41]
Guilhem Bichot
Apparently the problem noted in the third column of my array ("X is session only") is indeed fixed: (gtid_next is a session only variable) mysql> show session variables like 'gtid_next'; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | gtid_next | AUTOMATIC | +---------------+-----------+ 1 row in set (0,02 sec) mysql> select @@session.gtid_next; +---------------------+ | @@session.gtid_next | +---------------------+ | AUTOMATIC | +---------------------+ But the problem in the second column ("X is a global only") is not yet fixed: mysql> select @@session.general_log_file; -------------- select @@session.general_log_file -------------- ERROR 1238 (HY000): Variable 'general_log_file' is a GLOBAL variable mysql> show session variables like 'general_log_file'; -------------- show session variables like 'general_log_file' -------------- +------------------+---------------------+ | Variable_name | Value | +------------------+---------------------+ | general_log_file | /m/tmp/zo/t3500.log | +------------------+---------------------+ 1 row in set (0,01 sec) Above we have an inconsistency where SELECT SESSION returns an error, but SHOW SESSION shows the global value.
[1 Dec 2013 10:29]
Hartmut Holzgraefe
Even worse: general_log_file also appears in I_S.SESSION_VARIABLES: mysql> select @@session.general_log_file; ERROR 1238 (HY000): Variable 'general_log_file' is a GLOBAL variable mysql> show session variables like 'general_log_file'; +------------------+-----------------------------------------------+ | Variable_name | Value | +------------------+-----------------------------------------------+ | general_log_file | /usr/local/mysql-5.6.14/var/hartmut-t430s.log | +------------------+-----------------------------------------------+ 1 row in set (0.00 sec) mysql> select * from information_schema.session_variables where variable_name = 'general_log_file'; +------------------+-----------------------------------------------+ | VARIABLE_NAME | VARIABLE_VALUE | +------------------+-----------------------------------------------+ | GENERAL_LOG_FILE | /usr/local/mysql-5.6.14/var/hartmut-t430s.log | +------------------+-----------------------------------------------+ 1 row in set (0.00 sec)
[2 Nov 2021 1:04]
Justin Swanhart
In 8.x (maybe earlier versions) I_S.SESSION_VARIABLES no longer exists and the behavior for session and global variables is consistent: mysql> show session variables like 'sql_log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_log_bin | ON | +---------------+-------+ 1 row in set (0.05 sec) mysql> select @@session.sql_log_bin; +-----------------------+ | @@session.sql_log_bin | +-----------------------+ | 1 | +-----------------------+ 1 row in set (0.00 sec) mysql> show session variables like 'general_log_file'; +------------------+------------------------------+ | Variable_name | Value | +------------------+------------------------------+ | general_log_file | /home/justin/datadir/msi.log | +------------------+------------------------------+ 1 row in set (0.00 sec) mysql> select @@session.general_log_file; ERROR 1238 (HY000): Variable 'general_log_file' is a GLOBAL variable I think this is verified as fixed and this bug should be closed.
[2 Nov 2021 1:11]
Justin Swanhart
Sorry. I missed that there was a request to make @@session.XXXX work when it is a global variable since SHOW SESSION VARIABLES ... reports the value. Maybe this should just be a doc bug now, since this is the accepted behavior and this isn't a 'feature request'. Suggest change to doc bug and update documentation to explain current behavior.