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]
Shane Bester
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.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.088 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.