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