13.5. Sentencias de administración de base de datos

MySQL 5.0

13.5. Sentencias de administración de base de datos

13.5.1. Sentencias para la gestión de cuentas

13.5.1.1. Sintaxis de

CREATE USER  [IDENTIFIED BY [PASSWORD] '']
    [,  [IDENTIFIED BY [PASSWORD] '']] ...

El comando se añadió en MySQL 5.0.2. Este comando crea nuevas cuentas MySQL. Para usarlas, debe tener el permiso global o el permiso para la base de datos . Para cada cuenta, crea un nuevo registro en la tabla que no tiene permisos. Un error ocurre si la cuenta ya existe.

La cuenta puede tener una contraseña con la cláusula opcional . El valor y la contraseña se dan del mismo modo que para el comando . En particular, para especificar la contraseña en texto plano, omita la palabra clave . Para especificar la contraseña como el valor hasheado retornado por la función , incluya la palabra clave . Consulte Sección 13.5.1.3, “Sintaxis de y .

13.5.1.2. Sintaxis de

DROP USER  [, ] ...

El comando borra una o más cuentas MySQL . Para usarlo, debe tener el permiso global o el permiso para la base de datos . Cada cuenta se nombra usando el mismo formato que para o ; por ejemplo, . Las partes de usuario y equipo del nombre de cuenta se corresponden a las columnas y del registro de la tabla para la cuenta.

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 ;

El comando borra registros de permisos para la cuenta de todas las tablas de permisos.

En MySQL 5.0.0 y 5.0.1, 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 . Para borrar una cuenta MySQL completamente (incluyendo todos sus permisos), debe usar el siguiente procedimiento, realizando estos pasos en el orden mostrado:

  1. Use para determinar los permisos que tiene la cuenta. Consulte Sección 13.5.4.10, “Sintaxis de .

  2. Use para revocar los permisos mostrados por . Esto borra registros para la cuenta de todas las tablas de permisos excepto la tabla , y revoca cualquier permiso global listado en la tabla . Consulte Sección 13.5.1.3, “Sintaxis de y .

  3. Borre la cuenta usando para borrar el registro de la tabla .

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.

13.5.1.3. Sintaxis de y

GRANT  [()] [,  [()]] ...
    ON [] { | * | *.* | .*}
    TO  [IDENTIFIED BY [PASSWORD] '']
        [,  [IDENTIFIED BY [PASSWORD] '']] ...
    [REQUIRE
        NONE |
        [{SSL| X509}]
        [CIPHER '' [AND]]
        [ISSUER '' [AND]]
        [SUBJECT '']]
    [WITH  [] ...]

 =
    TABLE
  | FUNCTION
  | PROCEDURE

 =
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR 
  | MAX_UPDATES_PER_HOUR 
  | MAX_CONNECTIONS_PER_HOUR 
  | MAX_USER_CONNECTIONS 
REVOKE  [()] [,  [()]] ...
    ON [] { | * | *.* | .*}
    FROM  [, ] ...

REVOKE ALL PRIVILEGES, GRANT OPTION FROM  [, ] ...

Los comandos y 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 . 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 está activa, no puede usarse para quitar los permisos. Es necesario manipular las tablas de permisos directamente. ( no creará estos registros cuando está activo , 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 . y 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 y . .* y .* 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 . y 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 . Usando , debe especificar las mismas columnas que se otorgaron los permisos.

  • Nivel de rutina

    Los permisos , , , y se aplican a rutinas almacenadas. Pueden darse a niveles global y de base de datos. Además, excepto para , estos permisos pueden darse en nivel de rutinas para rutinas individuales y se almacenan en la tabla .

La cláusula se añadió en MySQL 5.0.6. Debe especificarse como , , o 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 o , debe tener el permiso , 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 FROM  [, ] ...

Para usar esta sintaxis , debe tener el permiso global o el permiso para la base de datos .

Para los comandos y , pueden especificarse como cualquiera de los siguientes:

Permiso Significado
Da todos los permisos simples excepto
Permite el uso de
Modifica o borra rutinas almacenadas
Permite el uso de
Crea rutinas almacenadas
Permite el uso de
Permite el uso de , , , y .
Permite el uso de
Permite el uso de
Permite el uso de
Permite al usuario ejecutar rutinas almacenadas
Permite el uso de y
Permite el uso de y
Permite el uso de
Permite el uso de en tablas para las que tenga el permiso
Permite el uso de
No implementado
Permite el uso de
Permite al usuario preguntar dónde están los servidores maestro o esclavo
Necesario para los esclavos de replicación (para leer eventos del log binario desde el maestro)
Permite el uso de
muestra todas las bases de datos
Permite el uso de
Permite el uso de mysqladmin shutdown
Permite el uso de comandos , , , and , el comando mysqladmin debug le permite conectar (una vez) incluso si se llega a
Permite el uso de
Sinónimo de “no privileges
Permite dar permisos

El permiso no es operacional hasta MySQL 5.0.3. y se añadieron en MySQL 5.0.1. , , y 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 actualmente no se usa.

puede especificarse cuando quiere crear un usuario sin permisos.

Use para determinar qué permisos tiene la cuenta. Consulte Sección 13.5.4.10, “Sintaxis de .

Puede asignar permisos globales usando sintaxis o permisos a nivel de base de datos usando la sintaxis .*. Si especifica y tiene seleccionada una base de datos por defecto, los permisos se dan en esa base de datos. (Atención: Si especifica y no ha seleccionado una base de datos por defecto, los permisos dados son globales.)

Los permisos , , , , , , , y son permisos administrativos que sólo pueden darse globalmente (usando sintaxis ).

Otros permisos pueden darse globalmente o a niveles más específicos.

Los únicos valores que puede especificar para una tabla son , , , , , , , , y .

Los únicos valores que puede especificar para una columna (cuando usa la cláusula ) son , , y .

Los únicos valores que puede especificar a nivel de rutina son , , y . 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, asigna sólo los permisos que existen en el nivel que está otorgándolos. Por ejemplo, si usa .*, este es un comando de nivel de base de datos, así que ninguno de los permisos únicamente globales tales como 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 . 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 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 , 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 .

Para acomodar los permisos a los usuarios de equipos arbitrários, MySQL soporta especificar el valor con la forma @. Si un valor o es legal como identificador sin poner entre comillas, no necesita hacerlo. Sin embargo, las comillas son necesarias para especificar una cadena conteniendo carácteres especiales (tales como ''), o una cadena conteniendo carácteres especiales o comodín (tales como ''); por ejemplo, . Entrecomille el nombre de usuario y de equipo separadamente.

Puede especificar carácteres comodín en el nombre de equipo. Por ejemplo, @'%.loc.gov' se aplica a para cualquier equipo en el dominio , y @'144.155.166.%' se aplica a para cualquier equipo en la clase subred clase C .

La forma simple es sinónimo de @'%'.

MySQL no soporta comodines en el nombre de usuario. Los usuarios anónimos se definien insertando entradas con en la tabla o creando un usuario con un nombre vacío con el comando :

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 @localhost. De otro modo, la cuenta de usuario anónimo para en la tabla (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;

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 lógica de los permisos en cada uno de los cuatro niveles de permisos. Por ejemplo, si la tabla especifica que un usuario tiene un permiso 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 se añade una entrada que permite allí hasta que se borra con un comando . En otras palabras, puede crear entradas pero no los borra; debe hacerlo explícitamente usando o .

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 , 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 , el usuario no tiene contraseña. Esto es muy poco seguro. Desde MySQL 5.0.2, puede activar el modo SQL para evitar que cree un nuevo usuario si lo hiciese de otro modo, a no ser que se de para proporcionar la nueva contraseña de usuario.

Las contraseñas pueden ponerse con el comando . Consulte Sección 13.5.1.5, “Sintaxis de .

En la cláusula , la contraseña debe darse como el valor de contraseña literal. No es necesario usar la función como lo es para el comando . Por ejemplo:

GRANT ... IDENTIFIED BY 'mypass';

Si no quiere enviar la contraseña en texto plano y conoce el valor haseado que retornaría para la contraseña, puede especificar el valor hasheado precedido por la palabra clave :

GRANT ...
IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';

En un programa C , puede obtener el valor haseado usando la función de la API de C.

Si da permisos para una base de datos, se crea una entrada en la tabla si es necesario. Si todos los permisos para la base de datos se eliminan con , 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 ).

El permiso le permite a la cuenta ver nombres de bases de datos realizando el comando . 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 .

La cláusula 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 , 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 le permite asignar sólo los permisos que tenga usted.

Tenga en cuenta que cuando le da a un usuario el permiso 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 en una base de datos. Si otorga el permiso en la base de datos y especifica , el usuario puede quitar no sólo el permiso sino también . Si luego otorga el permiso al usuario en la base de datos, el usuario puede quitar , , y .

No debe otorgar permisos a un usuario normal. Si lo hace, el usuario puede intentar engañar al sistema de permisos renombrando tablas!

Las opciones , , y limitan el número de consultas, actualizaciones, y logueos que puede realizar un usuario durante cualquier perído de una hora. Si es 0 (por defecto), esto significa que no hay limitación para ese usuario.

La opción, implementada en MySQL 5.0.3, limita el máximo número de conexiones simultáneas que la cuenta puede hacer. Si es 0 (por defecto), la 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 .

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 del comando . (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 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;
    
  • 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;
    
  • ' crea una restricción de intentos de conexión en que el cliente debe presentar un certificado X509 válido presentado por la AC . 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ón 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 debe entrarse como una cadena única.

  • ' crea la restricción en los intentos de conexión de que el cliente debe presentar un certificado X509 válido con el asunto . 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 debe entrarse como una única cadena.

  • ' 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 , , y pueden combinarse en la cláusula 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 y deben entrarse como una única cadena.

En MySQL 5.0, la palabra clave es opcional entre las opciones .

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 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 o .

  • 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 . 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 de .

  • 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 explícitos o manipulando las tablas de permisos de MySQL.

  • En MySQL, es posible tener el permiso sólo para algunas de las columnas en la tabla. En este caso, todavía puede ejecutar comandos en la tabla mientras omita esas columnas para las que no tiene el permiso . 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 de disctue acerca de los valores por defecto implícitos.

    Las columnas para las que no tiene el permiso se ponen a su valor por defecto. SQL estándar requiere que tenga el permiso 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.

13.5.1.4. Sintaxis de

RENAME USER  TO 
    [,  TO ] ...

El comando renombra cuentas de usuario MySQL existentes. Para usarlo, debe tener el permiso global o el permiso para la base de datos . Ocurre un error si cualquier de las antiguas cuentas no existe o cualquiera de las nuevas ya existe. Los valores y se dan igual que para el comando .

El comando se añadió en MySQL 5.0.2.

13.5.1.5. Sintaxis de

SET PASSWORD = PASSWORD('')
SET PASSWORD FOR  = PASSWORD('')

El comando 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 para la base de datos pueden hacerlo. El valor debe darse en formato @ donde y son exactamente los mismos que cuando se listan en las columnas y de la tabla . Por ejemplo, si tiene una entrada en las columnas y con los valores y , escribiría el comando así:

mysql> SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('');

Esto es equivalente al siguiente comando:

mysql> UPDATE mysql.user SET Password=PASSWORD('')
    -> 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 o 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 ejecutando .

13.5.2. Sentencias para el mantenimiento de tablas

13.5.2.1. Sintaxis de

ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE  [, ] ...

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 , , y . Para tablas , 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
Nombre de tabla
Siempre
Es , , , o
Mensaje

Puede chequear la distribución de claves almacenada con el comando . Consulte Sección 13.5.4.11, “Sintaxis de .

Si la tabla no ha cambiado desde el último comando , la tabla no se vuelve a analizar.

En MySQL 5.0, los comandos se escriben en el log binario a no ser que la palabra clave opcional (o su alias ) se use.

13.5.2.2. Sintaxis de

BACKUP TABLE  [, ] ... TO ''

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.

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 . Copia los ficheros de definición y de datos . El fichero índice 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 para obtener un bloqueo de lectura para cada tabla en el grupo.

El comando retorna una tabla con las siguientes columnas:

Columna Valor
Nombre de tabla
Siempre
Es , , , o
Mensaje

13.5.2.3. Sintaxis de

CHECK TABLE  [, ] ... [] ...

 = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

Chequea una tabla o tablas para errores. funciona para tablas y . Para tablas , la estadística de clave se actualiza.

Desde MySQL 5.0.2, 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 retorna una tabla con las siguientes columnas:

Columna Valor
Nombre de tabla
Siempre
Es , , , o
Mensaje

Tenga en cuenta que el comando puede producir varios registros para información de cada tabla chequeada. El último registro tiene un valor de y normalmente debe ser . Si no obtiene , o 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)”. 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 y se ignoran en tablas y vistas.

Tipo Significado
No escanea los registros para chequear enlaces incorrectos.
Sólo chequea tablas que no se han cerrado correctamente.
Sólo las tablas chequeadas que se han cambiado desde el úlitmo chequeo o no se han cerrado correctamente.
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.
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 , , o se especifica, el tipo de chequeo por defecto para tablas de formato dinámico es . Esto es lo mismo que ejecutar myisamchk --medium-check en la tabla. El tipo de chequeo por defecto también es para tablas de formato estático, a no ser que se especifique o . En tal caso, por defecto es . El escaneo de registro se evita para y 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, cambia la tabla. Esto ocurre si la tabla se marca como “corrupted” o “not closed properly” pero no encuentra ningún problema en la tabla. En este caso, 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 . Ésta debe usarse cuando tiene prisa y puede permitirse el pequeño riesgo que 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.)

y 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, se prefiere en lugar de . (El único caso en que no es el método preferido es cuando sospecha que ha encontrado un bug en el código .)

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 no pueden corregirse automáticamente:

  • .

    Esto significa que tiene un registro en la tabla donde la columna contiene un valor de índice de 0. (Es posible crear un registro donde la columna es 0 poneindo la columna explícitamente a 0 con un comando .)

    Esto no es un error por si mismo, pero puede causar problemas si decide volcar la tabla y restaurarla o realizar un en la tabla. En este caso, la columna cambia los valores según las reglas de las columnas , que pueden causar problemas tales como errores de clave duplicada.

    Para evitar las advertencias, símplemente ejecute un comando para poner en la columna un valor distinto a 0.

13.5.2.4. Sintaxis de

CHECKSUM TABLE  [, ] ... [ QUICK | EXTENDED ]

Reporta un checksum de tabla.

Si se especifica, el checksum de la tabla se reporta si está disponible, o en otro caso. Esto es muy rápido. Un checksum en vivo está permitido especificando la opción de tabla , actualmente sólo soportado por tablas . Consulte Sección 13.1.5, “Sintaxis de .

En modo 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 ni , MySQL retorna un checksum en vivo si el motor de tabla lo soporta y escanea la tabla de otro modo.

retorna para tablas no existentes. Desde MySQL 5.0.3, se genera una advertencia para esta condición.

13.5.2.5. Sintaxis de

OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] 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 , , o ). Los registros borrados se mantienen en una lista enlazada y operaciones posteriores reúsan posiciones de antiguos registros. Puede usar para reclamar el usuario no usado y para defragmentar el fichero de datos.

En la mayoría de inicializaciones, no necesita ejecutar 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, funciona sólo en tablas , y .

Para tablas , funciona como sigue:

  1. Si la tabla ha borrado o dividido registros, repare la tabla.

  2. Si las páginas índice no están ordenadas, ordénelas.

  3. Si las estadísticas no están actualizadas (y la reparación no puede hacerse ordenando el índice), actualícelas.

Para tablas , es mapea como . Para tablas , se mapea con , 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 .

Puede hacer que funcione con otros tipos de tabla arrancando mysqld con la opción o ; en este caso se mapea con .

Tenga en ceunta que MySQL bloquea la tabla mientras se ejecuta .

En MySQL 5.0, los comandos se escriben en el log binario a no ser que la palabra opcional(o su alias ) se use. Esto se hace para que los comandos se usen en MySQL server actuando como maestro de replicación se replique por defecto en el esclavo de replicación.

13.5.2.6. Sintaxis de

REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE
     [, ] ... [QUICK] [EXTENDED] [USE_FRM]

repara una tabla posiblemente corrupta. Por defecto, tiene el mismo efecto que myisamchk --recover . funciona sólo en tablas .

Normalmente nunca debe ejecutar este comando. Sin embargo, si hay un desastre, puede recuperar todos los datos de una tabla . Si sus tablas se corrompen a menudo, debe intentar encontrar la razón de lo que lo causa, para eliminar la necesidad de usar . Consulte Sección A.4.2, “Qué hacer si MySQL sigue fallando (crashing)”. Consulte Sección 14.1.4, “Problemas en tablas .

El comando retorna una tabla con las siguientes columnas:

Columna Valor
Nombre de tabla
Siempre es
Es , , , o
Mensaje

El comando puede producir muchos registros de información para cada tabla reparada. El último registro tiene un valor de y normalmente debe ser . Si no obtiene , debe intentar reparar la tabla con myisamchk --safe-recover, ya que no implementa todas las opciones de myisamchk. Plaenamos hacerlo más flexible en el futuro.

Si se da , intenta reparar sólo el árbol índice. Este tipo de reparación es como lo que hace myisamchk --recover --quick.

Si usa , 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 disponible en MySQL 5.0 para . Use esto si el fichero índice no existe o su cabecera está corrupta. En este modo, MySQL recrea el fichero usando información desde el fichero . Este tipo de reparación no puede hacerse con myisamchk. Nota: Use este modo sólo si no puede usar modos normalmente. La cabecera contiene información importante de metadatos (en particular, los valores actuales y ) que se pierden en . No use si la tabla está comprimida, ya que esta información se almacena en el fichero .

En MySQL 5.0, los comandos se escriben en el log binario a no ser que la palabra opcional (o su alias ) se use.

Atención: Si el servidor muere durante una operación , es esencial tras restaurarla que inmediatamente ejecute otro comando 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.

13.5.2.7. Sintaxis de

RESTORE TABLE  [, ] ... FROM ''

Restaura la tabla o tablas de una copia de seguridad que se hizo con . Las tablas existentes no se sobreescriben; si trata restaurar una tabla existente, obtiene un error. Pero como , actualmente funciona sólo para tablas . El directorio debe especificarse como una ruta completa.

La copia de seguridad para cada tabla consiste en su fichero de formato y fichero de datos . La operación de restauración restaura aquellos ficheros, luego los usa para reconstruir el fichero índice . 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
Nombre de tabla
Siempre
Es , , , o
Mensaje

13.5.3. Sintaxis de SET

SET  [, ] ...

:
       = 
    | [GLOBAL | SESSION]  = 
    | @@[global. | session.] = 

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 para asignar contraseñas de cuenta se describen en Sección 13.5.1.5, “Sintaxis de .

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 para este comando, pero su uso está obsoleto en favor de .

El siguiente ejemplo muestra las distintas sintaxis que puede usar para cambiar las variables.

Una variable de usuario se escribe como y puede cambiarse como sigue:

SET @ = ;

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 como . El nombre puede ir precedido opcionalmente por o para indicar explícitamente que la variable es global, o por , , o para indicar que es una variable de sesión. y son sinónimos para y . Si no hay modificador presente, asigna un valor a la variable de sesión.

La sintaxis 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 o 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 (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 , que requiere el permiso , 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 con una variable que sólo puede ser usada con o si no especifica (o ) cuando cambie una variable global.

Si quiere cambiar una variable al valor o un valor al valor de compilación de MySQL por defecto, puede hacerlo con . Por ejemplo, los siguientes dos comandos son idénticos en cambiar los valores de sesión o 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 . (Consulte Sección 13.5.4.21, “Sintaxis de .) Para obtener un nombre de variable específico, use una cláusula 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 con :

SELECT @@max_join_size, @@global.max_join_size;

Cuando recibe una variable con (esto es,no especifica , , o ), MySQL retorna el valor si existe y el valor 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 , puede obtener sus valores con (con la excepción de y ). Por ejemplo:

mysql> SELECT @@AUTOCOMMIT;
+--------------+
| @@autocommit |
+--------------+
|            1 |
+--------------+
  • Pone el modo autocommit . Con valor , todos los cambios de una tabla toman efecto inmediatamente. Si se pone a , debe usar para aceptar una transacción o para cancelarla. Si cambia el modo de a , MySQL realiza un automático de cualquier transacción abierta . Otra forma de comenzar una transacción es usar un comando o . Consulte Sección 13.4.1, “Sintaxis de , y .

  • Si se pone a , todas las tablas temporales se almacenan en disco en lugar que en memoria. Esto es un poco lento, pero el error is full no ocurre para operaciones que requieran una tabla temporal grande. El valor por defecto para una nueva conexión es (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éviamente .)

  • | DEFAULT}

    Esto mapea todas las cadenas desde y hacia el cliente con el mapeo dado. Puede añadir nuevos mapeos editando en la distribución fuente MySQL. En MySQL 5.0, cambia tres variables de sistema y se actualizan con el conjunto de carácteres dado, y al valor de .

    El mapeo por defecto puede restaurarse usando el valor .

    Tenga en cuenta que la sintaxis para difiere de la de la mayoría de otras opciones.

  • Con valor de (por defecto), las claves foráneas para tablas se chequean. Si se pone a , se ignoran. Deshabilitar el chequeo de clave foránea puede ser útil para recargar tablas en un orden distinto que el requerido por sus relaciones padre/hijo, Consulte Sección 15.6.4, “Restricciones (constraints) .

  • La variable es un sinónimo para la variable . Existe por compatibilidad con otras bases de datos. Puede leer su valor con , y cambiarlo mediante .

  • Cambia el valor a ser usado por los comandos o al insertar un valor . Esto se usa principalmente con el lob binario.

  • Cambia el valor a ser retornado de . Esto se almacena en el log binario cuando usa en un comando que actualice una tabla. Cambiar esta variable no actualiza el valor retornado por la función de la API de C.

  • ' | DEFAULT}

    cambia tres variables de sesión de sistema , , y al conjunto de carácteres dado. Cambiar a también cambia a la colación por defecto para .

    El mapeo por defecto puede restaurarse usando un valor de .

    Tenga en cuenta que la sintaxis para difiere de la usada para la mayoría de otras opciones.

  • Con el valor 1 (por defecto), advertencias del nivel se registran. Con valor 0, las advertencias 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. se añadió en MySQL 5.0.3.

  • Con valor (por defecto), puede encontrar el último registro insertado para una tabla que contiene una columna usando el siguiente constructor:

    WHERE  IS NULL
    

    Este comportamiento lo usan algunos programas ODBC, como Access.

  • Con valor , MySQL aborta los comandos 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 de ). Esto es útil cuando un comando no aconsejable se ejecuta. El valor por defecto para una nueva conexión es , que permite todos los comandos .

    Si cambia la variable de sistema a un valor distinto a , se pone a .

  • fuerza los resultados de los comandos 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.

  • Con valor , no se realiza logueo en el log binario para el cliente. El cliente debe tener el permiso para cambiar esta opción.

  • Con valor , no se realiza logueo en el log de consultas generales para el cliente. El cliente debe tener el permiso para cambiar esta opción.

  • Esta variable está obsoleta, y es mapea a .

  • Con valor , entrecomilla los nombres de tabla y columnas. Si se pone a , 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 de .

  • Con valor , MySQL aborta comandos o que no usan una clave en la cláusula o . Esto hace posible cazar los comandos o donde las claves no se usan apropiadamente y que probablemente cambiarían o borrarían un gran número de registros.

  • | DEFAULT}

    El máximo número de registros a retornar desde comandos . El valor por defecto para una nueva conexión es “unlimited.” Si cambia este límite, el valor por defecto puede restaurarse usando un valor de .

    Si un tiene una cláusula el tiene preferencia sobre el valor de .

    no se aplica a comandos ejecutados en rutinas almacenadas. Tampoco se aplica a comandos que no producen un conjunto de resultados a ser retornado al cliente. Esto incluye comandos en subconsultas, , y .

  • Esta variable controla si comandos 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.

  • | DEFAULT}

    Cambia la hora del cliente. Se usar para obtener la fecha y hora original si usa el log binario para restaurar registros. debe ser un Unix epoch timestamp, no un timestamp de MySQL.

  • Con valor (por defecto), se realizan chequeos en tablas para índices secundarios. Con valor , 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.

13.5.4. Sintaxis de 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 FROM  [FROM ] [LIKE '']
SHOW CREATE DATABASE 
SHOW CREATE TABLE 
SHOW DATABASES [LIKE '']
SHOW ENGINE  {LOGS | STATUS }
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [,] ]
SHOW GRANTS FOR 
SHOW INDEX FROM  [FROM ]
SHOW INNODB STATUS
SHOW [BDB] LOGS
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW [GLOBAL | SESSION] STATUS [LIKE '']
SHOW TABLE STATUS [FROM ] [LIKE '']
SHOW [OPEN] TABLES [FROM ] [LIKE '']
SHOW TRIGGERS
SHOW [GLOBAL | SESSION] VARIABLES [LIKE '']
SHOW WARNINGS [LIMIT [,] ]

El comando 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 dado incluye una parte ' , ' 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.

13.5.4.1. Sintaxis de

SHOW CHARACTER SET [LIKE '']

El comando muestra todos los conjuntos de carácteres disponibles. Esto tiene una cláusula 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 muestra el máximo número de bytes usados para almacenar un carácter.

13.5.4.2. Sintaxis de

SHOW COLLATION [LIKE '']

La salida de incluye todos los conjuntos de carácteres disponibles. Tiene una cláusula opcional cuyo 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 indica si una colación está por defecto para su conjunto de carácteres. indica si el conjunto de carácteres está compilado en el servidor. está relacionado con la cantidad de memoria requerida para ordenar cadenas expresadas en el conjunto de carácteres.

13.5.4.3. Sintaxis de

SHOW [FULL] COLUMNS FROM  [FROM ] [LIKE '']

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 , 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 hace que la salida incluya los permisos que tiene así como cualquier comentario por columna para cada columna.

Puede usar como alternativa a la sintaxis FROM . En otras palabras, estos dos comandos son equivalentes:

mysql> SHOW COLUMNS FROM mytable FROM mydb;
mysql> SHOW COLUMNS FROM mydb.mytable;

es un sinónimo para . Puede listar las columnas de una tabla con el comando mysqlshow .

El comando proporciona información similar a . Consulte Sección 13.3.1, “Sintaxis de (Información acerca de las columnas)”.

13.5.4.4. Sintaxis de

SHOW CREATE {DATABASE | SCHEMA} 

Muestra un comando que crea la base de datos dada. 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 */

13.5.4.5. Sintaxis de

SHOW CREATE TABLE 

Muestra un comando 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

entrecomilla los nombres de tabla y columna según el valor de la opción . Sección 13.5.3, “Sintaxis de .

13.5.4.6. Sintaxis de

SHOW {DATABASES | SCHEMAS} [LIKE '']

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 .

Si el servidor se arrancó con la opción , no puede usar este comando a no ser que tenga el permiso .

puede usarse desde MySQL 5.0.2

13.5.4.7. Sintaxis de

SHOW ENGINE  {LOGS | STATUS }

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

muestra información de estado acerca de ficheros de log existentes. Retorna los siguientes campos:

  • Ruta completa al fichero de log.

  • Tipo del fichero de log ( para ficheros de log Berkeley DB).

  • Estado del fichero de log ( si el fichero puede borrarse, o si el fichero se necesita en el subsistema de transacción)

muestra información extendida acerca del estado del comando .

Sinónimos antiguos (ahora obsoletos) para estos comandos son y .

puede usarse desde MySQL 4.1.2.

13.5.4.8. Sintaxis de

SHOW [STORAGE] 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. 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 indica si el motor se soporta, y cuál está activo por defecto. Por ejemplo, si el servidor se arranca con la opción , el valor para el registro tiene el valor .

13.5.4.9. Sintaxis de

SHOW ERRORS [LIMIT [,] ]
SHOW COUNT(*) ERRORS

Este comando es similar a , excepto que en lugar de mostrar errores, advertencias, y notas sólo muestra errores.

La cláusula tiene la misma sintaxis que para el comando . Consulte Sección 13.2.7, “Sintaxis de .

El comando muestra el número de errores. Puede recibir este número de la variable :

SHOW COUNT(*) ERRORS;
SELECT @@error_count;

Para más información consulte Sección 13.5.4.22, “Sintaxis de .

13.5.4.10. Sintaxis de

SHOW GRANTS FOR 

Este comando lista el comando 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();

13.5.4.11. Sintaxis de

SHOW INDEX FROM  [FROM ]

retorna información de índice de tabla en un formato que recuerda la llamada en ODBC.

returna los siguientes campso:

  • Nombre de tabla.

  • 0 si el índice no puede contener duplicados, 1 si puede.

  • Nombre del índice

  • Número de secuencia de columna en el índice, comenzando con 1.

  • Nombre de columna.

  • Cómo se ordena la columan en el índice. En MySQL, puede tener valores '' (Ascendente) o (No ordenado).

  • Número de valores únicos en el índice. Se actualiza ejecutando o myisamchk -a. 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.

  • Número de carácteres indexados si la columna sólo está indexada parcialmente. si la columna entera está indexada.

  • Indica cómo está empaquetada la clave. si no lo está.

  • Contiene si la columna puede contener . Si no, la columna contiene desde MySQL 5.0.3, y antes.

  • Método de índice usado (, , , ).

  • Comentarios varios.

Puede usar como alternativa para la sintaxis FROM . Estos dos comandos son equivalentes:

mysql> SHOW INDEX FROM mytable FROM mydb;
mysql> SHOW INDEX FROM mydb.mytable;

es sinónimo para . Puede listar los índices de una tabla con el comando mysqlshow -k .

13.5.4.12. Sintaxis de

SHOW INNODB STATUS

En MySQL 5.0, este es un sinónimo obsoleto para . Consulte Sección 13.5.4.7, “Sintaxis de .

13.5.4.13. Sintaxis de

SHOW [BDB] LOGS

En MySQL 5.0, este es un sinónimo obsoleto para . Consulte Sección 13.5.4.7, “Sintaxis de .

13.5.4.14. Sintaxis de

SHOW OPEN TABLES

lista las tablas no abiertas actualmente en la caché de tablas. Consulte Sección 7.4.8, “Cómo abre y cierra tablas MySQL”.

returna los siguientes campos:

  • La base de datos que contiene la tabla.

  • Nombre de tabla.

  • 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.

  • Si un nombre de tabla está bloqueado. El bloqueo de nombres se usa para operaciones tales como borrar o renombrar tablas.

se añadió en MySQL 3.23.33.

13.5.4.15. Sintaxis de

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

13.5.4.16. Sintaxis de

SHOW [FULL] PROCESSLIST

le muestra qué flujos están en ejecución. Puede obtener esta información usando el comando mysqladmin processlist . Si tiene el permiso , 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 . Si no usa la palabra clave , 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 : 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 , 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 :

  • El flujo está realizando un chequeo (automático) de la tabla.

  • 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.

  • Esclavo conectando con el maestro.

  • El conjunto de resultados temporal era mayor que y el flujo está cambiando la tabla temporal de memoria a disco para ahorrar memoria.

  • El flujo está creando una tabla temporal para guardar parte del resultado de una consulta.

  • El servidor está ejecutando la primera parte de un borrado de tablas múltiple y borrando sólo la primera tabla.

  • El servidor está ejecutando la segunda parte de un borrado de tablas múltiples y borrando los registros coincidentes de las otras tablas.

  • El flujo está ejecutando y espera a que todos los flujos cierren sus tablas.

  • Alguien ha enviado un comando 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.

  • La consulta está bloqueada por otra consulta.

  • El flujo está procesando registros para un comando y también enviando datos al cliente.

  • El flujo está ordenando para un .

  • El flujo está ordenando para un .

  • 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 o puede evitar abrir una tabla hasta que el comando acabe.

  • La consulta usaba 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.

  • 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.

  • El código de reparación está usando una ordenación para crear índices.

  • 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 .

  • El flujo hace una primera fase para encontrar todos los registro coincidentes antes de actualizarlos. Esto debe hacerse si está cambiando el índice que se usa para encontrar los registros implicados.

  • El flujo espera que el cliente envíe un nuevo comando .

  • 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 .

  • El handler trata de obtener un bloqueo para la tabla para insertar registros.

  • El flujo está buscando registros para actualizar.

  • El flujo espera un .

  • 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 o uno de los siguientes comandos en la tabla en cuestión: , , , , , o .

  • El handler 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.

13.5.4.17. Sintaxis de

SHOW [GLOBAL | SESSION] STATUS [LIKE '']

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 , 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 y son nuevas en MySQL 5.0.2 Con , obtiene los valores de estado para todas las conexiones a MySQL. Con , obtiene los valores de estado para la conexión actual. Si no usa estas opciones, por defecto es . es sinónimo de .

Tenga en cuenta que algunas variables de estado sólo tienen un valor global. Para ellas obtiene el mismo valor para y .

13.5.4.18. Sintaxis de

SHOW TABLE STATUS [FROM ] [LIKE '']

funciona como , pero proporciona mucha más información acerca de cada tabla. Puede obtener esta lista usando el comando mysqlshow --status . Desde MySQL 5.0.1, este comando también muestra información sobre vistas.

returna los siguientes campos:

  • Nombre de tabla.

  • Motor para la tabla. Antes de MySQL 4.1.2, este valor se llama . Consulte Capítulo 14, Motores de almacenamiento de MySQL y tipos de tablas.

  • Número de versión del fichero de la tabla.

  • Formato de almacenamiento de registros (, , , , ). Desde MySQL/InnoDB 5.0.3, el formato de tablas InnoDB se reporta como o . Antes de 5.0.3, las tablas InnoDB siempre están en formato .

  • Número de registros. Algunos motores como , guardan el número exacto.

    Para otros motores, como , este valor es una aproximación y puede variar del valor real hasta de un 40 a 50%. En tales casos, use para obtener el número real de registros.

    El valor es para tablas en la base de datos .

  • Longitud de registro media.

  • Tamaño del fichero de datos.

  • 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.

  • Tamaño de fichero índice.

  • Número de bytes reservados no usados.

  • Siguiente valor .

  • Cuándo se creó la tabla .

  • Cuándo se actualizó por última vez el fichero de datos.

  • Cuándo se chequeó la tabla por última vez.

  • Conjunto de carácteres y colación de la tabla.

  • Valor de checksum en vivo (si hay).

  • Opciones extra usadas con .

  • 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 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 () los valores , , y 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 son excepto que indicata el nombre de vista y dice .

13.5.4.19. Sintaxis de

SHOW [FULL] TABLES [FROM ] [LIKE '']

lista las tablas no en una base de datos dada. Puede obtener esta lista usando el comando mysqlshow .

Antes de MySQL 5.0.1, la salida de 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 de forma que muestra una segunda columna de salida. Los valores para la segunda columna son para una tabla para una vista.

Nota: Si no tiene permisos para una tabla, la tabla no se muestra en la salida de o mysqlshow db_name.

13.5.4.20. Sintaxis de

SHOW TRIGGERS [FROM ] [LIKE ]

lista los disparadores definidos en el MySQL server. Se implementó en MySQL 5.0.10.

Para el disparadores 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 con , la expresión a cumplir () 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:

  • : Nombre del disparador.

  • : Evento que invoca el disparador. Debe ser , , o .

  • : La tabla para la que se define el disparador.

  • : Comando a ejecutar cuando se invoca el disparador. Es lo mismo que el texto mostrado en la columna de .

  • : Puede ser o .

  • : Actualmente el valor de esta columna siempre es .

Debe tener el permiso para ejecutar .

Consulte Sección 22.1.16, “La tabla .

13.5.4.21. Sintaxis de

SHOW [GLOBAL | SESSION] VARIABLES [LIKE '']

muestra los valores de algunas variables de sistema de MySQL. Esta información puede obtenerse usando el comando mysqladmin variables .

Con la opción , obtiene los valores que se usan para nuevas conexiones de MySQL. Con , obtiene los valores que hay en efecto para la conexión actual. Si no usa estas opciones, por defecto es .

es sinónimo de .

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 . Consulte Sección 5.3.1, “Opciones del comando mysqld y Sección 13.5.3, “Sintaxis de .

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 , 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      |
+-----------------------+----------+ 

13.5.4.22. Sintaxis de

SHOW WARNINGS [LIMIT [,] ]
SHOW COUNT(*) 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, , sólo muestra los errores. Consulte Sección 13.5.4.9, “Sintaxis de .

La lista de mensajes se resetea para cada nuevo comando que use una tabla.

El comando muestra el número total de errores, advertencias y notas. Puede recibir este número de la variable :

SHOW COUNT(*) WARNINGS;
SELECT @@warning_count;

El valor de puede ser mayor que el número de mensajes mostrados por si la variable de sistema 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 tiene la misma sintaxis que para el comando . Consulte Sección 13.2.7, “Sintaxis de .

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 . Consulte Sección 24.3.3.63, “.

Las advertencias se generan para comandos tales como y comandos DML tales como , , , y .

El siguiente comando 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 y advertencias de conversiones para :

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 . Por defecto, su valor es 64. Para cambiar el número de mensajes que quiere almacenar, cambie el valor de . En el siguiente ejemplo, el comando produce tres mensajes de advertencia, pero sólo se almacena uno porque 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 a 0. En este caso, indica cuántas advertencias ocurren, pero ninguno de los mensajes se almacenan.

Desde MySQL 5.0.3, puede poner la variable de sesión a 0 para que las advertencias del nivel no se guarden.

13.5.5. Otras sentencias para la administración

13.5.5.1. Sintaxis de

CACHE INDEX
   [, ] ...
  IN 

:
   [[INDEX|KEY] ([, ] ...)]

El comando asigna índices de tabla a una caché de clave específica. Se usa sólo para tablas .

El siguiente comando asigna índices de las tablas , , y a la caché de claves llamada :

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 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 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.

13.5.5.2. Sintaxis de

FLUSH [LOCAL | NO_WRITE_TO_BINLOG]  [, ] ...

Debe usar el comando si quiere limpiar algunas de las cachés internas que usa MySQL . Para ejecutar , debe tener el permiso .

puede ser cualquiera de los siguientes valores:

  • 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 . Cuando ocurren sucesivamente más de 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, “' is blocked”. Puede arrancar mysqld con para evitar este mensaje de error.

  • Recarga las claves DES del fichero que se especifica con la opción en tiempo de arranque del servidor.

  • 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 al servidor mysqld (excepto en algunas versiones Mac OS X 10.3 donde mysqld ignora y ).

  • Recarga los permisos de las tablas de permisos en la base de datos .

  • Defragmenta caché de consulta para utilizar mejor su memoria. Este comando no borra ninguna consulta de la caché, no como .

  • 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”.

  • [, ] ...]

    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. también borra todos los resultados de consultas de la caché de consultas, como el comando .

  • Cierra todas las tablas abiertas y bloquea todas las tablas para todas las bases de datos con una bloqueo de lectura hasta que ejecute . 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.

  • 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. no se aplica al límite en conexiones máximas simultáneas. Consulte Sección 13.5.1.3, “Sintaxis de y .

En MySQL 5.0, los comandos se escriben en el lob binario a no ser que la plabra (o su alias ) se use. Nota: , , , y 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 , , , , o .

Consulte Sección 13.5.5.5, “Sintaxis de para información acerca cómo se usa el comando para replicación.

13.5.5.3. Sintaxis de

KILL [CONNECTION | QUERY] 

Cada conexión a mysqld se ejecuta en un flujo separado. Puede ver los flujos en ejecución con el comando y matar un flujo con el comando .

En MySQL 5.0.0, permite los modificadores opcionales o :

  • es lo mismo que sin modificadores: termina la conexión asociada con el dado.

  • termina el comando que la conexión está ejecutando actualmente, pero deja a la conexión intacta.

Si tiene el permiso , 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 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 , 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 , y , el flag se chequea tras leer un bloque de registros. Si el flag kill está activado, el comando se aborta.

  • Durante , 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 o , 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.

  • aborta y retorna .

  • Un flujo rápidamente vuelca (inserta) todos los registros que tiene en memoria y luego termina.

  • Si el flujo está en el handler de bloqueo (estado: ), 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 o en una tabla 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).

13.5.5.4. Sintaxis de

LOAD INDEX INTO CACHE
   [, ] ...

:
  
    [[INDEX|KEY] ([, ] ...)]
    [IGNORE LEAVES]

El comando en MySQL 5.0 precarga un índice de tabla en la caché de clave para la que se ha asignado por un comando , o en la caché de claves por defecto en otro caso. se usa sólo para tablas .

El modificador 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 y :

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 . Sólo precarga bloques para los nodos que no sean hojas de .

La sintaxis de 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.

13.5.5.5. Sintaxis de

RESET  [, ] ...

El comando se usa para limpiar el estado de varias operaciones de servidor. Actúa como una versión más fuerte del comando . Consulte Sección 13.5.5.2, “Sintaxis de .

Debe tener el permiso para ejecutar ,

puede ser cualquiera de las siguientes: