[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
10.4.1 Dynamic System Variables | ||
10.4.2 Structured System Variables |
Starting from MySQL 4.0.3, we provide better access to a lot of system and connection variables. Many variables can be changed dynamically while the server is running. This allows you to modify server operation without having to stop and restart it.
The mysqld
server maintains two kinds of variables while it runs.
Global variables affect the overall operation of the server.
Session variables affect its operation for individual client connections.
When the server starts, it initializes all global variables to their default
values. These defaults may be changed by options specified in option files
or on the command line. After the server starts, those global variables
that are dynamic can be changed by connecting to the server and issuing
a SET GLOBAL var_name
statement. To change a global variable,
you must have the SUPER
privilege.
The server also maintains a set of session variables for each client
that connects. The client's session variables are initialized at connect
time using the current values of the corresponding global variables. For
those session variables that are dynamic, the client can change them
by issuing a SET SESSION var_name
statement. Setting a session
variable requires no special privilege, but a client can change only its
own session variables, not those of any other client.
A change to a global variable affects only client connections that occur
after the change. It does not affect session variables for any client
that is already connected (not even those of the client that issues the
SET GLOBAL
statement).
Global or session variables may be set or retrieved using several syntax
forms. The following examples use sort_buffer_size
as a sample variable
name.
To set the value of a GLOBAL
variable, use one
of the following syntaxes:
mysql> SET GLOBAL sort_buffer_size=value; mysql> SET @@global.sort_buffer_size=value; |
To set the value of a SESSION
variable, use one of the
following syntaxes:
mysql> SET SESSION sort_buffer_size=value; mysql> SET @@session.sort_buffer_size=value; mysql> SET sort_buffer_size=value; |
LOCAL
is a synonym for SESSION
.
If you don't specify GLOBAL
, SESSION
, or LOCAL
when
setting a variable, SESSION
is the default.
See section SET OPTION
.
To retrieve the value of a GLOBAL
variable, use one of the
following statements:
mysql> SELECT @@global.sort_buffer_size; mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size'; |
To retrieve the value of a SESSION
variable, use one of the
following statements:
mysql> SELECT @@session.sort_buffer_size; mysql> SHOW SESSION VARIABLES like 'sort_buffer_size'; |
Here, too, LOCAL
is a synonym for SESSION
.
If you don't specify @@global
, @@session
, or
@@local
when retrieving a variable with SELECT
, MySQL returns
the SESSION
value if it exists and the GLOBAL
value otherwise.
If you don't specify GLOBAL
, SESSION
, or LOCAL
for
SHOW VARIABLES
, MySQL returns the SESSION
value.
The reason for requiring the GLOBAL
keyword when setting
GLOBAL
-only variables but not when retrieving them is to ensure that
we don't later run into problems if we would introduce a SESSION
variable with the same name or remove a SESSION
variable. In that
case, a client with the SUPER
privilege might change the
GLOBAL
variable by accident, rather than just the SESSION
variable for the client's own connection.
Further information about system variables can be found in the
startup options section, and in the descriptions of the SHOW VARIABLES
and SET
statements.
See section 5.2.1 mysqld
Command-line Options.
See section SHOW VARIABLES
.
See section SET OPTION
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |