CREATE USERuser
[IDENTIFIED BY [PASSWORD] 'password
'] [,user
[IDENTIFIED BY [PASSWORD] 'password
']] ...
El comando CREATE USER
se añadió en MySQL
5.0.2. Este comando crea nuevas cuentas MySQL. Para usarlas,
debe tener el permiso global CREATE USER
o
el permiso INSERT
para la base de datos
mysql
. Para cada cuenta, CREATE
USER
crea un nuevo registro en la tabla
mysql.user
que no tiene permisos. Un error
ocurre si la cuenta ya existe.
La cuenta puede tener una contraseña con la cláusula
opcional IDENTIFIED BY
. El valor
user
y la contraseña se dan del
mismo modo que para el comando GRANT
. En
particular, para especificar la contraseña en texto plano,
omita la palabra clave PASSWORD
. Para
especificar la contraseña como el valor hasheado retornado
por la función PASSWORD()
, incluya la
palabra clave PASSWORD
. Consulte
Sección 13.5.1.3, “Sintaxis de GRANT
y REVOKE
”.
DROP USERuser
[,user
] ...
El comando DROP USER
borra una o más
cuentas MySQL . Para usarlo, debe tener el permiso global
CREATE USER
o el permiso
DELETE
para la base de datos
mysql
. Cada cuenta se nombra usando el
mismo formato que para GRANT
o
REVOKE
; por ejemplo,
'jeffrey'@'localhost'
. Las partes de
usuario y equipo del nombre de cuenta se corresponden a las
columnas User
y Host
del
registro de la tabla user
para la cuenta.
DROP USER
como está en MySQL 5.0.0 borra
sólo cuentas que no tienen permisos. En MySQL 5.0.2, se
modificó para eliminar permisos de cuenta también. Esto
significa que el procedimiento para borrar una cuenta depende
en su versión de MySQL.
Desde MySQL 5.0.2, puede borrar una cuenta y sus permisos como sigue:
DROP USER user
;
El comando borra registros de permisos para la cuenta de todas las tablas de permisos.
En MySQL 5.0.0 y 5.0.1, DROP USER
borra
sólo cuentas MySQL que no tienen permisos. En estas versiones
MySQL sólo sirve para borrar cada registro de cuenta de la
tabla user
. Para borrar una cuenta MySQL
completamente (incluyendo todos sus permisos), debe usar el
siguiente procedimiento, realizando estos pasos en el orden
mostrado:
-
Use
SHOW GRANTS
para determinar los permisos que tiene la cuenta. Consulte Sección 13.5.4.10, “Sintaxis deSHOW GRANTS
”. -
Use
REVOKE
para revocar los permisos mostrados porSHOW GRANTS
. Esto borra registros para la cuenta de todas las tablas de permisos excepto la tablauser
, y revoca cualquier permiso global listado en la tablauser
. Consulte Sección 13.5.1.3, “Sintaxis deGRANT
yREVOKE
”. -
Borre la cuenta usando
DROP USER
para borrar el registro de la tablauser
.
DROP USER
no cierra automáticamente
ninguna sesión de usuario. En lugar de ello, en el evento que
un usuario con una sesión abierta se elimina, el comando no
tiene efecto hasta que se cierra la sesión de usuario. Una
vez se ha cerrado, el usuario se borra, y el próximo usuario
de logueo del usuario fallará. Esto es por diseño.
GRANTpriv_type
[(column_list
)] [,priv_type
[(column_list
)]] ... ON [object_type
] {tbl_name
| * | *.* |db_name
.*} TOuser
[IDENTIFIED BY [PASSWORD] 'password
'] [,user
[IDENTIFIED BY [PASSWORD] 'password
']] ... [REQUIRE NONE | [{SSL| X509}] [CIPHER 'cipher
' [AND]] [ISSUER 'issuer
' [AND]] [SUBJECT 'subject
']] [WITHwith_option
[with_option
] ...]object_type
= TABLE | FUNCTION | PROCEDUREwith_option
= GRANT OPTION | MAX_QUERIES_PER_HOURcount
| MAX_UPDATES_PER_HOURcount
| MAX_CONNECTIONS_PER_HOURcount
| MAX_USER_CONNECTIONScount
REVOKEpriv_type
[(column_list
)] [,priv_type
[(column_list
)]] ... ON [object_type
] {tbl_name
| * | *.* |db_name
.*} FROMuser
[,user
] ... REVOKE ALL PRIVILEGES, GRANT OPTION FROMuser
[,user
] ...
Los comandos GRANT
y
REVOKE
permiten a los adminitradores de
sistemas crear cuentas de usuario MySQL y darles permisos y
quitarlos de las cuentas.
La información de cuenta de MySQL se almacena en las tablas
de la base de datos mysql
. Esta base de
datos y el sistema de control de acceso se discuten
extensivamente en
Capítulo 5, Administración de bases de datos, que puede
consultar para más detalles.
Si las tablas de permisos tienen registros de permisos que
contienen nombres de tablas o bases de datos con mayúsculas y
minúsculas y la variable de sistema
lower_case_table_names
está activa,
REVOKE
no puede usarse para quitar los
permisos. Es necesario manipular las tablas de permisos
directamente. (GRANT
no creará estos
registros cuando está activo
lower_case_table_names
, pero tales
registros pueden haberse creado préviamente a activar la
variable.)
Los permisos pueden darse en varios niveles:
-
Nivel global
Los permisos globales se aplican a todas las bases de datos de un servidor dado. Estos permisos se almacenan en la tabla
mysql.user
.GRANT ALL ON *.*
yREVOKE ALL ON *.*
otorgan y quitan sólo permisos globales. -
Nivel de base de datos
Los permisos de base de datos se aplican a todos los objetos en una base de datos dada. Estos permisos se almacenan en las tablas
mysql.db
ymysql.host
.GRANT ALL ON
db_name
.* yREVOKE ALL ON
db_name
.* otorgan y quitan sólo permisos de bases de datos. -
Nivel de tabla
Los permisos de tabla se aplican a todas las columnas en una tabla dada. Estos permisos se almacenan en la tabla
mysql.tables_priv
.GRANT ALL ON
db_name.tbl_name
yREVOKE ALL ON
db_name.tbl_name
otorgan y quian permisos sólo de tabla. -
Nivel de columna
Los permisos de columna se aplican a columnas en una tabla dada. Estos permisos se almacenan en la tabla
mysql.columns_priv
. UsandoREVOKE
, debe especificar las mismas columnas que se otorgaron los permisos. -
Nivel de rutina
Los permisos
CREATE ROUTINE
,ALTER ROUTINE
,EXECUTE
, yGRANT
se aplican a rutinas almacenadas. Pueden darse a niveles global y de base de datos. Además, excepto paraCREATE ROUTINE
, estos permisos pueden darse en nivel de rutinas para rutinas individuales y se almacenan en la tablamysql.procs_priv
.
La cláusula object_type
se
añadió en MySQL 5.0.6. Debe especificarse como
TABLE
, FUNCTION
, o
PROCEDURE
cuando el siguiente objeto es una
tabla, una función almacenada, o un procedimiento almacenado.
Para usar esta cláusula cuando actualice de una versión
anterior de MySQL a la 5.0.6, debe actualizar las tablas de
permisos. Consulte Sección 2.10.2, “Aumentar la versión de las tablas de privilegios”.
Para usar GRANT
o
REVOKE
, debe tener el permiso
GRANT OPTION
, y debe tener los permisos
que está dando o quitando.
Para hacer fácil de quitar todos los permisos, MySQL 5.0 tiene la siguiente sintaxis, que borra todos los permisos globales, de nivel de base de datos y de nivel de tabla para los usuarios nombrados:
REVOKE ALL PRIVILEGES, GRANT OPTION FROMuser
[,user
] ...
Para usar esta sintaxis REVOKE
, debe tener
el permiso CREATE USER
global o el permiso
UPDATE
para la base de datos
mysql
.
Para los comandos GRANT
y
REVOKE
, priv_type
pueden especificarse como cualquiera de los siguientes:
Permiso | Significado |
ALL [PRIVILEGES]
|
Da todos los permisos simples excepto GRANT OPTION |
ALTER
|
Permite el uso de ALTER TABLE |
ALTER ROUTINE
|
Modifica o borra rutinas almacenadas |
CREATE
|
Permite el uso de CREATE TABLE |
CREATE ROUTINE
|
Crea rutinas almacenadas |
CREATE TEMPORARY TABLES
|
Permite el uso de CREATE TEMPORARY TABLE |
CREATE USER
|
Permite el uso de CREATE USER , DROP
USER , RENAME USER , y
REVOKE ALL PRIVILEGES . |
CREATE VIEW
|
Permite el uso de CREATE VIEW |
DELETE
|
Permite el uso de DELETE |
DROP
|
Permite el uso de DROP TABLE |
EXECUTE
|
Permite al usuario ejecutar rutinas almacenadas |
FILE
|
Permite el uso de SELECT ... INTO OUTFILE y
LOAD DATA INFILE |
INDEX
|
Permite el uso de CREATE INDEX y DROP
INDEX |
INSERT
|
Permite el uso de INSERT |
LOCK TABLES
|
Permite el uso de LOCK TABLES en tablas para las que
tenga el permiso SELECT |
PROCESS
|
Permite el uso de SHOW FULL PROCESSLIST |
REFERENCES
|
No implementado |
RELOAD
|
Permite el uso de FLUSH |
REPLICATION CLIENT
|
Permite al usuario preguntar dónde están los servidores maestro o esclavo |
REPLICATION SLAVE
|
Necesario para los esclavos de replicación (para leer eventos del log binario desde el maestro) |
SELECT
|
Permite el uso de SELECT |
SHOW DATABASES
|
SHOW DATABASES muestra todas las bases de datos |
SHOW VIEW
|
Permite el uso de SHOW CREATE VIEW |
SHUTDOWN
|
Permite el uso de mysqladmin shutdown |
SUPER
|
Permite el uso de comandos CHANGE MASTER ,
KILL , PURGE MASTER
LOGS , and SET GLOBAL , el
comando mysqladmin debug le permite
conectar (una vez) incluso si se llega a
max_connections |
UPDATE
|
Permite el uso de UPDATE |
USAGE
|
Sinónimo de “no privileges” |
GRANT OPTION
|
Permite dar permisos |
El permiso EXECUTE
no es operacional hasta
MySQL 5.0.3. CREATE VIEW
y SHOW
VIEW
se añadieron en MySQL 5.0.1. CREATE
USER
, CREATE ROUTINE
, y
ALTER ROUTINE
se añadieron en MySQL 5.0.3.
Para usar estos permisos al actualizar desde una versión
anterior de MySQL que no los tenga, debe actualizar primero
las tablas de permisos, como se describe en
Sección 2.10.2, “Aumentar la versión de las tablas de privilegios”.
El permiso REFERENCES
actualmente no se
usa.
USAGE
puede especificarse cuando quiere
crear un usuario sin permisos.
Use SHOW GRANTS
para determinar qué
permisos tiene la cuenta. Consulte
Sección 13.5.4.10, “Sintaxis de SHOW GRANTS
”.
Puede asignar permisos globales usando sintaxis ON
*.*
o permisos a nivel de base de datos usando la
sintaxis ON
db_name
.*. Si especifica
ON *
y tiene seleccionada una base de datos
por defecto, los permisos se dan en esa base de datos.
(Atención: Si especifica
ON *
y no ha
seleccionado una base de datos por defecto, los permisos dados
son globales.)
Los permisos FILE
,
PROCESS
, RELOAD
,
REPLICATION CLIENT
, REPLICATION
SLAVE
, SHOW DATABASES
,
SHUTDOWN
, y SUPER
son
permisos administrativos que sólo pueden darse globalmente
(usando sintaxis ON *.*
).
Otros permisos pueden darse globalmente o a niveles más específicos.
Los únicos valores priv_type
que puede
especificar para una tabla son SELECT
,
INSERT
, UPDATE
,
DELETE
, CREATE
,
DROP
, GRANT OPTION
,
INDEX
, y ALTER
.
Los únicos valores priv_type
que puede
especificar para una columna (cuando usa la cláusula
column_list
) son
SELECT
, INSERT
, y
UPDATE
.
Los únicos valores priv_type
que puede
especificar a nivel de rutina son ALTER
ROUTINE
, EXECUTE
, y
GRANT OPTION
. CREATE
ROUTINE
no es un permiso de nivel de rutina porque
debe tener este permiso para ser capaz de crear una rutina en
primer lugar.
Para los niveles global, base de datos, tabla y rutina,
GRANT ALL
asigna sólo los permisos que
existen en el nivel que está otorgándolos. Por ejemplo, si
usa GRANT ALL ON
db_name
.*, este es un
comando de nivel de base de datos, así que ninguno de los
permisos únicamente globales tales como
FILE
se otorgan.
MySQL le permite dar permisos incluso en objetos de bases de
datos que no existen. En tales casos, los permisos a dar deben
incluir el permiso CREATE
. Este
es el comportamiento diseñado, y se pretende
permitir al administrador de la base de datos perparar cuentas
de usuario y permisos para objetos de base de datos que se
crearán posteriormente.
MySQL no elimina automáticamente nigún permiso si borra una tabla o base de datos . Si borra un rutina, se quita cualquier permiso dado a nivel de rutina para la misma.
Nota: los carácters comodín
'_
' y '%
' se permiten al
especificar nombres de base de datos en comandos
GRANT
que otorgan permisos a nivel global o
de base de datos. Esto significa, por ejemplo, que si quiere
usar un carácter '_
' como parte de un
nombre de base de datos, debe especificarlo como
'\_
' en el comando GRANT
, para evitar que el usuario sea capaz de acceder a bases de
datos adicionales que coincidan con el patrón de los
comodines, por ejemplo GRANT ... ON `foo\_bar`.* TO
...
.
Para acomodar los permisos a los usuarios de equipos
arbitrários, MySQL soporta especificar el valor
user
con la forma
user_name
@host_name
.
Si un valor user_name
o
host_name
es legal como
identificador sin poner entre comillas, no necesita hacerlo.
Sin embargo, las comillas son necesarias para especificar una
cadena user_name
conteniendo
carácteres especiales (tales como '-
'), o
una cadena host_name
conteniendo
carácteres especiales o comodín (tales como
'%
'); por ejemplo,
'test-user'@'test-hostname'
. Entrecomille
el nombre de usuario y de equipo separadamente.
Puede especificar carácteres comodín en el nombre de equipo.
Por ejemplo,
user_name
@'%.loc.gov'
se aplica a user_name
para
cualquier equipo en el dominio loc.gov
, y
user_name
@'144.155.166.%'
se aplica a user_name
para
cualquier equipo en la clase subred clase C
144.155.166
.
La forma simple user_name
es
sinónimo de
user_name
@'%'.
MySQL no soporta comodines en el nombre de usuario. Los
usuarios anónimos se definien insertando entradas con
User=''
en la tabla
mysql.user
o creando un usuario con un
nombre vacío con el comando GRANT
:
mysql> GRANT ALL ON test.* TO ''@'localhost' ...
Al especificar valores delimitados, use comillas simples para
delimitar los nombres de bases de datos, tabla, columna y de
rutina ('`
'). Para los nombres de equipo,
nombres de usuario, y contraseñas como cadenas, use
apóstrofes (''
').
Advertencia: Si permite
conectar con el servidor a usuarios anónimos, debe dar
permisos a todos los usuarios locales como
user_name
@localhost.
De otro modo, la cuenta de usuario anónimo para
localhost
en la tabla
mysql.user
(creada durante la instalación
de MySQL) se usa cuando los usuarioa con nombre intentan
loguear con el servidor MySQL desde la máquina local.
Puede determinar si esto se aplica a su sistema ejecutando la siguiente consulta, que lista cualquier usuario anónimo:
mysql> SELECT Host, User FROM mysql.user WHERE User='';
Si quiere borrar la cuenta anónima local para evitar el problema descrito, use estos comandos:
mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User=''; mysql> FLUSH PRIVILEGES;
GRANT
soporta nombres de equipo de hasta 60
carácteres. Los nombres de bases de datos, tablas, columnas y
rutinas pueden tener hasta 64 carácteres. Los nombres de
usuario pueden tener hasta 16 carácteres. Los nombres de
usuario pueden tener hasta 16 carácteres. Estos
límites están harcodeados en el software MySQL y no pueden
cambiarse alterando las tablas de permisos .
Los permisos para una tabla o columna se forman de forma
aditiva como una OR
lógica de los permisos
en cada uno de los cuatro niveles de permisos. Por ejemplo, si
la tabla mysql.user
especifica que un
usuario tiene un permiso SELECT
global, el
permiso no puede denegarse mediante una entrada en el nivel de
base de datos, tabla o columna.
Los permisos de una columna pueden calcularse como sigue:
global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges
En la mayoría de casos, puede dar derechoa a un usuario en sólo uno de los niveles de permisos, así que la vida normalmente no es tan complicada. Los detalles de este procedimiento de chequeo de permisos se presentan en Sección 5.6, “El sistema de privilegios de acceso de MySQL”.
Si otorga permisos para una combinación usuario/equipo que no
existe en la tabla mysql.user
se añade una
entrada que permite allí hasta que se borra con un comando
DELETE
. En otras palabras,
GRANT
puede crear entradas
user
pero REVOKE
no los
borra; debe hacerlo explícitamente usando DROP
USER
o DELETE
.
Si se crea un nuevo usuario o si tiene permisos globales para
otorgar permisos, la contraseña de usuario se cambia con la
contraseña especificada por la cláusula IDENTIFIED
BY
, si se da una. Si el usuario ya tiene una
contraseña, esta se reemplaza por la nueva.
Atención: Si crea un nuevo
usuario pero no especifica una cláusula IDENTIFIED
BY
, el usuario no tiene contraseña. Esto es muy
poco seguro. Desde MySQL 5.0.2, puede activar el modo SQL
NO_AUTO_CREATE_USER
para evitar que
GRANT
cree un nuevo usuario si lo hiciese
de otro modo, a no ser que IDENTIFIED BY
se
de para proporcionar la nueva contraseña de usuario.
Las contraseñas pueden ponerse con el comando SET
PASSWORD
. Consulte Sección 13.5.1.5, “Sintaxis de SET PASSWORD
”.
En la cláusula IDENTIFIED BY
, la
contraseña debe darse como el valor de contraseña literal.
No es necesario usar la función PASSWORD()
como lo es para el comando SET PASSWORD
.
Por ejemplo:
GRANT ... IDENTIFIED BY 'mypass';
Si no quiere enviar la contraseña en texto plano y conoce el
valor haseado que PASSWORD()
retornaría
para la contraseña, puede especificar el valor hasheado
precedido por la palabra clave PASSWORD
:
GRANT ... IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
En un programa C , puede obtener el valor haseado usando la
función make_scrambled_password()
de la
API de C.
Si da permisos para una base de datos, se crea una entrada en
la tabla mysql.db
si es necesario. Si todos
los permisos para la base de datos se eliminan con
REVOKE
, esta entrada se borra.
Si un usuario no tiene permisos para una tabla, el nombre de
tabla no se muestra cuando el usuario pide una lista de talbas
(por ejemplo, con el comando SHOW TABLES
).
El permiso SHOW DATABASES
le permite a la
cuenta ver nombres de bases de datos realizando el comando
SHOW DATABASE
. Las cuentas que no tienen
este permiso sólo ven las bases de datos para las que tienen
algún permiso, y no pueden usar el comando para nada si el
servidor se arranca con la opción
--skip-show-database
.
La cláusula WITH GRANT OPTION
le da al
usuario la habilidad para dar a otros usuarios cualquier
permiso que tenga el usuario en el nivel de permiso
especificado. Debe tener cuidado de a quién da el permiso
GRANT OPTION
, ya que dos usuarios con
permisos distintos pueden ser capaces de juntar permisos!
No puede dar a otro usuario un permiso que no tenga usted
mismo; el permiso GRANT OPTION
le permite
asignar sólo los permisos que tenga usted.
Tenga en cuenta que cuando le da a un usuario el permiso
GRANT OPTION
a un nivel de permisos
particular, cualquier permiso que tenga el usuario (o que se
de en el futuro!) a este nivel también son otorgables por
este usuario. Suponga que le da a un usuario el permisos
INSERT
en una base de datos. Si otorga el
permiso SELECT
en la base de datos y
especifica WITH GRANT OPTION
, el usuario
puede quitar no sólo el permiso SELECT
sino también INSERT
. Si luego otorga el
permiso UPDATE
al usuario en la base de
datos, el usuario puede quitar INSERT
,
SELECT
, y UPDATE
.
No debe otorgar permisos ALTER
a un usuario
normal. Si lo hace, el usuario puede intentar engañar al
sistema de permisos renombrando tablas!
Las opciones MAX_QUERIES_PER_HOUR
count
,
MAX_UPDATES_PER_HOUR
count
, y
MAX_CONNECTIONS_PER_HOUR
count
limitan el número
de consultas, actualizaciones, y logueos que puede realizar un
usuario durante cualquier perído de una hora. Si
count
es 0 (por defecto), esto
significa que no hay limitación para ese usuario.
La MAX_USER_CONNECTIONS
count
opción,
implementada en MySQL 5.0.3, limita el máximo número de
conexiones simultáneas que la cuenta puede hacer. Si
count
es 0 (por defecto), la
max_user_connections
variable de sistema
determina el número de conexiones simultáneas para la
cuenta.
Nota: para especificar cualquiera de estas opciones de
limitación de recursos para un usuario existente sin afectar
a los permisos existentes, use GRANT USAGE ON *.* ...
WITH MAX_...
.
Consulte Sección 5.7.4, “Limitar recursos de cuentas”.
MySQL puede chequear atributos certificados X509 además que
la autenticación usual que se basa en el nombre de usuario y
contraseña. Para especificar opciones relacionadas con SSL
para la cuenta MySQL, use la cláusula
REQUIRE
del comando
GRANT
. (Para información de transfondo
sobre el uso de SSL con MySQL, consulte
Sección 5.7.7, “Usar conexiones seguras”.)
Hay distintas posibilidades para limitar tipos de conexión para una cuenta:
-
Si una cuenta no tiene requerimientos de SSL o X509, se permiten conexiones sin encriptar si la contraseña y nombre de usuario son válidos. Sin embargo, las conexiones no encriptadas pueden usarse en las opciones de cliente, si el cliente tiene los ficheros clave y de certificado apropiados.
-
La opción
REQUIRE SSL
le dice al servidor que permita sólo conexiones SSL encriptadas para la cuenta. Tenga en cuenta que esta opción puede omitirse si hay algunos registros de control de acceso que permitan conexiones no SSL.mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' -> IDENTIFIED BY 'goodsecret' REQUIRE SSL;
-
REQUIRE X509
significa que el cliente debe tener un certificado válido pero que el certificador exacto y el asunto no importan. El único requerimiento que debe ser posible de verificar es la firma con uno de las AC certificadas.mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' -> IDENTIFIED BY 'goodsecret' REQUIRE X509;
-
REQUIRE ISSUER '
issuer
' crea una restricción de intentos de conexión en que el cliente debe presentar un certificado X509 válido presentado por la ACissuer
. Si el cliente presenta un certificado válido pero de otra AC, el servidor rehúsa la conexión. El uso de certificados X509 siempre implica encripción, por lo que la opciónSSL
no es necesaria.mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' -> IDENTIFIED BY 'goodsecret' -> REQUIRE ISSUER '/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/[email protected]';
Tenga en cuenta que el valor
ISSUER
debe entrarse como una cadena única. -
REQUIRE SUBJECT '
subject
' crea la restricción en los intentos de conexión de que el cliente debe presentar un certificado X509 válido con el asuntosubject
. Si el cliente presenta un certificado válido pero con un asunto distinto, el servidor rehúsa la conexión.mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' -> IDENTIFIED BY 'goodsecret' -> REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/[email protected]';
Tenga en cuenta que el valor
SUBJECT
debe entrarse como una única cadena. -
REQUIRE CIPHER '
cipher
' se necesita para asegurar que se usan cifradores suficientemente fuertes y longitudes de claves acordes. SSL por sí mismo puede ser débil si se usan algoritmos antiguos con claves de encriptación cortas. Con esta opción, puede especificar el método de cifrado exacto para permitir una conexión.mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' -> IDENTIFIED BY 'goodsecret' -> REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
Las opciones SUBJECT
,
ISSUER
, y CIPHER
pueden
combinarse en la cláusula REQUIRE
así:
mysql> GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' -> IDENTIFIED BY 'goodsecret' -> REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/[email protected]' -> AND ISSUER '/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/[email protected]' -> AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
Tenga en cuenta que los valores SUBJECT
y
ISSUER
deben entrarse como una única
cadena.
En MySQL 5.0, la palabra clave AND
es
opcional entre las opciones REQUIRE
.
El orden de las opciones no importa, pero no puede especificarse ninguna opción dos veces.
Cuando mysqld arranca, todos los permisos se leen en memoria. Para más detalles, consulte Sección 5.6.7, “Cuándo tienen efecto los camios de privilegios”.
Tenga en cuenta que si usa permisos de tablas o de columnas para un usuario, el servidor examina los permisos de tablas y usuarios para todos los usuarios y esto ralentiza MySQL ligeramente. De forma similar, si limita el número de consultas, actualizaciones o conexiones para cualquier usuario, el servidor debe monitorizar estos valores.
Las mayores diferencias entre las versiones de
GRANT
de MySQL y SQL estándar son:
-
En MySQL, los permisos se asocian con una combinación de nombre de usuario/equipo y no sólo con el usuario.
-
SQL estándar no tienen permisos globales o a nivel de base de datos, ni soporta todos los tipos de permisos que soporta MySQL .
-
MySQL no soporta los permisos de SQL estándar
TRIGGER
oUNDER
. -
Los permisos de SQL estándar se estructuran de forma jerárquica. Si borra un usuario, todos los permisos que tuviera el usuario se eliminan. Esto es cierto a partir de MySQL 5.0.2 y si usa
DROP USER
. Antes de 5.0.2, los permisos otorgados no se eliminaban automáticamente; debía hacerlo a mano. Consulte Sección 13.5.1.2, “Sintaxis deDROP USER
”. -
En SQL estándar, cuando borra una tabla, todos los permisos para la tabla se eliminan. Con SQL estándar, cuando quita un permiso, todos los permisos otorgados basados en ese permiso también se eliminaban. En MySQL, los permisos sólo pueden borrarse con comandos
REVOKE
explícitos o manipulando las tablas de permisos de MySQL. -
En MySQL, es posible tener el permiso
INSERT
sólo para algunas de las columnas en la tabla. En este caso, todavía puede ejecutar comandosINSERT
en la tabla mientras omita esas columnas para las que no tiene el permisoINSERT
. Las columnas omitidas obtienen su valor por defecto implícito si no está activado el modo SQL estricto. En modo estricto, el comando se rehúsa si algunas de las columnas omitidas no tienen valor por defecto. Sección 5.3.2, “El modo SQL del servidor” discute acerca del modo estricto. Sección 13.1.5, “Sintaxis deCREATE TABLE
” disctue acerca de los valores por defecto implícitos.Las columnas para las que no tiene el permiso
INSERT
se ponen a su valor por defecto. SQL estándar requiere que tenga el permisoINSERT
en todas las columnas.En MySQL, si tiene el permiso INSERT sólo en alguna de las columnas de la tabla, puede ejecutar comandos INSERT — mientras omita las columnas para las que no tiene el permiso de su comando INSERT; tales columnas obtendrán su valor por defecto. En modo estricto (cuando sql_mode="traditional"), si alguna de las columnas omitidas no tiene valor por defecto, el comando INSERT se rehúsa.
RENAME USERold_user
TOnew_user
[,old_user
TOnew_user
] ...
El comando RENAME USER
renombra cuentas de
usuario MySQL existentes. Para usarlo, debe tener el permiso
CREATE USER
global o el permiso
UPDATE
para la base de datos
mysql
. Ocurre un error si cualquier de las
antiguas cuentas no existe o cualquiera de las nuevas ya
existe. Los valores old_user
y
new_user
se dan igual que para el
comando GRANT
.
El comando RENAME USER
se añadió en MySQL
5.0.2.
SET PASSWORD = PASSWORD('some password
') SET PASSWORD FORuser
= PASSWORD('some password
')
El comando SET PASSWORD
asigna una
contraseña a una cuenta de usuario MySQL existente.
La primera sintaxis asigna la contraseña para el usuario actual. Cualquier cliente que se conecte al servidor usando una cuenta no anónima puede cambiar la contraseña para la misma.
La segunda sintaxis asigna una contraseña para una cuenta
específica en el servidor actual. Sólo los clientes con el
permiso UPDATE
para la base de datos
mysql
pueden hacerlo. El valor
user
debe darse en formato
user_name
@host_name
donde user_name
y
host_name
son exactamente los
mismos que cuando se listan en las columnas
User
y Host
de la tabla
mysql.user
. Por ejemplo, si tiene una
entrada en las columnas User
y
Host
con los valores
'bob'
y '%.loc.gov'
,
escribiría el comando así:
mysql> SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass
');
Esto es equivalente al siguiente comando:
mysql> UPDATE mysql.user SET Password=PASSWORD('newpass
')
-> WHERE User='bob' AND Host='%.loc.gov';
mysql> FLUSH PRIVILEGES;
Nota: Si se está conectando
a un servidor MySQL 4.1 o posterior usando programas clientes
anteriores a la 4.1, no use los comandos SET
PASSWORD
o UPDATE
precedentes sin
leer Sección 5.6.9, “Hashing de contraseñas en MySQL 4.1” primero. El formato de
contraseña cambió en MySQL 4.1, y bajo ciertas
circunstáncias, puede que no sea capaz de conectar al
servidor.
En MySQL 5.0, puede ver su entrada de autenticación
user@host
ejecutando SELECT
CURRENT_USER()
.
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name
[,tbl_name
] ...
Este comando analiza y almacena la distribución de clave para
una tabla. Durante el análisis, la tabla se bloquea con un
bloqueo de lectura. En MySQL 5.0, funciona en tablas
MyISAM
, BDB
, y
InnoDB
. Para tablas
MyISAM
, este comando es equivalente a usar
myisamchk -a.
MySQL usa la distribución de claves almacenada para decidir el orden en que las tablas deben hacer los joins cuando realiza uno en algo que no sea una constante.
El comando retorna una tabla con las siguientes columnas:
Columna | Valor |
Tabla
|
Nombre de tabla |
Op
|
Siempre analyze |
Msg_type
|
Es status , error ,
info , o warning |
Msg_text
|
Mensaje |
Puede chequear la distribución de claves almacenada con el
comando SHOW INDEX
. Consulte
Sección 13.5.4.11, “Sintaxis de SHOW INDEX
”.
Si la tabla no ha cambiado desde el último comando
ANALYZE TABLE
, la tabla no se vuelve a
analizar.
En MySQL 5.0, los comandos ANALYZE TABLE
se
escriben en el log binario a no ser que la palabra clave
NO_WRITE_TO_BINLOG
opcional (o su alias
LOCAL
) se use.
BACKUP TABLEtbl_name
[,tbl_name
] ... TO '/path/to/backup/directory
'
Nota: Este comando está obsoleto. Estamos trabajano en un mejor sustituto para este que proporcionará capacidades de copia de seguridad en línea. De momento, el script mysqlhotcopy puede usarse.
BACKUP TABLE
copia al directorio de base de
datos el mínimo número de ficheros de tablas necesarias para
restaurar la tabla, tras volcar cualquier cambios almacenados
en el buffer a disco. El comando funciona sólo para tablas
MyISAM
. Copia los ficheros de definición
.frm
y de datos .MYD
. El fichero índice .MYI
puede
reconstruirse desde estos otros. El directorio debe
especificarse con la ruta entera.
Antes de usar este comando consulte Sección 5.8.1, “Copias de seguridad de bases de datos”.
Durante la copia de seguridad, se realiza un bloqueo de
lectura para cada tabla, uno cada vez, mientras se hace la
copia. Si quier hacer una copia de seguridad de varias tablas
como una muestra (evitando que ninguna de ellas se cambie
durante la operación de la copia de seguridad), debe realizar
un comando LOCK TABLES
para obtener un
bloqueo de lectura para cada tabla en el grupo.
El comando retorna una tabla con las siguientes columnas:
Columna | Valor |
Tabla
|
Nombre de tabla |
Op
|
Siempre backup |
Msg_type
|
Es status , error ,
info , o warning |
Msg_text
|
Mensaje |
CHECK TABLEtbl_name
[,tbl_name
] ... [option
] ...option
= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
Chequea una tabla o tablas para errores. CHECK
TABLE
funciona para tablas MyISAM
y InnoDB
. Para tablas
MyISAM
, la estadística de clave se
actualiza.
Desde MySQL 5.0.2, CHECK TABLE
puede
chequear las vistas para problemas, tales como tablas que se
referencian en la definición de la vista que ya no existe.
El comando CHECK TABLE
retorna una tabla
con las siguientes columnas:
Columna | Valor |
Tabla
|
Nombre de tabla |
Op
|
Siempre check |
Msg_type
|
Es status , error ,
info , o warning |
Msg_text
|
Mensaje |
Tenga en cuenta que el comando puede producir varios registros
para información de cada tabla chequeada. El último registro
tiene un valor Msg_type
de
status
y Msg_text
normalmente debe ser OK
. Si no obtiene
OK
, o Table is already up to
date
debe realizar una reparación de la tabla.
Consulte Sección 5.8.3, “Mantenimiento de tablas y recuperación de un fallo catastrófico (crash)”. Table
is already up to date
significa que el motor de
almacenamiento para la tabla indicada indica que no hay
necesidad de chequear la tabla.
Las distintas opciones de chequeo que pueden darse se muestran
en la siguiente tabla. Estas opciones se aplican sólo para
tablas MyISAM
y se ignoran en tablas
InnoDB
y vistas.
Tipo | Significado |
QUICK
|
No escanea los registros para chequear enlaces incorrectos. |
FAST
|
Sólo chequea tablas que no se han cerrado correctamente. |
CHANGED
|
Sólo las tablas chequeadas que se han cambiado desde el úlitmo chequeo o no se han cerrado correctamente. |
MEDIUM
|
Escanea registros para verificar que los enlaces borrados están bien. También calcula el checksum de la clave para los registros y lo verifica con el checksum calculado para las claves. |
EXTENDED
|
Realiza una búsqueda completa para todas las claves para cada registro. Se asegura que la tabla es consistente 100%, pero tarda mucho tiempo! |
Si ninguna de las opciones QUICK
,
MEDIUM
, o EXTENDED
se
especifica, el tipo de chequeo por defecto para tablas de
formato dinámico MyISAM
es
MEDIUM
. Esto es lo mismo que ejecutar
myisamchk --medium-check
tbl_name
en la tabla. El
tipo de chequeo por defecto también es
MEDIUM
para tablas
MyISAM
de formato estático, a no ser que
se especifique CHANGED
o
FAST
. En tal caso, por defecto es
QUICK
. El escaneo de registro se evita para
CHANGED
y FAST
porque
los registros están corruptos muy raramente.
Puede combinar opciones de chequeo, como en el siguiente ejemplo, que realiza un chequeo rápido de la tabla para ver si se cerró correctamente:
CHECK TABLE test_table FAST QUICK;
Nota: En algunos casos,
CHECK TABLE
cambia la tabla. Esto ocurre si
la tabla se marca como “corrupted” o “not
closed properly” pero CHECK TABLE
no
encuentra ningún problema en la tabla. En este caso,
CHECK TABLE
marca la tabla como correcta.
Si una tabla está corrupta, es más probable que el problema esté en el índice y no en la parte de datos. Todos los tipos de chequeo chequean los índices profundamente y deberían encontrar la mayoría de errores.
Si quiere chequear una tabla que asume como correcta, no debe
usar opciones de chequeo o la opción
QUICK
. Ésta debe usarse cuando tiene prisa
y puede permitirse el pequeño riesgo que
QUICK
no encuentre un error en el fichero
de datos. (En la mayoría de casos, MySQL debería encontrar,
bajo uso normal, cualquier error en el fichero de datos. Si
esto ocurre, la tabla se marca como “corrupted” y
no puede usarse hasta que se repare.)
FAST
y CHANGED
están
pensados para usar desde un script (por ejemplo, para
ejecutarse desde cron) si quiere chequear
sus tablas de vez en cuando. En la mayoría de casos,
FAST
se prefiere en lugar de
CHANGED
. (El único caso en que no es el
método preferido es cuando sospecha que ha encontrado un bug
en el código MyISAM
.)
EXTENDED
debe usarse sólo después de
ejecutar un chequeo normal pero todavía obtiene errores
extraños de la tabla cuando MySQL intenta actualizar un
registro o encuentra un registro mediante la clave. (Esto es
muy improbable si un chequeo normal ha tenido éxito.)
Algunos problemas reportados por CHECK
TABLE
no pueden corregirse automáticamente:
-
Found row where the auto_increment column has the value 0
.Esto significa que tiene un registro en la tabla donde la columna
AUTO_INCREMENT
contiene un valor de índice de 0. (Es posible crear un registro donde la columnaAUTO_INCREMENT
es 0 poneindo la columna explícitamente a 0 con un comandoUPDATE
.)Esto no es un error por si mismo, pero puede causar problemas si decide volcar la tabla y restaurarla o realizar un
ALTER TABLE
en la tabla. En este caso, la columnaAUTO_INCREMENT
cambia los valores según las reglas de las columnasAUTO_INCREMENT
, que pueden causar problemas tales como errores de clave duplicada.Para evitar las advertencias, símplemente ejecute un comando
UPDATE
para poner en la columna un valor distinto a 0.
CHECKSUM TABLEtbl_name
[,tbl_name
] ... [ QUICK | EXTENDED ]
Reporta un checksum de tabla.
Si QUICK
se especifica, el checksum de la
tabla se reporta si está disponible, o
NULL
en otro caso. Esto es muy rápido. Un
checksum en vivo está permitido especificando la opción de
tabla CHECKSUM=1
, actualmente sólo
soportado por tablas MyISAM
. Consulte
Sección 13.1.5, “Sintaxis de CREATE TABLE
”.
En modo EXTENDED
la tabla completa se lee
registro a registro y se calcula el checksum. Esto puede ser
muy lento para tablas grandes.
Por defecto, si no se especifica ni QUICK
ni EXTENDED
, MySQL retorna un checksum en
vivo si el motor de tabla lo soporta y escanea la tabla de
otro modo.
CHECKSUM TABLE
retorna
NULL
para tablas no existentes. Desde MySQL
5.0.3, se genera una advertencia para esta condición.
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name
[,tbl_name
] ...
OPTIMIZE TABLE
debe usarse si ha borrado
una gran parte de la tabla o si ha hecho varios cambios en una
tabla con registros de longitud variable (tablas que tienen
columnas VARCHAR
, BLOB
,
o TEXT
). Los registros borrados se
mantienen en una lista enlazada y operaciones
INSERT
posteriores reúsan posiciones de
antiguos registros. Puede usar OPTIMIZE
TABLE
para reclamar el usuario no usado y para
defragmentar el fichero de datos.
En la mayoría de inicializaciones, no necesita ejecutar
OPTIMIZE TABLE
para nada. Incluso si hace
muchas actualizaciones a registros de longitud variables, no
es probable que necesite hacerlo más de una vez a la semana o
mes y sólo en ciertas tablas.
Actualmente, OPTIMIZE TABLE
funciona sólo
en tablas MyISAM
, BDB
y
InnoDB
.
Para tablas MyISAM
, OPTIMIZE
TABLE
funciona como sigue:
-
Si la tabla ha borrado o dividido registros, repare la tabla.
-
Si las páginas índice no están ordenadas, ordénelas.
-
Si las estadísticas no están actualizadas (y la reparación no puede hacerse ordenando el índice), actualícelas.
Para tablas BDB
, OPTIMIZE
TABLE
es mapea como ANALYZE
TABLE
. Para tablas InnoDB
, se
mapea con ALTER TABLE
, que reconstruye la
tabla. Reconstruye las estadísticas actualizadas de índice y
libera espacio no usado en el índice clusterizado. Consulte
Sección 13.5.2.1, “Sintaxis de ANALYZE TABLE
”.
Puede hacer que OPTIMIZE TABLE
funcione con
otros tipos de tabla arrancando mysqld con
la opción --skip-new
o
--safe-mode
; en este caso
OPTIMIZE TABLE
se mapea con ALTER
TABLE
.
Tenga en ceunta que MySQL bloquea la tabla mientras se ejecuta
OPTIMIZE TABLE
.
En MySQL 5.0, los comandos OPTIMIZE TABLE
se escriben en el log binario a no ser que la palabra
NO_WRITE_TO_BINLOG
opcional(o su alias
LOCAL
) se use. Esto se hace para que los
comandos OPTIMIZE TABLE
se usen en MySQL
server actuando como maestro de replicación se replique por
defecto en el esclavo de replicación.
REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLEtbl_name
[,tbl_name
] ... [QUICK] [EXTENDED] [USE_FRM]
REPAIR TABLE
repara una tabla posiblemente
corrupta. Por defecto, tiene el mismo efecto que
myisamchk --recover
tbl_name
. REPAIR
TABLE
funciona sólo en tablas
MyISAM
.
Normalmente nunca debe ejecutar este comando. Sin embargo, si
hay un desastre, REPAIR TABLE
puede
recuperar todos los datos de una tabla
MyISAM
. Si sus tablas se corrompen a
menudo, debe intentar encontrar la razón de lo que lo causa,
para eliminar la necesidad de usar REPAIR
TABLE
. Consulte Sección A.4.2, “Qué hacer si MySQL sigue fallando (crashing)”. Consulte
Sección 14.1.4, “Problemas en tablas MyISAM
”.
El comando retorna una tabla con las siguientes columnas:
Columna | Valor |
Tabla
|
Nombre de tabla |
Op
|
Siempre es repair |
Msg_type
|
Es status , error ,
info , o warning |
Msg_text
|
Mensaje |
El comando REPAIR TABLE
puede producir
muchos registros de información para cada tabla reparada. El
último registro tiene un valor Msg_type
de
status
y Msg_test
normalmente debe ser OK
. Si no obtiene
OK
, debe intentar reparar la tabla con
myisamchk --safe-recover, ya que
REPAIR TABLE
no implementa todas las
opciones de myisamchk. Plaenamos hacerlo
más flexible en el futuro.
Si se da QUICK
, REPAIR
TABLE
intenta reparar sólo el árbol índice. Este
tipo de reparación es como lo que hace myisamchk
--recover --quick.
Si usa EXTENDED
, MySQL crea el índice
registro a registro en lugar de crear un índice a la vez
ordenando. Este tipo de reparación es como el hecho por
myisamchk --safe-recover.
También hay un modo USE_FRM
disponible en
MySQL 5.0 para REPAIR TABLE
. Use esto si el
fichero índice .MYI
no existe o su
cabecera está corrupta. En este modo, MySQL recrea el fichero
.MYI
usando información desde el fichero
.frm
. Este tipo de reparación no puede
hacerse con myisamchk.
Nota: Use este modo
sólo si no puede usar modos
REPAIR
normalmente. La cabecera
.MYI
contiene información importante de
metadatos (en particular, los valores actuales
AUTO_INCREMENT
y Delete
link
) que se pierden en REPAIR ...
USE_FRM
. No use USE_FRM
si la
tabla está comprimida, ya que esta información se almacena
en el fichero .MYI
.
En MySQL 5.0, los comandos REPAIR TABLE
se
escriben en el log binario a no ser que la palabra opcional
NO_WRITE_TO_BINLOG
(o su alias
LOCAL
) se use.
Atención: Si el servidor
muere durante una operación REPAIR TABLE
,
es esencial tras restaurarla que inmediatamente ejecute otro
comando REPAIR TABLE
para la tabla antes de
realizar cualquier otra operación en ella. (Siempre es una
buena idea empezar haciendo una copia de seguridad.) En el
peor caso, puede tener un nuevo fichero índice limpio sin
información acerca del fichero de datos, y luego la siguiente
operación que realice puede sobreescribir el fichero de
datos. Este es un escenario improbable pero posible.
RESTORE TABLEtbl_name
[,tbl_name
] ... FROM '/path/to/backup/directory
'
Restaura la tabla o tablas de una copia de seguridad que se
hizo con BACKUP TABLE
. Las tablas
existentes no se sobreescriben; si trata restaurar una tabla
existente, obtiene un error. Pero como BACKUP
TABLE
, RESTORE TABLE
actualmente
funciona sólo para tablas MyISAM
. El
directorio debe especificarse como una ruta completa.
La copia de seguridad para cada tabla consiste en su fichero
de formato .frm
y fichero de datos
.MYD
. La operación de restauración
restaura aquellos ficheros, luego los usa para reconstruir el
fichero índice .MYI
. La restauración
tarda más tiempo que la copia de seguridad debido a la
necesidad de reescribir los índices. Mientras más índices
tenga la tabla, más tarda.
El comando retorna una tabla con las siguientes columnas:
Columna | Valor |
Tabla
|
Nombre de tabla |
Op
|
Siempre restore |
Msg_type
|
Es status , error ,
info , o warning |
Msg_text
|
Mensaje |
SETvariable_assignment
[,variable_assignment
] ...variable_assignment
:user_var_name
=expr
| [GLOBAL | SESSION]system_var_name
=expr
| @@[global. | session.]system_var_name
=expr
SET
inicializa distintos tipos de variables
que afectan la operación del servidor o de su cliente. Puede
usarse para asignar valores a las variables de usuario o de
sistema.
El comando SET PASSWORD
para asignar
contraseñas de cuenta se describen en
Sección 13.5.1.5, “Sintaxis de SET PASSWORD
”.
La mayoría del sistema puede cambiarse en tiempo de ejecución. Las variables de sistema que pueden describirse dinámicamente se describen en Sección 5.3.3.1, “Variables de sistema dinámicas”.
Nota: Las versiones antiguas de MySQL
empleaban SET OPTION
para este comando, pero
su uso está obsoleto en favor de SET
.
El siguiente ejemplo muestra las distintas sintaxis que puede usar para cambiar las variables.
Una variable de usuario se escribe como
@
var_name
y puede
cambiarse como sigue:
SET @var_name
=expr
;
Más información sobre variables de usuario se da en Sección 9.3, “Variables de usuario”.
Se puede referir a las variables de sistema en comandos
SET
como var_name
.
El nombre puede ir precedido opcionalmente por
GLOBAL
o @@global.
para
indicar explícitamente que la variable es global, o por
SESSION
, @@session.
, o
@@
para indicar que es una variable de
sesión. LOCAL
y @@local.
son sinónimos para SESSION
y
@@session.
. Si no hay modificador presente,
SET
asigna un valor a la variable de sesión.
La sintaxis
@@
var_name
para
variables de sistema se soporta para hacer la sintaxis de MySQL
compatible con otros sistemas de base de datos.
Si cambia varias variables de sistema en el mismo comando, la
última opción GLOBAL
o
SESSION
usada se usa para variables que no
tienen modo especificado.
SET sort_buffer_size=10000; SET @@local.sort_buffer_size=10000; SET GLOBAL sort_buffer_size=1000000, SESSION sort_buffer_size=1000000; SET @@sort_buffer_size=1000000; SET @@global.sort_buffer_size=1000000, @@local.sort_buffer_size=1000000;
Si cambia una variable de sistema usando
SESSION
(por defecto), el valor queda en
efecto hasta que la sesión actual finaliza o hasta que cambia
la variable con un valor distinto. Si cambia la variable de
sistema usando GLOBAL
, que requiere el
permiso SUPER
, el valor se recuerda y se usa
para nuevas conexiones hasta que el servidor se reinicia. Si
quiere hacer un cambio de variable permanente, debe ponerlo en
un fichero de opciones. Consulte Sección 4.3.2, “Usar ficheros de opciones”.
Para evitar uso incorrecto, MySQL produce un error si usa
SET GLOBAL
con una variable que sólo puede
ser usada con SET SESSION
o si no especifica
GLOBAL
(o @@
) cuando
cambie una variable global.
Si quiere cambiar una variable SESSION
al
valor GLOBAL
o un valor
GLOBAL
al valor de compilación de MySQL por
defecto, puede hacerlo con DEFAULT
. Por
ejemplo, los siguientes dos comandos son idénticos en cambiar
los valores de sesión o max_join_size
al
valor global:
SET max_join_size=DEFAULT; SET @@session.max_join_size=@@global.max_join_size;
Puede obtener una lista de la mayoría de variables de sistema
con SHOW VARIABLES
. (Consulte
Sección 13.5.4.21, “Sintaxis de SHOW VARIABLES
”.) Para obtener un nombre de
variable específico, use una cláusula LIKE
commo se muestra:
SHOW VARIABLES LIKE 'max_join_size'; SHOW GLOBAL VARIABLES LIKE 'max_join_size';
Para obtener una lista de variables cuyos nombres coinciden con
un patrón, use el comodín '%
':
SHOW VARIABLES LIKE 'have%'; SHOW GLOBAL VARIABLES LIKE 'have%';
El comodín puede usarse en cualquier posición dentro del patrón para coincidir.
Puede obtener el valor de un valor específico usando la
sintaxis @@[global.|local.]var_name
con
SELECT
:
SELECT @@max_join_size, @@global.max_join_size;
Cuando recibe una variable con SELECT
@@var_name
(esto es,no especifica
global.
, session.
, o
local.
), MySQL retorna el valor
SESSION
si existe y el valor
GLOBAL
en otro caso.
La siguiente lista describe variables que tienen sintaxis no
estándar o que no se describe en la lista de variables de
sistema que se encuentra en
Sección 5.3.3, “Variables de sistema del servidor”. Aunque estas
variables no se muestran con SHOW VARIABLES
,
puede obtener sus valores con SELECT
(con la
excepción de CHARACTER SET
y SET
NAMES
). Por ejemplo:
mysql> SELECT @@AUTOCOMMIT; +--------------+ | @@autocommit | +--------------+ | 1 | +--------------+
-
AUTOCOMMIT = {0 | 1}
Pone el modo autocommit . Con valor
1
, todos los cambios de una tabla toman efecto inmediatamente. Si se pone a0
, debe usarCOMMIT
para aceptar una transacción oROLLBACK
para cancelarla. Si cambia el modoAUTOCOMMIT
de0
a1
, MySQL realiza unCOMMIT
automático de cualquier transacción abierta . Otra forma de comenzar una transacción es usar un comandoSTART TRANSACTION
oBEGIN
. Consulte Sección 13.4.1, “Sintaxis deSTART TRANSACTION
,COMMIT
yROLLBACK
”. -
Si se pone a
1
, todas las tablas temporales se almacenan en disco en lugar que en memoria. Esto es un poco lento, pero el errorThe table
tbl_name
is full no ocurre para operacionesSELECT
que requieran una tabla temporal grande. El valor por defecto para una nueva conexión es0
(use tablas temporales en memoria). Normalmente, nunca debería necesitar usar esta variable, ya que MySQL 5.0 convierte automáticamente tablas en memoria a tablas en disco como se requiere. (Nota: Esta variable se llamaba préviamenteSQL_BIG_TABLES
.) -
CHARACTER SET {
charset_name
| DEFAULT}Esto mapea todas las cadenas desde y hacia el cliente con el mapeo dado. Puede añadir nuevos mapeos editando
sql/convert.cc
en la distribución fuente MySQL. En MySQL 5.0,SET CHARACTER SET
cambia tres variables de sistemacharacter_set_client
ycharacter_set_results
se actualizan con el conjunto de carácteres dado, ycharacter_set_connection
al valor decharacter_set_database
.El mapeo por defecto puede restaurarse usando el valor
DEFAULT
.Tenga en cuenta que la sintaxis para
SET CHARACTER SET
difiere de la de la mayoría de otras opciones. -
FOREIGN_KEY_CHECKS = {0 | 1}
Con valor de
1
(por defecto), las claves foráneas para tablasInnoDB
se chequean. Si se pone a0
, se ignoran. Deshabilitar el chequeo de clave foránea puede ser útil para recargar tablasInnoDB
en un orden distinto que el requerido por sus relaciones padre/hijo, Consulte Sección 15.6.4, “Restricciones (constraints)FOREIGN KEY
”. -
IDENTITY =
value
La variable es un sinónimo para la variable
LAST_INSERT_ID
. Existe por compatibilidad con otras bases de datos. Puede leer su valor conSELECT @@IDENTITY
, y cambiarlo medianteSET IDENTITY
. -
INSERT_ID =
value
Cambia el valor a ser usado por los comandos
INSERT
oALTER TABLE
al insertar un valorAUTO_INCREMENT
. Esto se usa principalmente con el lob binario. -
LAST_INSERT_ID =
value
Cambia el valor a ser retornado de
LAST_INSERT_ID()
. Esto se almacena en el log binario cuando usaLAST_INSERT_ID()
en un comando que actualice una tabla. Cambiar esta variable no actualiza el valor retornado por la función de lamysql_insert_id()
API de C. -
NAMES {'
charset_name
' | DEFAULT}SET NAMES
cambia tres variables de sesión de sistemacharacter_set_client
,character_set_connection
, ycharacter_set_results
al conjunto de carácteres dado. Cambiarcharacter_set_connection
acharset_name
también cambiacollation_connection
a la colación por defecto paracharset_name
.El mapeo por defecto puede restaurarse usando un valor de
DEFAULT
.Tenga en cuenta que la sintaxis para
SET NAMES
difiere de la usada para la mayoría de otras opciones. -
SQL_NOTES = {0 | 1}
Con el valor 1 (por defecto), advertencias del nivel
Note
se registran. Con valor 0, las advertenciasNote
se suprimen. mysqldump incluye la salida para cambiar esta variable a 0 así que recargar el fichero volcado no produce advertencias para eventos que no afectan a la integridad de la operación de recarga.SQL_NOTES
se añadió en MySQL 5.0.3. -
SQL_AUTO_IS_NULL = {0 | 1}
Con valor
1
(por defecto), puede encontrar el último registro insertado para una tabla que contiene una columnaAUTO_INCREMENT
usando el siguiente constructor:WHERE
auto_increment_column
IS NULLEste comportamiento lo usan algunos programas ODBC, como Access.
-
SQL_BIG_SELECTS = {0 | 1}
Con valor
0
, MySQL aborta los comandosSELECT
que probablemente tardarán mucho tiempo (esto es, comandos para los que el optimizador estima que el número de registros examinados excede el valor demax_join_size
). Esto es útil cuando un comandoWHERE
no aconsejable se ejecuta. El valor por defecto para una nueva conexión es1
, que permite todos los comandosSELECT
.Si cambia la variable de sistema
max_join_size
a un valor distinto aDEFAULT
,SQL_BIG_SELECTS
se pone a0
. -
SQL_BUFFER_RESULT = {0 | 1}
SQL_BUFFER_RESULT
fuerza los resultados de los comandosSELECT
a poner en tablas temporales. Esto ayuda a MySQL a liberar los bloqueos de tabla rápidamente y pueden ser beneficioso en caso que tarde un largo tiempo para enviar resultados al cliente. -
SQL_LOG_BIN = {0 | 1}
Con valor
0
, no se realiza logueo en el log binario para el cliente. El cliente debe tener el permisoSUPER
para cambiar esta opción. -
SQL_LOG_OFF = {0 | 1}
Con valor
1
, no se realiza logueo en el log de consultas generales para el cliente. El cliente debe tener el permisoSUPER
para cambiar esta opción. -
SQL_LOG_UPDATE = {0 | 1}
Esta variable está obsoleta, y es mapea a
SQL_LOG_BIN
. -
SQL_QUOTE_SHOW_CREATE = {0 | 1}
Con valor
1
,SHOW CREATE TABLE
entrecomilla los nombres de tabla y columnas. Si se pone a0
, se desactiva el entrecomillado. Esta opción está activada por defecto, así que la replicación funciona para tablas con nombres de tabla y columna que no lo requieren. Consulte Sección 13.5.4.5, “Sintaxis deSHOW CREATE TABLE
”. -
SQL_SAFE_UPDATES = {0 | 1}
Con valor
1
, MySQL aborta comandosUPDATE
oDELETE
que no usan una clave en la cláusulaWHERE
oLIMIT
. Esto hace posible cazar los comandosUPDATE
oDELETE
donde las claves no se usan apropiadamente y que probablemente cambiarían o borrarían un gran número de registros. -
SQL_SELECT_LIMIT = {
value
| DEFAULT}El máximo número de registros a retornar desde comandos
SELECT
. El valor por defecto para una nueva conexión es “unlimited.” Si cambia este límite, el valor por defecto puede restaurarse usando un valorSQL_SELECT_LIMIT
deDEFAULT
.Si un
SELECT
tiene una cláusulaLIMIT
elLIMIT
tiene preferencia sobre el valor deSQL_SELECT_LIMIT
.SQL_SELECT_LIMIT
no se aplica a comandosSELECT
ejecutados en rutinas almacenadas. Tampoco se aplica a comandosSELECT
que no producen un conjunto de resultados a ser retornado al cliente. Esto incluye comandosSELECT
en subconsultas,CREATE TABLE ... SELECT
, yINSERT INTO ... SELECT
. -
SQL_WARNINGS = {0 | 1}
Esta variable controla si comandos
INSERT
de un registro producen una cadena de información si hay una advertencia. Por defecto es 0. Cambie el valor a 1 para producir una cadena de información. -
TIMESTAMP = {
timestamp_value
| DEFAULT}Cambia la hora del cliente. Se usar para obtener la fecha y hora original si usa el log binario para restaurar registros.
timestamp_value
debe ser un Unix epoch timestamp, no un timestamp de MySQL. -
UNIQUE_CHECKS = {0 | 1}
Con valor
1
(por defecto), se realizan chequeos en tablasInnoDB
para índices secundarios. Con valor0
, no se hacen chequeos de valores únicos para entradas de índices insertados en el búffer de inserción de InnoDB. Si sabe con certeza que sus datos no contienen violaciones de valores únicos, puede ponerlo a 0 para acelerar importaciones de tablas grandes a InnoDB.
SHOW
tiene varias formas que proporcionan
información acerca de bases de datos, tablas, columnas o
información de estado acerca del servidor. Esta sección
describe estos puntos:
SHOW [FULL] COLUMNS FROMtbl_name
[FROMdb_name
] [LIKE 'pattern
'] SHOW CREATE DATABASEdb_name
SHOW CREATE TABLEtbl_name
SHOW DATABASES [LIKE 'pattern
'] SHOW ENGINEengine_name
{LOGS | STATUS } SHOW [STORAGE] ENGINES SHOW ERRORS [LIMIT [offset
,]row_count
] SHOW GRANTS FORuser
SHOW INDEX FROMtbl_name
[FROMdb_name
] SHOW INNODB STATUS SHOW [BDB] LOGS SHOW PRIVILEGES SHOW [FULL] PROCESSLIST SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern
'] SHOW TABLE STATUS [FROMdb_name
] [LIKE 'pattern
'] SHOW [OPEN] TABLES [FROMdb_name
] [LIKE 'pattern
'] SHOW TRIGGERS SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern
'] SHOW WARNINGS [LIMIT [offset
,]row_count
]
El comando SHOW
también tiene formas que
proporcionan información acerca de servidores de replicación
maestros y esclavos y se describen en
Sección 13.6, “Sentencias de replicación”:
SHOW BINLOG EVENTS SHOW MASTER LOGS SHOW MASTER STATUS SHOW SLAVE HOSTS SHOW SLAVE STATUS
En la sintaxis para un comando SHOW
dado
incluye una parte LIKE
'
pattern
' ,
'
pattern
' es una
cadena que puede contener los carácteres de SQL
'%
' y '_
' . El patrón es
útil para restringir la salida del comando para valores
coincidentes.
SHOW CHARACTER SET [LIKE 'pattern
']
El comando SHOW CHARACTER SET
muestra todos
los conjuntos de carácteres disponibles. Esto tiene una
cláusula LIKE
opcional que indica qué
nombres de conjuntos de carácteres hay coincidentes. Por
ejemplo:
mysql> SHOW CHARACTER SET LIKE 'latin%'; +---------+-----------------------------+-------------------+--------+ | Charset | Description | Default collation | Maxlen | +---------+-----------------------------+-------------------+--------+ | latin1 | ISO 8859-1 West European | latin1_swedish_ci | 1 | | latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 | | latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 | | latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 | +---------+-----------------------------+-------------------+--------+
La columna Maxlen
muestra el máximo
número de bytes usados para almacenar un carácter.
SHOW COLLATION [LIKE 'pattern
']
La salida de SHOW COLLATION
incluye todos
los conjuntos de carácteres disponibles. Tiene una cláusula
LIKE
opcional cuyo
pattern
indica qué nombres de
colación coinciden. Por ejemplo:
mysql> SHOW COLLATION LIKE 'latin1%'; +-------------------+---------+----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +-------------------+---------+----+---------+----------+---------+ | latin1_german1_ci | latin1 | 5 | | | 0 | | latin1_swedish_ci | latin1 | 8 | Yes | Yes | 0 | | latin1_danish_ci | latin1 | 15 | | | 0 | | latin1_german2_ci | latin1 | 31 | | Yes | 2 | | latin1_bin | latin1 | 47 | | Yes | 0 | | latin1_general_ci | latin1 | 48 | | | 0 | | latin1_general_cs | latin1 | 49 | | | 0 | | latin1_spanish_ci | latin1 | 94 | | | 0 | +-------------------+---------+----+---------+----------+---------+
La columna Default
indica si una colación
está por defecto para su conjunto de carácteres.
Compiled
indica si el conjunto de
carácteres está compilado en el servidor.
Sortlen
está relacionado con la cantidad
de memoria requerida para ordenar cadenas expresadas en el
conjunto de carácteres.
SHOW [FULL] COLUMNS FROMtbl_name
[FROMdb_name
] [LIKE 'pattern
']
SHOW COLUMNS
muestra información acerca de
las columnas en una tabla dada. También funciona para vistas
desde MySQL 5.0.1.
Si los tipos de columnas difieren de los que espera basados en
su comando CREATE TABLE
, tenga en cuenta
que MySQL a veces cambia tipos de columnas cuando crea o
altera una tabla. Las condiciones en que esto ocurre se
describen en Sección 13.1.5.1, “Cambios tácitos en la especificación de columnas”.
La palabra clave FULL
hace que la salida
incluya los permisos que tiene así como cualquier comentario
por columna para cada columna.
Puede usar db_name.tbl_name
como
alternativa a la sintaxis
tbl_name
FROM
db_name
. En otras
palabras, estos dos comandos son equivalentes:
mysql> SHOW COLUMNS FROM mytable FROM mydb; mysql> SHOW COLUMNS FROM mydb.mytable;
SHOW FIELDS
es un sinónimo para
SHOW COLUMNS
. Puede listar las columnas de
una tabla con el comando mysqlshow
db_name
tbl_name
.
El comando DESCRIBE
proporciona
información similar a SHOW COLUMNS
.
Consulte Sección 13.3.1, “Sintaxis de DESCRIBE
(Información acerca de las columnas)”.
SHOW CREATE {DATABASE | SCHEMA} db_name
Muestra un comando CREATE DATABASE
que crea
la base de datos dada. SHOW CREATE SCHEMA
puede usarse desde MySQL 5.0.2.
mysql> SHOW CREATE DATABASE test\G *************************** 1. row *************************** Database: test Create Database: CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */
SHOW CREATE TABLE tbl_name
Muestra un comando CREATE TABLE
que crea la
tabla dada. Desde MySQL 5.0.1, este comando funciona con
vistas.
mysql> SHOW CREATE TABLE t\G *************************** 1. row *************************** Table: t Create Table: CREATE TABLE t ( id INT(11) default NULL auto_increment, s char(60) default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM
SHOW CREATE TABLE
entrecomilla los nombres
de tabla y columna según el valor de la opción
SQL_QUOTE_SHOW_CREATE
.
Sección 13.5.3, “Sintaxis de SET
”.
SHOW {DATABASES | SCHEMAS} [LIKE 'pattern
']
SHOW DATABASES
lista la base de datos en el
servidor MySQL . Puede obtener esta lista usando el comando
mysqlshow . En MySQL 5.0, ve sólo las
bases de datos para las que tiene alguna clase de permiso, si
no tiene el permiso SHOW DATABASES
.
Si el servidor se arrancó con la opción
--skip-show-database
, no puede usar este
comando a no ser que tenga el permiso SHOW
DATABASES
.
SHOW SCHEMAS
puede usarse desde MySQL 5.0.2
SHOW ENGINE engine_name
{LOGS | STATUS }
SHOW ENGINE
muestra información de log o
estado acerca de motores de almacenamiento. Los siguientes
comandos se soportan actualmente:
SHOW ENGINE BDB LOGS SHOW ENGINE INNODB STATUS
SHOW ENGINE BDB LOGS
muestra información
de estado acerca de ficheros de log BDB
existentes. Retorna los siguientes campos:
-
File
Ruta completa al fichero de log.
-
Type
Tipo del fichero de log (
BDB
para ficheros de log Berkeley DB). -
Status
Estado del fichero de log (
FREE
si el fichero puede borrarse, oIN USE
si el fichero se necesita en el subsistema de transacción)
SHOW ENGINE INNODB STATUS
muestra
información extendida acerca del estado del comando
InnoDB
.
Sinónimos antiguos (ahora obsoletos) para estos comandos son
SHOW [BDB] LOGS
y SHOW INNODB
STATUS
.
SHOW ENGINE
puede usarse desde MySQL 4.1.2.
SHOW [STORAGE] ENGINES
SHOW ENGINES
muestra su información de
estado acerca del motor de almacenamiento. Esto es
particularmente útil para chequear si un motor de
almacenamiento se soporta, o para ver si el motr es.
SHOW TABLE TYPES
es un sinónimo obsoleto.
mysql> SHOW ENGINES\G *************************** 1. row *************************** Engine: MyISAM Support: DEFAULT Comment: Default engine as of MySQL 3.23 with great performance *************************** 2. row *************************** Engine: MEMORY Support: YES Comment: Hash based, stored in memory, useful for temporary tables *************************** 3. row *************************** Engine: HEAP Support: YES Comment: Alias for MEMORY *************************** 4. row *************************** Engine: MERGE Support: YES Comment: Collection of identical MyISAM tables *************************** 5. row *************************** Engine: MRG_MYISAM Support: YES Comment: Alias for MERGE *************************** 6. row *************************** Engine: ISAM Support: NO Comment: Obsolete storage engine, now replaced by MyISAM *************************** 7. row *************************** Engine: MRG_ISAM Support: NO Comment: Obsolete storage engine, now replaced by MERGE *************************** 8. row *************************** Engine: InnoDB Support: YES Comment: Supports transactions, row-level locking, and foreign keys *************************** 9. row *************************** Engine: INNOBASE Support: YES Comment: Alias for INNODB *************************** 10. row *************************** Engine: BDB Support: YES Comment: Supports transactions and page-level locking *************************** 11. row *************************** Engine: BERKELEYDB Support: YES Comment: Alias for BDB *************************** 12. row *************************** Engine: NDBCLUSTER Support: NO Comment: Clustered, fault-tolerant, memory-based tables *************************** 13. row *************************** Engine: NDB Support: NO Comment: Alias for NDBCLUSTER *************************** 14. row *************************** Engine: EXAMPLE Support: NO Comment: Example storage engine *************************** 15. row *************************** Engine: ARCHIVE Support: YES Comment: Archive storage engine *************************** 16. row *************************** Engine: CSV Support: NO Comment: CSV storage engine *************************** 17. row *************************** Engine: FEDERATED Support: YES Comment: Federated MySQL storage engine *************************** 18. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)
Un valor Support
indica si el motor se
soporta, y cuál está activo por defecto. Por ejemplo, si el
servidor se arranca con la opción
--default-table-type=InnoDB
, el valor
Support
para el registro
InnoDB
tiene el valor
DEFAULT
.
SHOW ERRORS [LIMIT [offset
,]row_count
] SHOW COUNT(*) ERRORS
Este comando es similar a SHOW WARNINGS
,
excepto que en lugar de mostrar errores, advertencias, y notas
sólo muestra errores.
La cláusula LIMIT
tiene la misma sintaxis
que para el comando SELECT
. Consulte
Sección 13.2.7, “Sintaxis de SELECT
”.
El comando SHOW COUNT(*) ERRORS
muestra el
número de errores. Puede recibir este número de la variable
error_count
:
SHOW COUNT(*) ERRORS; SELECT @@error_count;
Para más información consulte
Sección 13.5.4.22, “Sintaxis de SHOW WARNINGS
”.
SHOW GRANTS FOR user
Este comando lista el comando GRANT
que
debe realizarse para duplicar los permisos para una cuenta de
usuario MySQL.
mysql> SHOW GRANTS FOR 'root'@'localhost'; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+
Para listar los permisos de la sesión actual, puede usar cualquiera de los siguientes comandos:
SHOW GRANTS; SHOW GRANTS FOR CURRENT_USER; SHOW GRANTS FOR CURRENT_USER();
SHOW INDEX FROMtbl_name
[FROMdb_name
]
SHOW INDEX
retorna información de índice
de tabla en un formato que recuerda la llamada
SQLStatistics
en ODBC.
SHOW INDEX
returna los siguientes campso:
-
Table
Nombre de tabla.
-
Non_unique
0 si el índice no puede contener duplicados, 1 si puede.
-
Key_name
Nombre del índice
-
Seq_in_index
Número de secuencia de columna en el índice, comenzando con 1.
-
Column_name
Nombre de columna.
-
Collation
Cómo se ordena la columan en el índice. En MySQL, puede tener valores '
A
' (Ascendente) oNULL
(No ordenado). -
Cardinality
Número de valores únicos en el índice. Se actualiza ejecutando
ANALYZE TABLE
o myisamchk -a.Cardinality
se cuenta basándose en las estadísticas almacenadas como enteros, así que no es necesariamente precisa para tablas pequeñas. Mientras más grande sea, más grande es la probabilidad que MySQL use el índice al hacer joins. -
Sub_part
Número de carácteres indexados si la columna sólo está indexada parcialmente.
NULL
si la columna entera está indexada. -
Packed
Indica cómo está empaquetada la clave.
NULL
si no lo está. -
Null
Contiene
YES
si la columna puede contenerNULL
. Si no, la columna contieneNO
desde MySQL 5.0.3, y''
antes. -
Index_type
Método de índice usado (
BTREE
,FULLTEXT
,HASH
,RTREE
). -
Comment
Comentarios varios.
Puede usar db_name.tbl_name
como
alternativa para la sintaxis
tbl_name
FROM
db_name
. Estos dos
comandos son equivalentes:
mysql> SHOW INDEX FROM mytable FROM mydb; mysql> SHOW INDEX FROM mydb.mytable;
SHOW KEYS
es sinónimo para SHOW
INDEX
. Puede listar los índices de una tabla con el
comando mysqlshow -k
db_name
tbl_name
.
SHOW INNODB STATUS
En MySQL 5.0, este es un sinónimo obsoleto para SHOW
ENGINE INNODB STATUS
. Consulte
Sección 13.5.4.7, “Sintaxis de SHOW ENGINE
”.
SHOW [BDB] LOGS
En MySQL 5.0, este es un sinónimo obsoleto para SHOW
ENGINE BDB LOGS
. Consulte
Sección 13.5.4.7, “Sintaxis de SHOW ENGINE
”.
SHOW OPEN TABLES
SHOW OPEN TABLES
lista las tablas no
TEMPORARY
abiertas actualmente en la caché
de tablas. Consulte Sección 7.4.8, “Cómo abre y cierra tablas MySQL”.
SHOW OPEN TABLES
returna los siguientes
campos:
-
Database
La base de datos que contiene la tabla.
-
Table
Nombre de tabla.
-
In_use
Número de veces que la tabla está en uso para consultas. Si el contador es cero, la tabla está abierta, pero no está siendo usada.
-
Name_locked
Si un nombre de tabla está bloqueado. El bloqueo de nombres se usa para operaciones tales como borrar o renombrar tablas.
SHOW OPEN TABLES
se añadió en MySQL
3.23.33.
SHOW PRIVILEGES
SHOW PRIVILEGES
muestra la lista de
permisos de sistema que soporta MySQL server. La salida exacta
depende de la versión de su servidor.
mysql> SHOW PRIVILEGES\G *************************** 1. row *************************** Privilege: Alter Context: Tables Comment: To alter the table *************************** 2. row *************************** Privilege: Alter routine Context: Functions,Procedures Comment: To alter or drop stored functions/procedures *************************** 3. row *************************** Privilege: Create Context: Databases,Tables,Indexes Comment: To create new databases and tables *************************** 4. row *************************** Privilege: Create routine Context: Functions,Procedures Comment: To use CREATE FUNCTION/PROCEDURE *************************** 5. row *************************** Privilege: Create temporary tables Context: Databases Comment: To use CREATE TEMPORARY TABLE *************************** 6. row *************************** Privilege: Create view Context: Tables Comment: To create new views *************************** 7. row *************************** Privilege: Create user Context: Server Admin Comment: To create new users *************************** 8. row *************************** Privilege: Delete Context: Tables Comment: To delete existing rows *************************** 9. row *************************** Privilege: Drop Context: Databases,Tables Comment: To drop databases, tables, and views *************************** 10. row *************************** Privilege: Execute Context: Functions,Procedures Comment: To execute stored routines *************************** 11. row *************************** Privilege: File Context: File access on server Comment: To read and write files on the server *************************** 12. row *************************** Privilege: Grant option Context: Databases,Tables,Functions,Procedures Comment: To give to other users those privileges you possess *************************** 13. row *************************** Privilege: Index Context: Tables Comment: To create or drop indexes *************************** 14. row *************************** Privilege: Insert Context: Tables Comment: To insert data into tables *************************** 15. row *************************** Privilege: Lock tables Context: Databases Comment: To use LOCK TABLES (together with SELECT privilege) *************************** 16. row *************************** Privilege: Process Context: Server Admin Comment: To view the plain text of currently executing queries *************************** 17. row *************************** Privilege: References Context: Databases,Tables Comment: To have references on tables *************************** 18. row *************************** Privilege: Reload Context: Server Admin Comment: To reload or refresh tables, logs and privileges *************************** 19. row *************************** Privilege: Replication client Context: Server Admin Comment: To ask where the slave or master servers are *************************** 20. row *************************** Privilege: Replication slave Context: Server Admin Comment: To read binary log events from the master *************************** 21. row *************************** Privilege: Select Context: Tables Comment: To retrieve rows from table *************************** 22. row *************************** Privilege: Show databases Context: Server Admin Comment: To see all databases with SHOW DATABASES *************************** 23. row *************************** Privilege: Show view Context: Tables Comment: To see views with SHOW CREATE VIEW *************************** 24. row *************************** Privilege: Shutdown Context: Server Admin Comment: To shut down the server *************************** 25. row *************************** Privilege: Super Context: Server Admin Comment: To use KILL thread, SET GLOBAL, CHANGE MASTER, etc. *************************** 26. row *************************** Privilege: Update Context: Tables Comment: To update existing rows *************************** 27. row *************************** Privilege: Usage Context: Server Admin Comment: No privileges - allow connect only
SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST
le muestra qué flujos
están en ejecución. Puede obtener esta información usando
el comando mysqladmin processlist . Si
tiene el permiso SUPER
, puede ver todos
los flujos. De otro modo, puede ver sólo los propios (esto
es, flujos asociados con la cuenta MySQL que está usando).
Consulte Sección 13.5.5.3, “Sintaxis de KILL
”. Si no usa la palabra clave
FULL
, sólo los primeros 100 carácteres
de cada consulta se muestran.
En MySQL 5.0, el comando reporta el nombre de equipo ara
conexiones TCP/IP en formato
host_name
:client_port
para hacer más fácil determinar qué hace cada cliente.
Este comando es útil si obtiene el mensaje de error
"demasiadas conexiones" para encontrar qué ocurre. MySQL
reserva una conexión extra para usar por cuentas con el
permiso SUPER
, para asegurar que el
administrador siempre es capaz de conectar y comprobar el
sistema (asumiendo que no da este permiso a todos los
usuarios).
Algunos estados vistos comúnmente en la salida de
SHOW PROCESSLIST
:
-
Checking table
El flujo está realizando un chequeo (automático) de la tabla.
-
Closing tables
Significa que el flujo está volcando los datos que han cambiado de la tabla a disco y cerrando las tablas usadas. Esto debe ser una operación rápido. Si no lo es, debe verificar que no tiene el disco lleno y que el disco no tiene un uso muy pesado.
-
Connect Out
Esclavo conectando con el maestro.
-
Copying to tmp table on disk
El conjunto de resultados temporal era mayor que
tmp_table_size
y el flujo está cambiando la tabla temporal de memoria a disco para ahorrar memoria. -
Creating tmp table
El flujo está creando una tabla temporal para guardar parte del resultado de una consulta.
-
deleting from main table
El servidor está ejecutando la primera parte de un borrado de tablas múltiple y borrando sólo la primera tabla.
-
deleting from reference tables
El servidor está ejecutando la segunda parte de un borrado de tablas múltiples y borrando los registros coincidentes de las otras tablas.
-
Flushing tables
El flujo está ejecutando
FLUSH TABLES
y espera a que todos los flujos cierren sus tablas. -
Killed
Alguien ha enviado un comando
KILL
al flujo y debería abortar en cuanto chequee el flag kill. El flag se chequea en cada vuelta al bucle principal de MySQL, pero en algunos casos puede tardar algo de tiempo en que muera el flujo. Si el flujo está bloqueado por algún otro flujo, el kill tiene efecto en cuanto el otro flujo libera el bloqueo. -
Locked
La consulta está bloqueada por otra consulta.
-
Sending data
El flujo está procesando registros para un comando
SELECT
y también enviando datos al cliente. -
Sorting for group
El flujo está ordenando para un
GROUP BY
. -
Sorting for order
El flujo está ordenando para un
ORDER BY
. -
Opening tables
El flujo está intentando abrir una tabla. Esto debería ser un proceso muy rápido, a no ser que algo importante evite la abertura. Por ejemplo, un comando
ALTER TABLE
oLOCK TABLE
puede evitar abrir una tabla hasta que el comando acabe. -
Removing duplicates
La consulta usaba
SELECT DISTINCT
de forma que MySQL no podía optimizar las distintas operaciones en una fase temprana. Debido a ello, MySQL necesita una fase extra para borrar todos los registros duplicados antes de enviar el resultado al cliente. -
Reopen table
El flujo obtivo un bloqueo para la tabla, pero se dio cuenta tras obtenerlo que la estructura de la tabla cambió. Se libera el bloqueo, cierra la tabla y trata de reabrirla.
-
Repair by sorting
El código de reparación está usando una ordenación para crear índices.
-
Repair with keycache
El código de reparación está usando creación de claves una a una en la caché de claves. Esto es mucho más lento que
Repair by sorting
. -
Searching rows for update
El flujo hace una primera fase para encontrar todos los registro coincidentes antes de actualizarlos. Esto debe hacerse si
UPDATE
está cambiando el índice que se usa para encontrar los registros implicados. -
Sleeping
El flujo espera que el cliente envíe un nuevo comando .
-
System lock
El flujo espera obtener un bloqueo de sistema externo para la tabla. Si no está usando múltiples servidors mysqld accediendo a las mismas tablas, puede deshabilitar los bloqueos de sistema con la opción
--skip-external-locking
. -
Upgrading lock
El handler
INSERT DELAYED
trata de obtener un bloqueo para la tabla para insertar registros. -
Updating
El flujo está buscando registros para actualizar.
-
User Lock
El flujo espera un
GET_LOCK()
. -
Waiting for tables
El flujo obtuvo una notificación que la estructura de la tabla cambió y necesita reabrirla. Sin embargo, para ello, debe esperar a que el resto de flujos cierren la tabla en cuestión.
Esta notificación tiene lugar si otro flujo ha usado
FLUSH TABLES
o uno de los siguientes comandos en la tabla en cuestión:FLUSH TABLES
tbl_name
,ALTER TABLE
,RENAME TABLE
,REPAIR TABLE
,ANALYZE TABLE
, oOPTIMIZE TABLE
. -
waiting for handler insert
El handler
INSERT DELAYED
ha procesado las inserciones pendientes y espera nuevas.
La mayoría de estados se corresponden a operaciones rápidas. Si un flujo está en alguno de ellos varios segundos, puede existir un problema que necesite investigar.
Hay algunos estdos que no se mencionan en la lista precedente, pero varios de ellos son útiles sólo para encontrar fallos en el servidor.
SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern
']
SHOW STATUS
proporciona información de
estado del servidor. Esta información puede obtenerse usando
el comando mysqladmin extended-status .
Aquí se muestra una salida parcial. La lista de variables y sus vallires pueden ser distintos para su servidor. El significado de cada variable se da en Sección 5.3.4, “Variables de estado del servidor”.
mysql> SHOW STATUS; +--------------------------+------------+ | Variable_name | Value | +--------------------------+------------+ | Aborted_clients | 0 | | Aborted_connects | 0 | | Bytes_received | 155372598 | | Bytes_sent | 1176560426 | | Connections | 30023 | | Created_tmp_disk_tables | 0 | | Created_tmp_tables | 8340 | | Created_tmp_files | 60 | ... ... ... | Open_tables | 1 | | Open_files | 2 | | Open_streams | 0 | | Opened_tables | 44600 | | Questions | 2026873 | ... ... ... | Table_locks_immediate | 1920382 | | Table_locks_waited | 0 | | Threads_cached | 0 | | Threads_created | 30022 | | Threads_connected | 1 | | Threads_running | 1 | | Uptime | 80380 | +--------------------------+------------+
Con una cláusula LIKE
, el comando muestra
sólo las variables que coinciden con el patrón:
mysql> SHOW STATUS LIKE 'Key%'; +--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | Key_blocks_used | 14955 | | Key_read_requests | 96854827 | | Key_reads | 162040 | | Key_write_requests | 7589728 | | Key_writes | 3813196 | +--------------------+----------+
Las opciones GLOBAL
y
SESSION
son nuevas en MySQL 5.0.2 Con
GLOBAL
, obtiene los valores de estado para
todas las conexiones a MySQL. Con SESSION
,
obtiene los valores de estado para la conexión actual. Si no
usa estas opciones, por defecto es SESSION
.
LOCAL
es sinónimo de
SESSION
.
Tenga en cuenta que algunas variables de estado sólo tienen
un valor global. Para ellas obtiene el mismo valor para
GLOBAL
y SESSION
.
SHOW TABLE STATUS [FROMdb_name
] [LIKE 'pattern
']
SHOW TABLE STATUS
funciona como
SHOW TABLE
, pero proporciona mucha más
información acerca de cada tabla. Puede obtener esta lista
usando el comando mysqlshow --status
db_name
. Desde MySQL
5.0.1, este comando también muestra información sobre
vistas.
SHOW TABLE STATUS
returna los siguientes
campos:
-
Name
Nombre de tabla.
-
Engine
Motor para la tabla. Antes de MySQL 4.1.2, este valor se llama
Type
. Consulte Capítulo 14, Motores de almacenamiento de MySQL y tipos de tablas. -
Version
Número de versión del fichero
.frm
de la tabla. -
Row_format
Formato de almacenamiento de registros (
Fixed
,Dynamic
,Compressed
,Redundant
,Compact
). Desde MySQL/InnoDB 5.0.3, el formato de tablas InnoDB se reporta comoRedundant
oCompact
. Antes de 5.0.3, las tablas InnoDB siempre están en formatoRedundant
. -
Rows
Número de registros. Algunos motores como
MyISAM
, guardan el número exacto.Para otros motores, como
InnoDB
, este valor es una aproximación y puede variar del valor real hasta de un 40 a 50%. En tales casos, useSELECT COUNT(*)
para obtener el número real de registros.El valor
Rows
esNULL
para tablas en la base de datosINFORMATION_SCHEMA
. -
Avg_row_length
Longitud de registro media.
-
Data_length
Tamaño del fichero de datos.
-
Max_data_length
Máxima longitud del fichero d edatos. Este es el número total de bytes de datos que pueden almacenarse en la tabla dado el tamaño de puntero de datos usado.
-
Index_length
Tamaño de fichero índice.
-
Data_free
Número de bytes reservados no usados.
-
Auto_increment
Siguiente valor
AUTO_INCREMENT
. -
Create_time
Cuándo se creó la tabla .
-
Update_time
Cuándo se actualizó por última vez el fichero de datos.
-
Check_time
Cuándo se chequeó la tabla por última vez.
-
Collation
Conjunto de carácteres y colación de la tabla.
-
Checksum
Valor de checksum en vivo (si hay).
-
Create_options
Opciones extra usadas con
CREATE TABLE
. -
Comment
Comentario usado al crear la tabla (o información de porqué MySQL no puede acceder a la información de tabla).
En el comentario de tabla, las tablas
InnoDB
reportan el espacio libre del
espacio de tabla al que pertenece la tabla. Para una tabla
localizada en el espacio compartido, este es el espacio libre
del espacio de tabla compartido. Si usa múltiples espacios y
la tabla tiene el suyo, el espacio libre es sólo para esa
tabla.
Para tablas MEMORY
(HEAP
) los valores
Data_length
,
Max_data_length
, y
Index_length
aproximan la cantidad real de
memoria reservada. El algoritmo de reserva reserva grandes
cantidades de memoria para reducir el número de operaciones
de reserva.
Para vistas, todos los campos mostrados por SHOW
TABLE STATUS
son NULL
excepto que
Name
indicata el nombre de vista y
Comment
dice view
.
SHOW [FULL] TABLES [FROMdb_name
] [LIKE 'pattern
']
SHOW TABLES
lista las tablas no
TEMPORARY
en una base de datos dada. Puede
obtener esta lista usando el comando mysqlshow
db_name
.
Antes de MySQL 5.0.1, la salida de SHOW
TABLES
contiene una única columna de nombres de
tabla. Desde MySQL 5.0.1, este comando lista cualquier vista
en la base de datos. Desde MySQL 5.0.2, se soporta el
modificador FULL
de forma que SHOW
FULL TABLES
muestra una segunda columna de salida.
Los valores para la segunda columna son BASE
TABLE
para una tabla VIEW
para
una vista.
Nota: Si no tiene permisos
para una tabla, la tabla no se muestra en la salida de
SHOW TABLES
o mysqlshow
db_name.
SHOW TRIGGERS [FROMdb_name
] [LIKEexpr
]
SHOW TRIGGERS
lista los disparadores
definidos en el MySQL server. Se implementó en MySQL 5.0.10.
Para el disparadores ins_sum
como se define
en Sección 20.3, “Utilización de disparadores”, la salida de este comando
es la que se muestra:
mysql> SHOW TRIGGERS LIKE 'acc%'; +---------+--------+---------+-------------------------------+--------+---------+ | Trigger | Event | Table | Statement | Timing | Created | +---------+--------+---------+-------------------------------+--------+---------+ | ins_sum | INSERT | account | SET @sum = @sum + NEW.amount | BEFORE | NULL | +---------+--------+---------+-------------------------------+--------+---------+
Nota: Cuando use una
cláusula LIKE
con SHOW
TRIGGERS
, la expresión a cumplir
(expr
) se compara con el nombre de
la tabla en que se declara el disparador, y no con el nombre
del disparador:
mysql> SHOW TRIGGERS LIKE 'ins%'; Empty set (0.01 sec)
Aquí se muestra una breve explicación de las columnas de la salida de este comando:
-
Trigger
: Nombre del disparador. -
Event
: Evento que invoca el disparador. Debe ser'INSERT'
,'UPDATE'
, o'DELETE'
. -
Table
: La tabla para la que se define el disparador. -
Statement
: Comando a ejecutar cuando se invoca el disparador. Es lo mismo que el texto mostrado en la columnaACTION_STATEMENT
deINFORMATION_SCHEMA.TRIGGERS
. -
Timing
: Puede ser'BEFORE'
o'AFTER'
. -
Created
: Actualmente el valor de esta columna siempre esNULL
.
Debe tener el permiso SUPER
para ejecutar
SHOW TRIGGERS
.
Consulte Sección 22.1.16, “La tabla INFORMATION_SCHEMA TRIGGERS
”.
SHOW [GLOBAL | SESSION] VARIABLES [LIKE 'pattern
']
SHOW VARIABLES
muestra los valores de
algunas variables de sistema de MySQL. Esta información puede
obtenerse usando el comando mysqladmin
variables .
Con la opción GLOBAL
, obtiene los valores
que se usan para nuevas conexiones de MySQL. Con
SESSION
, obtiene los valores que hay en
efecto para la conexión actual. Si no usa estas opciones, por
defecto es SESSION
.
LOCAL
es sinónimo de
SESSION
.
Si los valores por defecto no son adecuados, puede cambiar la
mayoría de variables usando opciones de línea de comandos
cuando mysqld arranca o en tiempo de
ejecución con el comando SET
. Consulte
Sección 5.3.1, “Opciones del comando mysqld” y
Sección 13.5.3, “Sintaxis de SET
”.
La salida parcial se muestra aquí. La lista de variables y sus valores pueden ser distintos para su servidor. El significado de cada variable se da en Sección 5.3.3, “Variables de sistema del servidor”. Información acerca de cómo adecuarlos se proporciona en Sección 7.5.2, “Afinar parámetros del servidor”.
mysql> SHOW VARIABLES; +---------------------------------+---------------------------------------------------------+ | Variable_name | Value | +---------------------------------+---------------------------------------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges | ON | | back_log | 50 | | basedir | / | | bdb_cache_size | 8388600 | | bdb_home | /var/lib/mysql/ | | bdb_log_buffer_size | 32768 | ... ... ... | max_connections | 100 | | max_connect_errors | 10 | | max_delayed_threads | 20 | | max_error_count | 64 | | max_heap_table_size | 16777216 | | max_join_size | 4294967295 | | max_relay_log_size | 0 | | max_sort_length | 1024 | ... ... ... | time_zone | SYSTEM | | timed_mutexes | OFF | | tmp_table_size | 33554432 | | tmpdir | | | transaction_alloc_block_size | 8192 | | transaction_prealloc_size | 4096 | | tx_isolation | REPEATABLE-READ | | updatable_views_with_limit | YES | | version | 5.0.7-beta-Max | | version_bdb | Sleepycat Software: Berkeley DB 4.1.24: (June 11, 2005) | | version_comment | MySQL Community Edition - Max (GPL) | | version_compile_machine | i686 | | version_compile_os | pc-linux-gnu | | wait_timeout | 28800 | +---------------------------------+---------------------------------------------------------+
Con una cláusula LIKE
, el comando muestra
sólo las variables que coinciden con el patrón:
mysql> SHOW VARIABLES LIKE 'have%'; +-----------------------+----------+ | Variable_name | Value | +-----------------------+----------+ | have_archive | NO | | have_bdb | YES | | have_blackhole_engine | YES | | have_compress | YES | | have_crypt | YES | | have_csv | YES | | have_example_engine | YES | | have_federated_engine | YES | | have_geometry | YES | | have_innodb | YES | | have_isam | NO | | have_ndbcluster | DISABLED | | have_openssl | NO | | have_query_cache | YES | | have_raid | NO | | have_rtree_keys | YES | | have_symlink | YES | +-----------------------+----------+
SHOW WARNINGS [LIMIT [offset
,]row_count
] SHOW COUNT(*) WARNINGS
SHOW WARNINGS
muestra los mensajes de
error, advertencia y notas retornadas por el último comando
que haya generado algún mensaje, o nada si el último mensaje
que haya usado una tabla no haya generado mensajes. Un comando
relacionado, SHOW ERRORS
, sólo muestra los
errores. Consulte Sección 13.5.4.9, “Sintaxis de SHOW ERRORS
”.
La lista de mensajes se resetea para cada nuevo comando que use una tabla.
El comando SHOW COUNT(*) WARNINGS
muestra
el número total de errores, advertencias y notas. Puede
recibir este número de la variable
warning_count
:
SHOW COUNT(*) WARNINGS; SELECT @@warning_count;
El valor de warning_count
puede ser mayor
que el número de mensajes mostrados por SHOW
WARNINGS
si la variable de sistema
max_error_count
tiene un valor tan pequeño
que no se almacenen todos los mensajes. Se muestra
posteriormente un ejemplo de cómo puede pasar esto.
La cláusula LIMIT
tiene la misma sintaxis
que para el comando SELECT
. Consulte
Sección 13.2.7, “Sintaxis de SELECT
”.
El servidor MySQL devuelve el número total de errores,
advertencias, y notas que hayan resultado desde el último
comando. Si usa la API de C, este valor puede obtenerse
llamando a mysql_warning_count()
. Consulte
Sección 24.3.3.63, “mysql_warning_count()
”.
Las advertencias se generan para comandos tales como
LOAD DATA INFILE
y comandos DML tales como
INSERT
, UPDATE
,
CREATE TABLE
, y ALTER
TABLE
.
El siguiente comando DROP TABLE
provoca una
nota:
mysql> DROP TABLE IF EXISTS no_such_table; mysql> SHOW WARNINGS; +-------+------+-------------------------------+ | Level | Code | Message | +-------+------+-------------------------------+ | Note | 1051 | Unknown table 'no_such_table' | +-------+------+-------------------------------+
Aquí hay un ejemplo simple que muesta una advertencia de
sintaxis para CREATE TABLE
y advertencias
de conversiones para INSERT
:
mysql> CREATE TABLE t1 (a TINYINT NOT NULL, b CHAR(4)) TYPE=MyISAM; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 1287 Message: 'TYPE=storage_engine' is deprecated, use 'ENGINE=storage_engine' instead 1 row in set (0.00 sec) mysql> INSERT INTO t1 VALUES(10,'mysql'),(NULL,'test'), -> (300,'Open Source'); Query OK, 3 rows affected, 4 warnings (0.01 sec) Records: 3 Duplicates: 0 Warnings: 4 mysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 1265 Message: Data truncated for column 'b' at row 1 *************************** 2. row *************************** Level: Warning Code: 1263 Message: Data truncated, NULL supplied to NOT NULL column 'a' at row 2 *************************** 3. row *************************** Level: Warning Code: 1264 Message: Data truncated, out of range for column 'a' at row 3 *************************** 4. row *************************** Level: Warning Code: 1265 Message: Data truncated for column 'b' at row 3 4 rows in set (0.00 sec)
El máximo número de errores, advertencias y notas a
almacenar se controla mediante la variable de sistema
max_error_count
. Por defecto, su valor es
64. Para cambiar el número de mensajes que quiere almacenar,
cambie el valor de max_error_count
. En el
siguiente ejemplo, el comando ALTER TABLE
produce tres mensajes de advertencia, pero sólo se almacena
uno porque max_error_count
vale 1:
mysql> SHOW VARIABLES LIKE 'max_error_count'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_error_count | 64 | +-----------------+-------+ 1 row in set (0.00 sec) mysql> SET max_error_count=1; Query OK, 0 rows affected (0.00 sec) mysql> ALTER TABLE t1 MODIFY b CHAR; Query OK, 3 rows affected, 3 warnings (0.00 sec) Records: 3 Duplicates: 0 Warnings: 3 mysql> SELECT @@warning_count; +-----------------+ | @@warning_count | +-----------------+ | 3 | +-----------------+ 1 row in set (0.01 sec) mysql> SHOW WARNINGS; +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1263 | Data truncated for column 'b' at row 1 | +---------+------+----------------------------------------+ 1 row in set (0.00 sec)
Para deshabilitar las advertencias, ponga
max_error_count
a 0. En este caso,
warning_count
indica cuántas advertencias
ocurren, pero ninguno de los mensajes se almacenan.
Desde MySQL 5.0.3, puede poner la variable de sesión
SQL_NOTES
a 0 para que las advertencias del
nivel Note
no se guarden.
CACHE INDEXtbl_index_list
[,tbl_index_list
] ... INkey_cache_name
tbl_index_list
:tbl_name
[[INDEX|KEY] (index_name
[,index_name
] ...)]
El comando CACHE INDEX
asigna índices de
tabla a una caché de clave específica. Se usa sólo para
tablas MyISAM
.
El siguiente comando asigna índices de las tablas
t1
, t2
, y
t3
a la caché de claves llamada
hot_cache
:
mysql> CACHE INDEX t1, t2, t3 IN hot_cache; +---------+--------------------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------+--------------------+----------+----------+ | test.t1 | assign_to_keycache | status | OK | | test.t2 | assign_to_keycache | status | OK | | test.t3 | assign_to_keycache | status | OK | +---------+--------------------+----------+----------+
La sintaxis de CACHE INDEX
le permite
especifcar que sólo deben asignarse índicess particulares de
una tabla a la caché. Sin embargo, la implementación actual
asigna todos los índices de la tabla a la caché, así que no
hay razón para especificar nada más que el nombre de tabla.
La caché de clave referenciada en un comando CACHE
INDEX
puede crearse cambiando su tamaño con un
comando que asigne un valor al parámetro o en la
configuración del parámetro del servidor. Por ejemplo:
mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;
Puede accederse a los parámetros de la caché de claves como miembros de una variable de sistema estructurada. Consulte Sección 9.4.1, “Variables estructuradas de sistema”.
Una caché de claves debe existir antes de asignarle índices:
mysql> CACHE INDEX t1 IN non_existent_cache; ERROR 1284 (HY000): Unknown key cache 'non_existent_cache'
Por defecto, los índices de tabla se asignan a la caché de claves principal (por defecto) creada en el arranque del servidor. Cuando se destruye una caché de índices, todos los índices asignados a la misma se asignan de nuevo a la caché por defecto.
Las asignaciones de índices afectan al servidor globalmente: Si un cliente asigna un índice a una caché dada, esta caché se usa para todas las consultas que tengan que ver con el índice, sin importar qué cliente realiza las consultas.
FLUSH [LOCAL | NO_WRITE_TO_BINLOG]flush_option
[,flush_option
] ...
Debe usar el comando FLUSH
si quiere
limpiar algunas de las cachés internas que usa MySQL . Para
ejecutar FLUSH
, debe tener el permiso
RELOAD
.
flush_option
puede ser cualquiera
de los siguientes valores:
-
HOSTS
Vacía las tablas de la caché de equipos. Debe volcar las tablas de equipos si algunos de sus equipos cambia el número IP o si obtiene el mensaje de error
Host ... is blocked
. Cuando ocurren sucesivamente más demax_connect_errors
errores para un equipo dado mientras conecta con el servidor MySQL , MySQL asume que hay algo incorrecto y bloquea el equipo de más peticiones de conexión. Volcar las tablas de equipos le permite al equipo intentar conectar de nuevo. Consulte Sección A.2.5, “Host '
host_name
' is blocked”. Puede arrancar mysqld con--max_connect_errors=999999999
para evitar este mensaje de error. -
DES_KEY_FILE
Recarga las claves DES del fichero que se especifica con la opción
--des-key-file
en tiempo de arranque del servidor. -
LOGS
Cierra y reabre todos los ficheros de log. Si ha especificado un fichero de log de actualizaciones o un fichero de log binario sin una extensión, el número de extensión del fichero de log se incrementa en uno respecto al fichero anterior. Si ha usado una extensión del nombre de fichero, MySQL cierra y reabre el fichero de log. En Unix, esto es lo mismo que enviar una señal
SIGHUP
al servidor mysqld (excepto en algunas versiones Mac OS X 10.3 donde mysqld ignoraSIGHUP
ySIGQUIT
). -
PRIVILEGES
Recarga los permisos de las tablas de permisos en la base de datos
mysql
. -
QUERY CACHE
Defragmenta caché de consulta para utilizar mejor su memoria. Este comando no borra ninguna consulta de la caché, no como
RESET QUERY CACHE
. -
STATUS
Resetea la mayoría de variables de estado a cero. Esto es algo que debe usar sólo al debugar una consulta. Consulte Sección 1.6.1.3, “Cómo informar de bugs y problemas”.
-
{TABLE | TABLES} [
tbl_name
[,tbl_name
] ...]Cuando no se nombran tablas, cierra todas las tablas abiertas y fuerza a todas las tablas en uso a que se cierren. Esto también vuelca la caché de consultas. Con uno o más nombres de tabla, vuelca sólo las tablas dadas.
FLUSH TABLES
también borra todos los resultados de consultas de la caché de consultas, como el comandoRESET QUERY CACHE
. -
TABLES WITH READ LOCK
Cierra todas las tablas abiertas y bloquea todas las tablas para todas las bases de datos con una bloqueo de lectura hasta que ejecute
UNLOCK TABLES
. Esto es una forma muy conveniente de obtener copias de seguridad si tiene un sistema de ficheros como Veritas que puede tomas muestras en puntos de tiempo concretos. -
USER_RESOURCES
Resetea todos los recursos por hora de usuario a cero. Esto le permite a los clientes que hayan alcanzado el límite de su conexión de hora, de consulta o de actualización para reanudar las actividades inmediatamente.
FLUSH USER_RESOURCES
no se aplica al límite en conexiones máximas simultáneas. Consulte Sección 13.5.1.3, “Sintaxis deGRANT
yREVOKE
”.
En MySQL 5.0, los comandos FLUSH
se
escriben en el lob binario a no ser que la plabra
NO_WRITE_TO_BINLOG
(o su alias
LOCAL
) se use.
Nota: FLUSH
LOGS
, FLUSH MASTER
,
FLUSH SLAVE
, y FLUSH TABLES WITH
READ LOCK
no se loguean en ningún caso porque
causarían problemas si se replicasen en un esclavo.
Puede acceder a algunos de estos comandos con la utilidad
mysqladmin usando los comandos
flush-hosts
, flush-logs
,
flush-privileges
,
flush-status
, o
flush-tables
.
Consulte Sección 13.5.5.5, “Sintaxis de RESET
” para información acerca
cómo se usa el comando RESET
para
replicación.
KILL [CONNECTION | QUERY] thread_id
Cada conexión a mysqld se ejecuta en un
flujo separado. Puede ver los flujos en ejecución con el
comando SHOW PROCESSLIST
y matar un flujo
con el comando KILL
thread_id
.
En MySQL 5.0.0, KILL
permite los
modificadores opcionales CONNECTION
o
QUERY
:
-
KILL CONNECTION
es lo mismo queKILL
sin modificadores: termina la conexión asociada con elthread_id
dado. -
KILL QUERY
termina el comando que la conexión está ejecutando actualmente, pero deja a la conexión intacta.
Si tiene el permiso PROCESS
, puede ver
todos los flujos, puede matar todos los flujos y comandos. De
otro modo, puede ver y matar sólo sus propios flujos y
comandos.
Puede usar los comandos mysqladmin processlist y mysqladmin kill para examinar y matar flujos.
Nota: No puede usar
KILL
con la biblioteca Embedded MySQL
Server porque el servidor empotrado se ejecuta dentro del
flujo de la aplicación que lo aloja. No crea ningún flujo de
conexión por sí solo.
Cuando hace un KILL
, se activa un flag
específico para el flujo. En la mayoría de casos, puede que
el flujo tarde algo de tiempo en morir, porque el flag kill se
chequea sólo cada ciertos intervalos:
-
En
SELECT
,ORDER BY
yGROUP BY
, el flag se chequea tras leer un bloque de registros. Si el flag kill está activado, el comando se aborta. -
Durante
ALTER TABLE
, el flag kill se chequea antes de que se lea cada bloque de registros de la tabla original. Si el flag kill está activado, el comando se aborta y la tabla temporal se borra. -
Durante operaciones
UPDATE
oDELETE
, el flag kill se chequea tras cada lectura de bloque y tras cada registro borrado o actualizado. Si el flag kill está activado, el comando se aborta. Tenga en cuenta que si no está usando transacciones, los cambios no se deshacen. -
GET_LOCK()
aborta y retornaNULL
. -
Un flujo
INSERT DELAYED
rápidamente vuelca (inserta) todos los registros que tiene en memoria y luego termina. -
Si el flujo está en el handler de bloqueo (estado:
Locked
), el bloqueo de tabla se aborta rápidamente. -
Si el flujo está esperando a espacio libre en disco en una llamada de lectura, la escritura se aborta con un mensaje de error "disco lleno".
-
Advertencia: Matar una operación
REPAIR TABLE
oOPTIMIZE TABLE
en una tablaMyISAM
resulta en una tabla que corrupta y no usable. Cualquier lectura o escritura en una tabla así falla hasta que la optimiza o repara de nuevo (sin interrupción).
LOAD INDEX INTO CACHEtbl_index_list
[,tbl_index_list
] ...tbl_index_list
:tbl_name
[[INDEX|KEY] (index_name
[,index_name
] ...)] [IGNORE LEAVES]
El comando LOAD INDEX INTO CACHE
en MySQL
5.0 precarga un índice de tabla en la caché de clave para la
que se ha asignado por un comando CACHE
INDEX
, o en la caché de claves por defecto en otro
caso. LOAD INDEX INTO CACHE
se usa sólo
para tablas MyISAM
.
El modificador IGNORE LEAVES
hace que se
carguen sólo los bloques para los nodos que no sean hojas del
índice.
El siguiente comando precarga nodos (bloques índice) de
índices para las tablas t1
y
t2
:
mysql> LOAD INDEX INTO CACHE t1, t2 IGNORE LEAVES; +---------+--------------+----------+----------+ | Table | Op | Msg_type | Msg_text | +---------+--------------+----------+----------+ | test.t1 | preload_keys | status | OK | | test.t2 | preload_keys | status | OK | +---------+--------------+----------+----------+
Este comando precarga todos los bloques índice de
t1
. Sólo precarga bloques para los nodos
que no sean hojas de t2
.
La sintaxis de LOAD INDEX INTO CACHE
le
permite especificar que sólo índices particulares de una
tabla deben precargarse. Sin embargo, la implementación
actual precarga todos los índices de tabla en la caché, así
que no hay razón para especificar nada distinto al nombre de
tabla.
RESETreset_option
[,reset_option
] ...
El comando RESET
se usa para limpiar el
estado de varias operaciones de servidor. Actúa como una
versión más fuerte del comando FLUSH
.
Consulte Sección 13.5.5.2, “Sintaxis de FLUSH
”.
Debe tener el permiso RELOAD
para ejecutar
RESET
,
reset_option
puede ser cualquiera
de las siguientes:
-
MASTER
Borra todos los logs binarios listados en el fichero índice, resetea el fichero de índice de log binario para vaciarlo, y crea un nuevo fichero de log binario. (Conocido como
FLUSH MASTER
en versiones prévias de MySQL.) Consulte Sección 13.6.1, “Sentencias SQL para el control de servidores maestros”. -
QUERY CACHE
Borra todos los resultados de consulta de la caché de consulta.
-
SLAVE
Hace que el esclavo olvide su posición de replicación en los logs binarios del maestro. También resetea el log retardado borrando cualquier fichero de log retardado y comenzando uno nuevo. Conocido como
FLUSH SLAVE
en versiones prévias MySQL.) Consulte Sección 13.6.2, “Sentencias SQL para el control de servidores esclavos”.