MySQL proporciona acceso a muchas variables de sistema y de conexión. Muchas variables pueden modificarse dinámicamente mientras el servidor se está ejecutando. Esto a menudo permite variar la operación del servidor sin tener que detenerlo y reiniciarlo.
El servidor mysqld mantiene dos clases de variables. Las variables globales afectan la operación general del servidor. Las variables de sesión actúan sobre la operación en conexiones de clientes individuales.
Cuando el servidor arranca, inicializa todas las variables
globales a sus valores predeterminados. Estos valores pueden ser
modificados por opciones especificadas en ficheros de opciones o
en la línea de comandos. Luego de que el servidor se inicia, las
variables globales pueden ser modificadas dinámicamente
conectándose y emitiendo una sentencia SET GLOBAL
. Para cambiar una
variable global debe tenerse el privilegio
var_name
SUPER
.
El servidor también mantiene un conjunto de variables de sesión
para cada cliente que se conecta. Las variables de sesión de
cliente se inicializan al momento de conectarse, empleando el
valor actual de la correspondiente variable global. Las variables
de sesión dinámicas pueden ser modificadas por el cliente
mediante una sentencia SET SESSION
. No se requieren
privilegios especiales para establecer el valor una variable de
sesión, pero un cliente puede modificar solamente sus propias
variables, no las de otros clientes.
var_name
Un cambio en una variable global es visible para cualquier cliente
que acceda esa variable. Sin embargo, afectará solamente a las
correspondientes variables de sesión de las conexiones que se
realicen luego del cambio. No afectará las variables de sesión
de los clientes actualmente conectados (ni siquiera las del
cliente que emitió la sentencia SET GLOBAL
).
Los valores de las variables globales y de sesión pueden
establecerse y recuperarse usando varias sintaxis diferentes. Los
siguientes ejemplos están basados en la variable
sort_buffer_size
.
Para establecer el valor de una variable
GLOBAL
, debe emplearse una de las siguientes
sintaxis:
mysql> SET GLOBAL sort_buffer_size=valor
; mysql> SET @@global.sort_buffer_size=valor
;
Para establecer el valor de una variable
SESSION
, debe emplearse una de las siguientes
sintaxis:
mysql> SET SESSION sort_buffer_size=valor
; mysql> SET @@session.sort_buffer_size=valor
; mysql> SET sort_buffer_size=valor
;
LOCAL
es un sinónimo de
SESSION
.
Si al establecer el valor de una variable no se utiliza
GLOBAL
, SESSION
, o
LOCAL
, por defecto se asume
SESSION
. Consulte Sección 13.5.3, “Sintaxis de SET
”.
Para recuperar el valor de una variable GLOBAL
debe utilizarse una de las siguientes sentencias:
mysql> SELECT @@global.sort_buffer_size; mysql> SHOW GLOBAL VARIABLES like 'sort_buffer_size';
Para recuperar el valor de una variable SESSION
debe utilizarse una de las siguientes sentencias:
mysql> SELECT @@sort_buffer_size; mysql> SELECT @@session.sort_buffer_size; mysql> SHOW SESSION VARIABLES like 'sort_buffer_size';
Aquí, también, LOCAL
es un sinónimo de
SESSION
.
Cuando se recupera una variable con SELECT
@@
(o sea, no se
especifica nombre_var
global.
,
session.
, o local.
), MySQL
devuelve el valor de SESSION
si existe y el
valor GLOBAL
en otro caso.
En el caso de SHOW VARIABLES
, si no se
especifica GLOBAL
, SESSION
,
o LOCAL
, MySQL devuelve los valores de
SESSION
.
La razón por la que la palabra clave GLOBAL
se
requiere para establecer el valor de variables que solamente
existen como GLOBAL
pero no para recuperar
dicho valor, es para prevenir futuros problemas. Si se elimina una
variable SESSION
con el mismo nombre que una
variable GLOBAL
, un cliente con el privilegio
SUPER
podría cambiar accidentalmente la
variable GLOBAL
en lugar de hacerlo solamente
sobre la variable SESSION
de su propia
conexión. Si se agrega una variable SESSION
con el mismo nombre que una GLOBAL
, un cliente
que intentase modificar la variable GLOBAL
podría encontrarse con que sólo se ha modificado su propia
variable SESSION
.
Puede encontrarse mayor información acerca de las opciones de inicio del sistema y de las variables de sistema en Sección 5.3.1, “Opciones del comando mysqld” y Sección 5.3.3, “Variables de sistema del servidor”. Una lista de las variables que pueden establecerse en tiempo de ejecución se brinda en Sección 5.3.3.1, “Variables de sistema dinámicas”.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.