Capítulo 8. Programas cliente y utilidades MySQL
Anterior |  | Siguiente

## Capítulo 8. Programas cliente y utilidades MySQL

Hay muchos programas clientes MySQL distintos que conectan con el servidor para acceder a la base de datos o realizar tareas administrativas. Existen también otras utilidades, que no comunican con el servidor, pero que realizan operaciones relacionadas con MySQL.

Este capítulo proporciona un breve resumen de estos programas y luego una descripción más detallada de cada uno. La descripción indica cómo invocar cada programa y las opciones que entiende. Consulte Capítulo 4, Usar los programas MySQL para información general sobre la invocación de los programas y sus opciones específicas.

## 8.1. Panorámica de scripts y utilidades del lado del cliente

La siguiente lista describe brevemente los programas clientes y las utilidades MySQL:

- `myisampack`

  Utilidad que comprime tablas `MyISAM` para producir tablas más pequeñas de sólo lectura. Consulte Sección 8.2, “myisampack, el generador de tablas comprimidas de sólo lectura de MySQL”.

- `mysql`

  La herramienta de línea de comando para introducir comandos SQL interactivamente o ejecutarlos desde un fichero en modo batch. Consulte Sección 8.3, “La herramienta intérprete de comandos mysql”.

- `mysqlaccess`

  Script que verifica los permisos de acceso para una combinación de máquina, usuario y base de datos.

- `mysqladmin`

  Cliente que realiza tareas administrativas, tales como crear y borrar bases de datos, recargar las tablas de permisos, volcar tablas a disco y reabrir ficheros de log. mysqladmin también puede utilizarse para consultar la versión, información de procesos, e información de estado del servidor. Consulte Sección 8.4, “Administrar un servidor MySQL con mysqladmin”.

- `mysqlbinlog`

  Utilidad para leer comados de un log binario. El log de comandos ejecutados contenidos en el fichero de log binario puede utilizarse para ayudar en la recuperación de una fallida. Consulte Sección 8.5, “La utilidad mysqlbinlog para registros binarios”.

- MySQL AB proporciona tres programas con interfícies gráficas para usar con el servidor MySQL:

  - MySQL Administrator: Esta herramienta se usa para administrar servidores MySQL, bases de datos, tablas y usuarios.

  - MySQL Query Browser: MySQL AB proporciona esta herramienta gráfica para crear, ejecutar y optimizar consultas en bases de datos MySQL.

  - MySQL Migration Toolkit: Esta herramienta ayuda en la migración de esquemas y datos de otros sistemas de gestión de bases de datos realcionales a MySQL.

- `mysqlcheck`

  Cliente de mantenimiento de tablas que verifica, repara, analiza y optimiza tablas. Consulte Sección 8.6, “El programa mysqlcheck para mantener y reparar tablas”.

- `mysqldump`

  Cliente que vuelca una base de datos MySQL en un fichero como comandos SQL o como ficheros separados por tabuladores. Originalmente fue creado como freeware por Igor Romanenko. Consulte Sección 8.7, “El programa de copia de seguridad de base de datos mysqldump”.

- `mysqlhotcopy`

  Utilidad que realiza copias de seguridad rápidas de tablas `MyISAM` o `ISAM` mientras el servidor está en ejecución .Consulte Sección 8.8, “El programa de copias de seguridad de base de datos mysqlhotcopy”.

- `mysqlimport`

  Cliente que importa ficheros de texto en sus respectivas tablas usando `LOAD DATA INFILE`. Consulte Sección 8.9, “El programa para importar datos mysqlimport”.

- `mysqlshow`

  Cliente que muestra información de bases de datos, tablas, columnas, e índices. Consulte Sección 8.10, “Mostrar bases de datos, tablas y columnas con mysqlshow”.

- `perror`

  Utilidad que muestra el significado de los errores de sistema de MySQL. Consulte Sección 8.11, “perror, explicación de códigos de error”.

- `replace`

  Programa que cambia cadenas de caracteres en ficheros o en la entrada estándar. Consulte Sección 8.12, “La utilidad replace de cambio de cadenas de caracteres”.

Cada programa MySQL tienen varias opciones, pero todos ellos proporcionan una opción `--help` que puede utilizarse para obtener una descripción completa de las distintas opciones del programa. Por ejemplo, mysql --help.

Los clientes MySQL que comunican con el servidor usando la biblioteca `mysqlclient` usan las siguientes variables de entorno:

`MYSQL_UNIX_PORT` | El fichero socket de Unix; se utiliza para conexiones al `localhost`
`MYSQL_TCP_PORT` | Puerto por defecto; se utiliza para conexiones TCP/IP
`MYSQL_PWD` | Contraseña por defecto
`MYSQL_DEBUG` | Opciones de traza para depurar código
`TMPDIR` | Directorio donde se crean las tablas y ficheros temporales

El uso de `MYSQL_PWD` no es seguro. Consulte Sección 5.7.6, “Guardar una contraseña de forma segura”.

Puede cambiar las opciones por defecto o valores especificados en las variables de entorno para todos los programas estándar, especificando las opciones en un fichero de opciones o en la línea de comandos. Sección 4.3, “Especificar opciones de programa”.

## 8.2. myisampack, el generador de tablas comprimidas de sólo lectura de MySQL

La utilidad myisampack comprime tablas `MyISAM` . myisampack funciona comprimiendo cada columna de la tabla separadamente. Normalmente, myisampack comprime el fichero de datos un 40%-70%.

Cuando la tabla se utiliza posteriormente, el servidor lee en la memoria la información que se necesita para descomprimir las columnas. Esto da un rendimiento mucho mejor al acceder a registros individuales, ya que sólo se tiene que descomprimir un registro.

Siempre que es posible, MySQL utiliza `mmap()` para realizar operaciones de mapeo en memoria de tablas comprimidas. Si `mmap()` no funciona, MySQL vuelve a operaciones normales de escritura/lectura en ficheros.

Tenga en cuenta lo siguiente:

- Si el servidor mysqld se invoca con la opción `--skip-external-locking`, no es buena idea invocar myisampack si la tabla tiene que actualizarse durante el proceso de compresión.

- Tras su compresión, una tabla será de sólo lectura. Esto, normalmente, es lo deseable (como cuando se accede a tablas comprimidas en un CD). Permitir escrituras en tablas comprimidas está en nuestra lista de cosas pendientes, pero con poca prioridad.

- myisampack comprime columnas `BLOB` o `TEXT` . El antiguo programa pack_isam para tablas `ISAM` no puede.

Invoque myisampack de la siguiente forma:

    shell> myisampack [opciones] nombre_fichero ...

Cada nombre de fichero debe ser el nombre de un fichero índice (`.MYI`) . Si no se encuentra en el directorio de la base de datos, debe especificar la ruta al fichero. Se permite omitir la extensión `.MYI` .

myisampack soporta las siguientes opciones:

- `--help`, `-?`

  Muestra mensaje de ayuda y acaba.

- `--backup`, `-b`

  Realiza una copia de seguridad de los datos de la tabla usando el nombre ``nombre_tabla`.OLD`.

- `--debug[=`opciones_de_depuración`]`, `-# [`opciones_de_depuración`]`

  Escribe un log de depuración. La cadena de caracteres `opciones_de_depuración` a menudo es `'d:t:o,`nombre_fichero`'`.

- `--force`, `-f`

  Crea una tabla comprimida incluso si llega a ser mayor que la original o si el fichero temporal de una invocación anterior de myisampack ya existe. (myisampack crea un fichero temporal llamado ``nombre_tabla`.TMD` cuando comprime la tabla. Si se mata myisampack, el fichero `.TMD` puede no borrarse.) Normalmente, myisampack acaba con un error si encuentra que ``nombre_tabla`.TMD` existe. Con `--force`, se fuerza myisampack a comprimir la tabla.

- `--join=`nombre_de_tabla_grande``, `-j `nombre_de_tabla_grande``

  Junta todas las tablas nombradas en la línea de comandos en una única tabla `nombre_de_tabla_grande`. Todas las tablas que hay que combinar deben tener una estructura idéntica (los mismos nombres de columna y tipos, los mismos índices, etc).

- `--packlength=`#``, `-p `#``

  Especifica el tamaño de almacenamiento del registro, en bytes. El valor debe ser 1, 2, o 3. myisampack almacena todos los registros con punteros de 1, 2, o 3 bytes. En la mayoría de casos normales, myisampack puede determinar el valor de longitud óptimo antes de empezar a comprimir el fichero, pero puede darse cuenta durante el proceso de compresión de que podría haber usado una longitud inferior. En ese caso, myisampack muestra una nota diciendo que en la siguente compresión del mismo fichero, puede usarse una longitud de fichero inferior.

- `--silent`, `-s`

  Modo silencioso. Sólo muestra mensajes de error.

- `--test`, `-t`

  No comprime la tabla, sólo prueba la compresión.

- `--tmpdir=`ruta``, `-T `ruta``

  myisampack crea en ese directorio los ficheros temporales.

- `--verbose`, `-v`

  Modo explícito. Muestra información sobre el proceso de compresión y su resultado.

- `--version`, `-V`

  Muestra información de la versión y sale.

- `--wait`, `-w`

  Espera y vuelve a empezar si la tabla está en uso. Si el servidor mysqld se invocó con la opción `--skip-external-locking`, no es buena idea invocar myisampack si existe la posibilidad que el servidor actualice la tabla durante el proceso de compresión.

La siguiente secuencia de comandos ilustra una típica sesión de compresión de tablas:

    shell> ls -l station.*
    -rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.MYD
    -rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.MYI
    -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

    shell> myisamchk -dvv station

    MyISAM file:     station
    Isam-version:  2
    Creation time: 1996-03-13 10:08:58
    Recover time:  1997-02-02  3:06:43
    Data records:              1192  Deleted blocks:              0
    Datafile parts:            1192  Deleted data:                0
    Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2
    Max datafile length:   54657023  Max keyfile length:   33554431
    Recordlength:               834
    Record format: Fixed length

    table description:
    Key Start Len Index   Type                 Root  Blocksize    Rec/key
    1   2     4   unique  unsigned long        1024       1024          1
    2   32    30  multip. text                10240       1024          1

    Field Start Length Type
    1     1     1
    2     2     4
    3     6     4
    4     10    1
    5     11    20
    6     31    1
    7     32    30
    8     62    35
    9     97    35
    10    132   35
    11    167   4
    12    171   16
    13    187   35
    14    222   4
    15    226   16
    16    242   20
    17    262   20
    18    282   20
    19    302   30
    20    332   4
    21    336   4
    22    340   1
    23    341   8
    24    349   8
    25    357   8
    26    365   2
    27    367   2
    28    369   4
    29    373   4
    30    377   1
    31    378   2
    32    380   8
    33    388   4
    34    392   4
    35    396   4
    36    400   4
    37    404   1
    38    405   4
    39    409   4
    40    413   4
    41    417   4
    42    421   4
    43    425   4
    44    429   20
    45    449   30
    46    479   1
    47    480   1
    48    481   79
    49    560   79
    50    639   79
    51    718   79
    52    797   8
    53    805   1
    54    806   1
    55    807   20
    56    827   4
    57    831   4

    shell> myisampack station.MYI
    Compressing station.MYI: (1192 records)
    - Calculating statistics

    normal:     20  empty-space:   16  empty-zero:     12  empty-fill:  11
    pre-space:   0  end-space:     12  table-lookups:   5  zero:         7
    Original trees:  57  After join: 17
    - Compressing file
    87.14%
    Remember to run myisamchk -rq on compressed tables

    shell> ls -l station.*
    -rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.MYD
    -rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.MYI
    -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

    shell> myisamchk -dvv station

    MyISAM file:     station
    Isam-version:  2
    Creation time: 1996-03-13 10:08:58
    Recover time:  1997-04-17 19:04:26
    Data records:               1192  Deleted blocks:              0
    Datafile parts:             1192  Deleted data:                0
    Datafile pointer (bytes):      3  Keyfile pointer (bytes):     1
    Max datafile length:    16777215  Max keyfile length:     131071
    Recordlength:                834
    Record format: Compressed

    table description:
    Key Start Len Index   Type                 Root  Blocksize    Rec/key
    1   2     4   unique  unsigned long       10240       1024          1
    2   32    30  multip. text                54272       1024          1

    Field Start Length Type                         Huff tree  Bits
    1     1     1      constant                             1     0
    2     2     4      zerofill(1)                          2     9
    3     6     4      no zeros, zerofill(1)                2     9
    4     10    1                                           3     9
    5     11    20     table-lookup                         4     0
    6     31    1                                           3     9
    7     32    30     no endspace, not_always              5     9
    8     62    35     no endspace, not_always, no empty    6     9
    9     97    35     no empty                             7     9
    10    132   35     no endspace, not_always, no empty    6     9
    11    167   4      zerofill(1)                          2     9
    12    171   16     no endspace, not_always, no empty    5     9
    13    187   35     no endspace, not_always, no empty    6     9
    14    222   4      zerofill(1)                          2     9
    15    226   16     no endspace, not_always, no empty    5     9
    16    242   20     no endspace, not_always              8     9
    17    262   20     no endspace, no empty                8     9
    18    282   20     no endspace, no empty                5     9
    19    302   30     no endspace, no empty                6     9
    20    332   4      always zero                          2     9
    21    336   4      always zero                          2     9
    22    340   1                                           3     9
    23    341   8      table-lookup                         9     0
    24    349   8      table-lookup                        10     0
    25    357   8      always zero                          2     9
    26    365   2                                           2     9
    27    367   2      no zeros, zerofill(1)                2     9
    28    369   4      no zeros, zerofill(1)                2     9
    29    373   4      table-lookup                        11     0
    30    377   1                                           3     9
    31    378   2      no zeros, zerofill(1)                2     9
    32    380   8      no zeros                             2     9
    33    388   4      always zero                          2     9
    34    392   4      table-lookup                        12     0
    35    396   4      no zeros, zerofill(1)               13     9
    36    400   4      no zeros, zerofill(1)                2     9
    37    404   1                                           2     9
    38    405   4      no zeros                             2     9
    39    409   4      always zero                          2     9
    40    413   4      no zeros                             2     9
    41    417   4      always zero                          2     9
    42    421   4      no zeros                             2     9
    43    425   4      always zero                          2     9
    44    429   20     no empty                             3     9
    45    449   30     no empty                             3     9
    46    479   1                                          14     4
    47    480   1                                          14     4
    48    481   79     no endspace, no empty               15     9
    49    560   79     no empty                             2     9
    50    639   79     no empty                             2     9
    51    718   79     no endspace                         16     9
    52    797   8      no empty                             2     9
    53    805   1                                          17     1
    54    806   1                                           3     9
    55    807   20     no empty                             3     9
    56    827   4      no zeros, zerofill(2)                2     9
    57    831   4      no zeros, zerofill(1)                2     9

myisampack muestra la siguiente información:

- `normal`

  Número de columnas para el que no se necesita compresión extra.

- `empty-space`

  Número de columnas que contienen valores que son sólo espacios, que ocupan un bit.

- `empty-zero`

  Número de columnas que contienen valores que son sólo ceros binarios; ocupan un bit.

- `empty-fill`

  Número de columnas de tipo entero que no ocupan el rango completo de bytes de su tipo; se cambian a un tipo inferior. Por ejemplo, una columna `BIGINT` (ocho bytes) puede almacenarse como una columna `TINYINT` (un byte) si todos sus valores están en el rango de `-128` a `127`.

- `pre-space`

  Número de columnas decimales que se almacenan con espacios iniciales. En este caso, cada valor contiene un contador para el número de espacios precedentes.

- `end-space`

  Número de columnas que tienen muchos espacios al final. En este caso, cada valor contiene un contador para el número de espacios al final.

- `table-lookup`

  La columna tiene pocos valores distintos, que se convierten a `ENUM` antes de la compresión Huffman.

- `zero`

  Número de columnas cuyos valores son todos cero.

- `Original trees`

  Número inicial de árboles Huffman.

- `After join`

  Número de árboles Huffman distintos que quedan tras unir árboles para tener algún espacio de cabecera.

Tras comprimir una tabla, myisamchk -dvv muestra información adicional acerca de cada columna:

- `Type`

  El tipo de la columna. El valor puede contener cualquiera de los siguientes descriptores:

  - `constant`

    Todos los registros tienen el mismo valor.

  - `no endspace`

    No guarda el espacio final.

  - `no endspace, not_always`

    No guarda el espacio final y no realiza compresión en caso de que haya espacio final en todos los valores.

  - `no endspace, no empty`

    No guarda el espacio final. No guarda valores vacíos.

  - `table-lookup`

    La columna se convirtió a `ENUM`.

  - `zerofill(`n`)`

    Los `n` bytes más significativos en el valor son siempre 0 y no se guardan.

  - `no zeros`

    No almacena ceros.

  - `always zero`

    Los valores cero se guardan usando un bit.

- `Huff tree`

  Número de árboles Huffman asociados con cada columna.

- `Bits`

  Número de bits usados en el árbol Huffman.

Tras ejecutar myisampack, es necesario lanzar myisamchk para volver a crear algunos índices. Al mismo tiempo, se puede ordenar los bloques de índices y crear estadísticas, que el optimizador MySQL necesita para trabajar de forma más eficiente:

    shell> myisamchk -rq --sort-index --analyze nombre_de_tabla.MYI

Una vez instalada la tabla comprimida en el directorio de la base de datos MySQL, debe ejecutar mysqladmin flush-tables para forzar mysqld a comenzar a usar la nueva tabla.

Para descomprimir una tabla comprimida, use la opción `--unpack` con myisamchk o isamchk.

## 8.3. La herramienta intérprete de comandos mysql

mysql es un simple shell SQL (con capacidades GNU `readline`). Soporta uso interactivo y no interactivo. Cuando se usa interactivamente, los resultados de las consultas se muestran en formato de tabla ASCII. Cuando se usa no interactivamente (por ejemplo, como filtro), el resultado se presenta en formato separado por tabuladores. El formato de salida puede cambiarse usando opciones de línea de comandos.

Si tiene problemas relacionados con memoria insuficiente para conjuntos de resultados grandes, utilice la opción `--quick`. Esto fuerza mysql a devolver los resultados desde el servidor registro a registro en lugar de recibir todo el conjunto de resultados y almacenarlo en memoria antes de mostrarlo. Esto se hace usando `mysql_use_result()` en lugar de `mysql_store_result()` para recibir el conjunto de resultados.

Usar mysql es muy sencillo. Invóquelo desde el prompt de su intérprete de comandos como se muestra a continuación:

    shell> mysql nombre_base_de_datos

O:

    shell> mysql --user=nombre_usuario --password=contraseña nombre_base_de_datos

Cuando introduzca un comando SQL, acábelo con '`;`', `\g`, o `\G` y pulse Enter.

Puede ejecutar un script simplemente así:

    shell> mysql nombre_base_de_datos < script.sql > output.tab

mysql soporta las siguientes opciones:

- `--help`, `-?`

  Muestra el mensaje de ayuda y sale.

- `--batch`, `-B`

  Muestra los resultados usando tabuladores como separadores de columnas, con cada registro en una nueva línea. Con esta opción mysql no usa el fichero de historial.

- `--character-sets-dir=`ruta``

  Directorio donde los conjuntos de caracteres están instalados. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--compress`, `-C`

  Comprime toda la información enviada entre el cliente y el servidor si ambos soportan compresión.

- `--database=`nombre_base_de_datos``, `-D `nombre_base_de_datos``

  La base de datos a usar. Esto es útil sobretodo en un fichero de opciones.

- `--debug[=`opciones_de_depuración`]`, `-# [`opciones_de_depuración`]`

  Escribe un log de depuración. La cadena de caracteres `opciones_de_depuración` a menudo es `'d:t:o,`nombre_de_fichero`'`. Por defecto es `'d:t:o,/tmp/mysql.trace'`.

- `--debug-info`, `-T`

  Muestra alguna información de depuración al salir del programa.

- `--default-character-set=`conjunto de caracteres``

  Usa `conjunto de caracteres` como conjunto de caracteres por defecto. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--execute=`comando``, `-e `comando``

  Ejecuta el comando y sale. El formato de salida por defecto es como el producido con `--batch`. Consulte Sección 4.3.1, “Usar opciones en la raya de comando” para algunos ejemplos.

- `--force`, `-f`

  Continua incluso si ocurre un error SQL.

- `--host=`nombre_equipo``, `-h `nombre_equipo``

  Conecta al servidor MySQL en el equipo especificado.

- `--html`, `-H`

  Produce la salida en HTML.

- `--ignore-space`, `-i`

  Ignora espacios tras los nombres de funciones. El efecto de esta opción se describe en la discusión para `IGNORE_SPACE` en Sección 5.3.2, “El modo SQL del servidor”.

- `--local-infile[={0|1}]`

  Activa o desactiva la función `LOCAL` para `LOAD DATA INFILE`. Sin valor, la opción activa `LOCAL`. Puede darse como `--local-infile=0` o `--local-infile=1` para desactivar explícitamente o activar `LOCAL`. Activar `LOCAL` no tiene efecto si el servidor no lo soporta.

- `--named-commands`, `-G`

  Los comandos con nombre están activados por defecto. Se permite comandos con formato largo así como comandos abreviados con \*. Por ejemplo, se reconoce tanto `quit` como `\q` .

- `--no-auto-rehash`, `-A`

  No hay un recálculo del hash (rehashing) automático. Esta opción hace que mysql arranque más rápido, pero debe realizar el comando `rehash` si quiere usar el completado automático de tabla y columna.

- `--no-beep`, `-b`

  No hace ningún sonido cuando ocurre un error.

- `--no-named-commands`, `-g`

  Desactiva los comandos con nombre. Use la forma `\*` únicamente, o use comandos con nombre sólo al comienzo de una línea, acabando con punto y coma ('`;`'). Desde MySQL 3.23.22, mysql arranca con esta opción activada por defecto. De todos modos, incluso con esta opción, los comandos con formato largo funcionan desde la primera línea.

- `--no-pager`

  No usa paginación para mostrar la salida de una consulta. La paginación en la salida se discute más en Sección 8.3.1, “Comandos mysql”.

- `--no-tee`

  No copia la salida en un fichero. Los ficheros tee se discuten más en Sección 8.3.1, “Comandos mysql”.

- `--one-database`, `-O`

  Ignora comandos excepto aquéllos para la base de datos por defecto, nombrada en la línea de comandos. Esto es útil para evitar actualizaciones de otras bases de datos en el log binario.

- `--pager[=`comando`]`

  Este comando se utiliza para paginar la salida de una consulta. Si el comando se omite, el paginador por defecto es el valor de la variable de entorno `PAGER`. Paginadores válidos son less, more, cat [> nombre_de_fichero], etcétera. Esta opción sólo funciona en Unix. No funciona en modo batch. La paginación de la salida de datos (output) se discute también en Sección 8.3.1, “Comandos mysql”.

- `--password[=`contraseña`]`, `-p[`contraseña`]`

  La contraseña a usar al conectar al servidor. Si se usa la forma de opción corta (`-p`), no se deben poner espacios entre la opción y la contraseña. Si se omite el valor de la contraseña, a continuación de `--password` o `-p` en la línea de comandos, aparece un prompt pidiéndola. La contraseña debe omitirse en sistemas Unix basados en SysV, ya que debe mostrarse en la salida de `ps`.

- `--port=`puerto_num``, `-P `puerto_num``

  El puerto TCP/IP a usar en la conexión.

- `--prompt=`formato_cadena``

  Asigna al prompt el formato especificado. Por defecto es `mysql>`. Las secuencias especiales que soporta el prompt se describen en Sección 8.3.1, “Comandos mysql”.

- `--protocol={TCP | SOCKET | PIPE | MEMORY}`

  Protocolo de conexión a usar.

- `--quick`, `-q`

  No cachea cada resultado de consulta, muestra cada registro según va llegando. Esto puede ralentizar el servidor si la salida se suspende. Con esta opción, mysql no usa el fichero histórico.

- `--raw`, `-r`

  Muestra los valores de las columnas sin conversión de escape. Se usa a menudo con la opción `--batch`.

- `--reconnect`

  Si se pierde la conexión con el servidor, intenta reconectar automáticamente. Se intenta un único intento de reconexión cada vez que se pierde la conexión. Para eliminar el comportamiento de la reconexión, use `--skip-reconnect`.

- `--safe-updates`, `--i-am-a-dummy`, `-U`

  Sólo permite aquellos comandos `UPDATE` y `DELETE` que especifica cuáles registros se deben modificar usando valores clave. Si tiene activada esta opción en un fichero de opciones, puede evitarla usando `--safe-updates` en la línea de comandos. Consulte Sección 8.3.3, “Sugerencias acerca de mysql” para más información sobre esta opción.

- `--secure-auth`

  No envía contraseñas al servidor en formato antiguo (pre-4.1.1). Esto evita realizar conexiones con servidores que no usen el formato de contraseña nuevo.

- `--show-warnings`

  Muestra los mensajes de advertencia tras cada comando, si es necesario. Esta opción se aplica en modo interactivo y batch. Esta opción se añadió en MySQL 5.0.6.

- `--sigint-ignore`

  Ignora señales `SIGINT` (típicamente el resultado de pulsar Control-C).

- `--silent`, `-s`

  Modo silencioso. Produce menos salida de datos (output). Esta opción puede utilizarse múltiples veces para producir cada vez menos salida de datos.

- `--skip-column-names`, `-N`

  No escribe nombres de columnas en los resultados.

- `--skip-line-numbers`, `-L`

  No escribe el número de línea en los errores. Es útil cuando se quiere comparar ficheros de resultados que incluyan mensajes de error.

- `--socket=`ruta``, `-S `ruta``

  Fichero socket a usar para la conexión.

- `--table`, `-t`

  Muestra la salida de datos (output) en formato de tabla. Éste es el modo de funcionamiento por defecto para modo interactivo, pero puede usarse para producir la salida de datos de la tabla en modo batch.

- `--tee=`nombre_fichero``

  Añade una copia de la salida de datos (output) al fichero dado. Esta opción no funciona en modo batch. Más información sobre ficheros tee en Sección 8.3.1, “Comandos mysql”.

- `--unbuffered`, `-n`

  Vuelca el buffer después de cada consulta.

- `--user=`nombre_usuario``, `-u `nombre_usuario``

  El nombre de usuario MySQL usado al conectar al servidor.

- `--verbose`, `-v`

  Modo explícito. Produce más salida de datos (output) acerca de lo que hace el programa. Esta opción puede escribirse múltiples veces para producir más y más salida. (Por ejemplo, `-v -v -v` produce la salida de datos en formato de tabla incluso en modo batch.)

- `--version`, `-V`

  Muestra información de la versión y sale.

- `--vertical`, `-E`

  Muestra los registros de salida de la consulta verticalmente (una línea por cada valor). Sin esta opción, se puede solicitar este formato de salida de datos (output) para un comando escribiendo `\G` al final del mismo.

- `--wait`, `-w`

  Si la conexión no puede establecerse, espera y vuelve a intentarlo en lugar de abortar.

- `--xml`, `-X`

  Produce salida XML.

Puede asignar las siguientes variables usando las opciones `--`nombre_variable`=`valor``:

- `connect_timeout`

  Número de segundos antes que la conexión dé un timeout. (El valor por defecto es 0).

- `max_allowed_packet`

  La máxima longitud del paquete para enviar al o recibir del servidor. (El valor por defecto es 16MB).

- `max_join_size`

  El límite automático de registros en un join al usar `--safe-updates`. (El valor por defecto es 1.000.000).

- `net_buffer_length`

  El tamaño de búfer para comunicaciones TPC/IP y socket. (El valor por defecto es 16KB).

- `select_limit`

  Límite automático para comandos `SELECT` al usar `--safe-updates`. (El valor por defecto es 1.000).

Es posible asignar valores a las variables usando la sintaxis `--set-variable=`nombre_variable`=`valor`` o `-O `nombre_variable`=`valor``. En MySQL 5.0, esta sintaxis está obsoleta.

En Unix, el cliente mysql escribe un registro de los comandos ejecutados en un fichero histórico. Por defecto, el fichero histórico se llama `.mysql_history` y se crea en el directorio raíz del usuario. Para especificar un fichero diferente, cámbiese el valor de la variable de entorno `MYSQL_HISTFILE`.

Si no se quiere mantener el fichero histórico, primero hay que borrar `.mysql_history` si existe, y luego se utiliza alguna de las siguientes técnicas:

- Se cambia el valor de la variable `MYSQL_HISTFILE` a `/dev/null`. Para que este cambio tenga efecto cada vez que se entra, se pone la asignación de esta variable de entorno en uno de los ficheros de arranque de la shell del usuario.

- Se crea `.mysql_history` como enlace simbólico a `/dev/null`:

      shell> ln -s /dev/null $HOME/.mysql_history

  Sólo es necesario hacer esto una vez.

### 8.3.1. Comandos mysql

mysql envía comandos SQL al servidor para que sean ejecutados. También hay un conjunto de comandos que mysql interpreta por sí mismo. Para obtener una lista de estos comandos, se escribe `help` o `\h` en el prompt `mysql>`:

    mysql> help

    MySQL commands:
    ?         (\h)    Synonym for `help'.
    clear     (\c)    Clear command.
    connect   (\r)    Reconnect to the server.
                      Optional arguments are db and host.
    delimiter (\d)    Set query delimiter.
    edit      (\e)    Edit command with $EDITOR.
    ego       (\G)    Send command to mysql server,
                      display result vertically.
    exit      (\q)    Exit mysql. Same as quit.
    go        (\g)    Send command to mysql server.
    help      (\h)    Display this help.
    nopager   (\n)    Disable pager, print to stdout.
    notee     (\t)    Don't write into outfile.
    pager     (\P)    Set PAGER [to_pager].
                      Print the query results via PAGER.
    print     (\p)    Print current command.
    prompt    (\R)    Change your mysql prompt.
    quit      (\q)    Quit mysql.
    rehash    (\#)    Rebuild completion hash.
    source    (\.)    Execute an SQL script file.
                      Takes a file name as an argument.
    status    (\s)    Get status information from the server.
    system    (\!)    Execute a system shell command.
    tee       (\T)    Set outfile [to_outfile].
                      Append everything into given outfile.
    use       (\u)    Use another database.
                      Takes database name as argument.
    warnings  (\W)    Show warnings after every statement.
    nowarning (\w)    Don't show warnings after every statement.

Cada comando tiene forma corta y larga. La forma larga no es sensible a mayúsculas; la forma corta lo es. La forma larga puede seguirse con un terminador de punto y coma, pero la forma corta no debería.

En el comando `delimiter`, debe evitar el uso del carácter antibarra ('`\`') ya que es un carácter de escape para MySQL.

Los comandos `edit`, `nopager`, `pager`, y `system` sólo funcionan en Unix.

El comando `status` proporciona alguna información sobre la conexión y el servidor que está usando. Si está ejecutando el modo `--safe-updates`, `status` también muestra los valores para las variables mysql que afectan a sus consultas.

Para loguear las consultas y su salida, use el comando `tee`. Todos los datos mostrados por pantalla se guardan en un fichero dado. Esto puede ser muy útil para depurar. Puede activar esta característica en la línea de comandos con la opción `--tee`, o interactivamente con el comando `tee`. El fichero `tee` puede desactivarse interactivamente con el comando `notee`. Ejecutando `tee` de nuevo, vuelve a activar el logueo. Sin parámetros, se utiliza el fichero anterior. Tenga en cuenta que `tee` vuelca los resultados de las consultas al fichero después de cada comando, justo antes que mysql muestre su siguiente prompt.

Navegar o buscar resultados de consultas en modo interactivo usando programas Unix, tales como less, more, o cualquier otro programa similar es posible con la opción `--pager`. Si no especifica ningún valor para la opción, mysql comprueba el valor de la variable de entorno `PAGER` y configura el paginador al valor de la misma. La paginación de la salida de datos (output) puede activarse interactivamente con el comando `pager` y desactivar con `nopager`. El comando tiene un argumento opcional; si se especifica, el programa de paginación se configura con el mismo. Sin argumento, el paginador se configura con el paginador que se especificó en la línea de comandos, o `stdout` si no se especifica paginador.

La paginación de la salida sólo funciona en Unix ya que usa la función `popen()`, que no existe en Windows. Para Windows, la opción `tee` puede usarse para guardar la salida de las consultas, aunque no es tan conveniente como `pager` para navegar por la salida en algunas situaciones.

Algunos consejos sobre el comando `pager`:

- Puede usarlo para escribir en un fichero y que los resultados sólo vayan al fichero:

      mysql> pager cat > /tmp/log.txt

  Puede pasar cualquier opción al programa que quiera usar como paginador:

      mysql> pager less -n -i -S

- En el ejemplo precedente, tenga en cuenta la opción `-S`. Puede encontrarla muy útil para consultar una amplia variedad de resultados. En ocasiones un conjunto de resultados muy amplio es difícil de leer en pantalla. La opción `-S` con less puede hacer el resultado mucho más legible ya que puede desplazarlo horizontalmente usando las flechas de izquierda y derecha. También puede usar `-S` interactivamente con less para activar y desactivar el modo de navegación horizontal. Para más información, lea la página del manual (man) de less:

      shell> man less

- Puede especificar comandos muy complejos para el paginador, para tratar la salida de las consultas:

      mysql> pager cat | tee /dr1/tmp/res.txt \
                | tee /dr2/tmp/res2.txt | less -n -i -S

  En este ejemplo, el comando enviaría los resultados de las consultas a dos ficheros en dos directorios distintos en dos sistemas de ficheros montados en `/dr1` y `/dr2`,y mostraría los resultados en pantalla vía less.

Puede combinar las funciones `tee` y `pager`. Puede tener un fichero tee activado y tener el `pager` configurado con less, siendo capaz de navegar en los resultados con el programa less y al mismo tiempo tener todo en un fichero. La diferencia entre tee en Unix usado con el comando `pager` y el comando `tee` que implementa mysql es que el segundo `tee` funciona incluso si no tiene el tee de Unix disponible. El comando `tee` implementado también loguea todo lo que se muestra por pantalla, mientras que tee en Unix usado con `pager` no loguea tanto. Adicionalmente, el logueo en fichero de `tee` puede activarse y desactivarse interactivamente desde mysql. Esto es útil cuando quiere loguear algunas consultas en un fichero, pero no otras.

En MySQL 5.0, el prompt por defecto `mysql>` puede reconfigurarse. La cadena de caracteres para definir el prompt puede contener las siguientes secuencias especiales:

Opción | Descripción
`\v` | Versión del servidor
`\d` | Base de datos actual
`\h` | Equipo del servidor
`\p` | Puerto TCP/IP usado o fichero socket
`\u` | Nombre de usuario
`\U` | Nombre de cuenta ``nombre_usuario`@`nombre_equipo`` completo
`\\` | Carácter de barra invertida '`\`' literal
`\n` | Carácter de nueva línea
`\t` | Carácter de tabulador
`\` | Espacio (hay un espacio a continuación de la barra invertida)
`\_` | Espacio
`\R` | Hora actual, en formato militar de 24 horas (0-23)
`\r` | Hora actual, en formato estándar de 12 horas (1-12)
`\m` | Minutos de la hora actual
`\y` | Año actual, dos dígitos
`\Y` | Año actual, cuatro dígitos
`\D` | Fecha actual completa
`\s` | Segundos de la hora actual
`\w` | Día actual de la semana en inglés, en formato de tres letras (Mon, Tue, ...)
`\P` | am/pm
`\o` | Mes actual en formato numérico
`\O` | Mes actual en inglés, en formato de tres letras (Jan, Feb, ...)
`\c` | Contador que incrementa con cada comando ejectuado
`\S` | Punto y coma
`\'` | Comilla
`\"` | Comilla doble

'`\`' seguido por cualquier otra letra es esa letra.

Si especifica el comando `prompt` sin argumentos, mysql resetea el prompt al valor por defecto de `mysql>`.

Puede cambiar el prompt de diversas formas:

- Use una variable de entorno

  Puede cambiar la variable de entorno `MYSQL_PS1` con una cadena de caracteres. Por ejemplo:

      shell> export MYSQL_PS1="(\u@\h) [\d]> "

- Con un fichero de opciones

  Puede cambiar la opción `prompt` en el grupo `[mysql]` de cualquier fichero de opciones MySQL, tal como `/etc/my.cnf` o el fichero `.my.cnf` en el directorio raíz. Por ejemplo:

      [mysql]
      prompt=(\\u@\\h) [\\d]>\\_

  En este ejemplo, tenga en cuenta que las barras invertidas son dos. Si asigna el valor del prompt usando la opción `prompt` en un fichero de opciones, se recomienda poner dos barras invertidas al usar las opciones especiales de prompt. Hay algúna redundancia en el conjunto de opciones de prompt disponible y el conjunto de secuencias de caracteres de escape especiales que se reconoce en el fichero de opciones. (Estas secuencias están listadas en Sección 4.3.2, “Usar ficheros de opciones”). La redundancia puede causar problemas si usa sólo una barra invertidas. Por ejemplo, `\s` se interpreta como un espacio en lugar de los segundos actuales. El siguiente ejemplo muestra cómo definir un prompt dentro de un fichero de opciones que incluya la hora actual en formato `HH:MM:SS>`:

      [mysql]
      prompt="\\r:\\m:\\s> "

- Use una opción por línea de comandos

  Puede cambiar la opción `--prompt` en la línea de comandos de mysql. Por ejemplo:

      shell> mysql --prompt="(\u@\h) [\d]> "
      (user@host) [database]>

- Interactivamente

  Puede cambiar el prompt interactivamente usando el comando `prompt` (o `\R`) . Por ejemplo:

      mysql> prompt (\u@\h) [\d]>\_
      PROMPT set to '(\u@\h) [\d]>\_'
      (usuario@equipo) [base_de_datos]>
      (usuario@equipo) [base_de_datos]> prompt
      Returning to default PROMPT of mysql>
      mysql>

### 8.3.2. Ejecutar sentencias SQL desde un fichero de texto

El cliente mysql se usa normalmente de forma interactiva, como se muestra a continuación:

    shell> mysql nombre_base_de_datos

Sin embargo, es posible poner comandos SQL en un fichero y decirle a mysql que lea las entradas de ese fichero. Para ello, cree un fichero `fichero_de_texto` que contenga el comando que quiera ejecutar. Luego invoque mysql como se muestra aquí:

    shell> mysql nombre_base_de_datos < fichero_de_texto

Puede comenzar su fichero de texto con un comando `USE `nombre_base_de_datos``. En este caso, no es necesario especificar el nombre de la base de datos en la línea de comandos:

    shell> mysql < text_file

Si está ejecutando mysql, puede ejecutar un script SQL en un fichero usando el comando `source` o `\.` :

    mysql> source nombre_de_fichero
    mysql> \. nombre_de_fichero

Si desea que el script muestre información de progreso al usuario, puede insertar algunas líneas como

    SELECT '<información>' AS ' ';

que muestra <información>.

Para más información acerca del modo batch, consulte Sección 3.5, “Usar mysql en modo batch”.

### 8.3.3. Sugerencias acerca de mysql

Esta sección describe algunas técnicas que pueden ayudarle a usar mysql de forma más efectiva.

#### 8.3.3.1. Mostrar resultados de consultas verticalmente

Algunos resultados de consultas son mucho más legibles cuando se muestran verticalmente, en lugar del formato habitual de tabla horizontal. Las consultas pueden mostrarse verticalmente terminando las mismas con \G en lugar de un punto y coma. Por ejemplo, valores de texto largos que incluyan nuevas líneas, a menundo son más fáciles de leer en formato vertical:

    mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
    *************************** 1. row ***************************
      msg_nro: 3068
         date: 2000-03-01 23:29:50
    time_zone: +0200
    mail_from: Monty
        reply: monty@no.spam.com
      mail_to: "Thimble Smith" <tim@no.spam.com>
          sbj: UTF-8
          txt: >>>>> "Thimble" == Thimble Smith writes:

    Thimble> Hi.  I think this is a good idea.  Is anyone familiar
    Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
    Thimble> TODO list and see what happens.

    Yes, please do that.

    Regards,
    Monty
         file: inbox-jani-1
         hash: 190402944
    1 row in set (0.09 sec)

#### 8.3.3.2. Usar la opción `--safe-updates`

Una opción de arranque útil para principiantes es `--safe-updates` (o `--i-am-a-dummy`, que tiene el mismo efecto). Es útil para casos donde pueda haber ejecutado un comando `DELETE FROM `nombre_tabla`` pero olvidó la cláusula `WHERE`. Normalmente, ese comando borra todos los registros de la tabla. Con `--safe-updates`, puede borrar registros sólo especificando los valores clave que los identifican. Esto ayuda a prevenir accidentes.

Cuando usa la opción `--safe-updates`, mysql realiza los siguientes comandos al conectarse al servidor MySQL:

    SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000, SQL_MAX_JOIN_SIZE=1000000;

Consulte Sección 13.5.3, “Sintaxis de `SET`”.

El comando `SET` tiene el siguiente efecto:

- No está permitido ejecutar un comando `UPDATE` o `DELETE` a no ser que especifique una condición clave en la cláusula `WHERE` o proporcione una cláusula `LIMIT` (o ambas). Por ejemplo:

      UPDATE nombre_tabla SET columna_no_clave=# WHERE columna_clave=#;

      UPDATE nombre_tabla SET columna_no_clave=# LIMIT 1;

- Todos los resultados grandes de un `SELECT` se limitan automáticamente a 1.000 registros a no ser que el comando incluya una cláusula `LIMIT` .

- Se aborta comandos `SELECT` de múltiples tablas que probablemente necesiten examinar más de 1,000,000 de registros.

Para especificar límites distintos a los anteriores, puede cambiar los valores por defecto con las opciones `--select_limit` y `--max_join_size`:

    shell> mysql --safe-updates --select_limit=500 --max_join_size=10000

#### 8.3.3.3. Deshabilitar las reconexiones automáticas de mysql

Si el cliente mysql pierde la conexión al enviar una consulta, inmediatamente y de forma automática trata de reconectar una vez con el servidor y envía la consulta de nuevo. Sin embargo, incluso si mysql tiene éxito al reconectar, la primera conexión ha terminado y todos los objetos de sesión previos y opciones se pierden: tablas temporales, modo "autocommit", y variables de usuario y de sesión. Este comportamiento puede ser problemático, como en el siguiente ejemplo, donde el servidor se apaga y reinicia sin conocimiento del usuario:

    mysql> SET @a=1;
    Query OK, 0 rows affected (0.05 sec)

    mysql> INSERT INTO t VALUES(@a);
    ERROR 2006: MySQL server has gone away
    No connection. Trying to reconnect...
    Connection id:    1
    Current database: test

    Query OK, 1 row affected (1.30 sec)

    mysql> SELECT * FROM t;
    +------+
    | a    |
    +------+
    | NULL |
    +------+
    1 row in set (0.05 sec)

La variable de usuario `@a` se ha perdido con la conexión, y tras la reconexión no está definida. Si es importante que mysql termine con un error cuando se pierda la conexión, puede arrancar el cliente mysql con la opción `--skip-reconnect` .

## 8.4. Administrar un servidor MySQL con mysqladmin

mysqladmin es un cliente para realizar operaciones administrativas. Se puede usar para comprobar la configuración y el estado actual del servidor, crear y borrar bases de datos, y con más finalidades.

Invoque mysqladmin así:

    shell> mysqladmin [opciones] comando [opciones_de_comando] comando ...

mysqladmin soporta los siguientes comandos:

- `create `nombre_base_de_datos``

  Crea una nueva base de datos llamada `nombre_base_de_datos`.

- `debug`

  Le dice al servidor que escriba información de depuración en el log de error.

- `drop `nombre_base_de_datos``

  Borra la base de datos llamada `nombre_base_de_datos` y todas sus tablas.

- `extended-status`

  Muestra las variables de estado del servidor y sus valores.

- `flush-hosts`

  Vuelca toda la información en la caché del equipo.

- `flush-logs`

  Vuelca todos los logs.

- `flush-privileges`

  Recarga las tablas de permisos (lo mismo que `reload`).

- `flush-status`

  Limpia las variables de estado.

- `flush-tables`

  Vuelca todas las tablas.

- `flush-threads`

  Vuelca la caché de threads.

- `kill id,id,...`

  Mata los threads del servidor.

- `old-password `nueva_contraseña``

  Es como el comando `password` pero guarda la contraseña usando el formato de hash antiguo (pre-4.1). Consulte Sección 5.6.9, “Hashing de contraseñas en MySQL 4.1”.)

- `password `nueva_contraseña``

  Introduce una nueva contraseña. Esto cambia la contraseña a `nueva_contraseña` para la cuenta que usa con mysqladmin para conectar con el servidor.

  Si `nueva_contraseña` contiene espacios u otros caracteres que son especiales para su intérprete de comandos, debe ponerla entre comillas. En Windows, aségurese de usar comillas dobles en lugar de simples; comillas simples no se eliminan de la contraseña sino que se interpretan como parte del acontraseña. Por ejemplo:

  shell> mysqladmin password "mi nueva contraseña"

- `ping`

  Comprueba si el servidor está vivo. El estado retornado por mysqladmin es 0 si el servidor está en ejecución, 1 si no lo está. En MySQL 5.0, el estado es 0 incluso en caso de un error tal como `Access denied`, ya que esto significa que el servidor está en ejecución pero no ha admitido la conexión, lo que no es lo mismo que el servidor no esté en ejecución.

- `processlist`

  Muestra una lista de los threads activos del servidor. Esto es como la salida del comando `SHOW PROCESSLIST`. Si se da la opción `--verbose`, la salida es como la de `SHOW FULL PROCESSLIST`. (Consulte Sección 13.5.4.16, “Sintaxis de `SHOW PROCESSLIST`”.)

- `reload`

  Recarga las tablas de permisos.

- `refresh`

  Vuelca todas las tablas y cierra y abre los ficheros de logs.

- `shutdown`

  Detiene el servidor.

- `start-slave`

  Comienza la replicación en un servidor esclavo.

- `status`

  Muestra un mensaje de estado corto del servidor.

- `stop-slave`

  Detiene la replicación en un servidor esclavo.

- `variables`

  Muestra las variables de sistema del servidor y sus valores.

- `version`

  Muestra información de la versión del servidor.

Todos los comandos pueden abreviarse a un prefijo único. Por ejemplo:

    shell> mysqladmin proc stat
    +----+------+-----------+----+---------+------+-------+------------------+
    | Id | User | Host      | db | Command | Time | State | Info             |
    +----+------+-----------+----+---------+------+-------+------------------+
    | 51 | root | localhost |    | Query   | 0    |       | show processlist |
    +----+------+-----------+----+---------+------+-------+------------------+
    Uptime: 1473624  Threads: 1  Questions: 39487
    Slow queries: 0  Opens: 541  Flush tables: 1
    Open tables: 19  Queries per second avg: 0.0268
    Memory in use: 92M  Max memory used: 410M

El comando mysqladmin status muestra los siguientes valores:

- `Uptime`

  Número de segundos que MySQL server ha estado en ejecución.

- `Threads`

  Número de threads activos (clientes).

- `Questions`

  Número de preguntas (consultas) de los clientes desde el arranque del servidor.

- `Slow queries`

  Número de consultas que han tardado más de `long_query_time` segundos. Consulte Sección 5.10.4, “El registro de consultas lentas (Slow Query Log)”.

- `Opens`

  Número de tablas que el servidor ha abierto.

- `Flush tables`

  Número de comandos `flush ...`, `refresh` y `reload` ejecutados.

- `Open tables`

  Número de tablas abiertas actualmente.

- `Memory in use`

  Cantidad de memoria reservada directamente por el código de mysqld. Este valor se muestra sólo cuando MySQL es ha compilado con `--with-debug=full`.

- `Maximum memory used`

  La cantidad máxima de memoria reservada directamente por el código de mysqld. Este valor se muestra sólo cuando MySQL se ha compilado con `--with-debug=full`.

Si ejecuta mysqladmin shutdown al conectar a un servidor local usando ficheros socket Unix, mysqladmin espera hasta que el fichero con el ID del proceso del servidor se haya borrado, para asegurar que el servidor se ha parado correctamente.

mysqladmin soporta las siguientes opciones:

- `--help`, `-?`

  Muestra un mensaje de ayuda y sale.

- `--character-sets-dir=`ruta``

  Directorio donde están instalados los conjuntos de caracteres. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--compress`, `-C`

  Comprime toda la información enviada entre el cliente y el servidor, si ambos soportan compresión.

- `--count=`#``, `-c `#``

  Número de iteraciones a realizar en la ejecución de comandos repetidos. Esto funciona sólo con `--sleep` (`-i`).

- `--debug[=`opciones_de_depuración`]`, `-# [`opciones_de_depuración`]`

  Escribe un log de depuración. La cadena de caracteres `opciones_de_depuración` a menudo es `'d:t:o,`nombre_de_fichero`'`. Por defecto es `'d:t:o,/tmp/mysqladmin.trace'`.

- `--default-character-set=`conjunto_de_caracteres``

  Usa `conjunto_de_caracteres` como el conjunto de caracteres por defecto. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--force`, `-f`

  No pide confirmación para el comando `drop database`. Con comandos múltiples, continúa incluso si hay un error.

- `--host=`nombre_de_equipo``, `-h `nombre_de_equipo``

  Conecta con el servidor MySQL en un equipo dado.

- `--password[=`contraseña`]`, `-p[`contraseña`]`

  La contraseña a usar cuando conecta con el servidor. Si usa la forma corta de la opción (`-p`), no puede haber un espacio entre la opción y la contraseña. Si omite el valor `contraseña` siguiente a la opción `--password` o `-p` en la línea de comando, aparece un prompt pidiéndola.

- `--port=`número_de_puerto``, `-P `número_de_puerto``

  Puerto TCP/IP para usar en las conexiones.

- `--protocol={TCP | SOCKET | PIPE | MEMORY}`

  Protocolo de conexión en uso. Nuevo en MySQL 4.1.

- `--relative`, `-r`

  Muestra la diferencia entre los valores actuales y anteriores cuando se usa con `-i`. Actualmente, esta opción sólo funciona con el comando `extended-status`.

- `--silent`, `-s`

  Sale silenciosamente si no puede establecerse una conexión con el servidor.

- `--sleep=`retraso``, `-i `retraso``

  Ejecuta comandos una y otra vez, durmiendo durante `retraso` segundos entre ellos.

- `--socket=`ruta``, `-S `ruta``

  El fichero socket a usar en la conexión.

- `--user=`nombre_de_usuario``, `-u `nombre_de_usuario``

  Nombre de usuario MySQL a usar al conectar con el servidor.

- `--verbose`, `-v`

  Modo explícito. Muestra más información sobre lo que hace el programa.

- `--version`, `-V`

  Muestra información sobre la versión y sale.

- `--vertical`, `-E`

  Muestra la salida (output) verticalmente. Es similar a `--relative`, pero la salida es vertical.

- `--wait[=`#`]`, `-w[`#`]`

  Si la conexión no puede establecerse, espera y vuelve a intentarlo en lugar de abortar. Si se da un valor de opción, indica el número de veces a reintentar. El valor por defecto es una vez.

Puede asignar valores a las siguientes variables usando las opciones `--`nombre_de_variable`=`valor`` :

- `connect_timeout`

  El número de segundos máximos antes que la conexión dé un timeout. El valor por defecto es 43200 (12 horas).

- `shutdown_timeout`

  El número máximo de segundos a esperar para la parada del servidor. El valor por defecto es 3600 (1 hora).

También es posible asignar valores a las variables usando la sintaxis `--set-variable=`nombre_de_variable`=`valor`` o `-O `nombre_de_variable`=`valor``. Sin embargo, esta sintaxis está obsoleta desde MySQL 4.0.

## 8.5. La utilidad mysqlbinlog para registros binarios

Los ficheros de log binario que el servidor genera se escriben en formato binario. Para examinar estos ficheros en formato de texto, se utiliza la utilidad mysqlbinlog .

Invoque mysqlbinlog así:

    shell> mysqlbinlog [opciones] fichero_de_log ...

Por ejemplo, para mostrar el contenido del log binario `binlog.000003`, use este comando:

    shell> mysqlbinlog binlog.0000003

La salida incluye todos los comandos contenidos en `binlog.000003`, junto con otra información tal como el tiempo que ha tardado cada comando, el ID del thread del cliente que lo lanzó, la hora en que se ejecutó, etcétera.

Normalmente, mysqlbinlog se utiliza para leer ficheros de log binarios directamente y aplicarlos al servidor MySQL local. También es posible leer logs binarios de un servidor remoto usando la opción `--read-from-remote-server` .

Cuando se vaya a leer logs binarios remotos, deben darse los parámetros de conexión para indicar cómo conectar con el servidor, pero se ignoran a no ser que también se especifique la opción `--read-from-remote-server` . Estas opciones son `--host`, `--password`, `--port`, `--protocol`, `--socket` y `--user`.

También puede utilizarse mysqlbinlog para leer ficheros de logs de relay escritos por un servidor esclavo en el arranque de una replicación. Los logs de relay tienen el mismo formato que los ficheros de log binarios.

El log binario se discute en Sección 5.10.3, “El registro binario (Binary Log)”.

mysqlbinlog soporta las siguientes opciones:

- `--help`, `-?`

  Muestra un mensaje de ayuda y sale.

- `--database=`nombre_de_base_de_datos``, `-d `nombre_de_base_de_datos``

  Muestra las entradas sólo para esta base de datos (sólo log local)

- `--force-read`, `-f`

  Con esta opción, si mysqlbinlog lee de un log binario un evento que no reconoce, muestra una advertencia, ignora el comando, y continúa. Sin esta opción, mysqlbinlog se detiene si lee un evento que no reconoce.

- `--host=`nombre_de_equipo``, `-h `nombre_de_equipo``

  Obtiene el log binario del servidor MySQL del equipo dado.

- `--local-load=`ruta``, `-l `ruta``

  Prepara ficheros temporales locales para `LOAD DATA INFILE` en el directorio especificado.

- `--offset=`N``, `-o `N``

  Ignora las primeras `N` entradas.

- `--password[=`contraseña`]`, `-p[`contraseña`]`

  La contraseña a usar cuando se conecta al servidor. Si usa la forma corta de opción (`-p`), no puede tener un espacio entre la opción y la contraseña. Si omite el valor `contraseña` siguiente a la opción `--password` o `-p` en la línea de comandos, aparece un prompt para que lo introduzca.

- `--port=`número_de_puerto``, `-P `número_de_puerto``

  El puerto TCP/IP a usar cuando conecta con un servidor remoto.

- `--position=`N``, `-j `N``

  Obsoleto, use `--start-position`.

- `--protocol={TCP | SOCKET | PIPE | MEMORY}`

  Protocolo de conexión a usar.

- `--read-from-remote-server`, `-R`

  Lee el log binario de un servidor MySQL en vez de leer el local. Cualquier opción de parámetros de conexión se ignora a no ser que esta opción se dé también. Estas opciones son `--host`, `--password`, `--port`, `--protocol`, `--socket`, y `--user`.

- `--result-file=`nombre``, `-r `nombre``

  Salida directa al fichero dado.

- `--short-form`, `-s`

  Muestra sólo los comandos contenidos en el log, sin ninguna información extra.

- `--socket=`ruta``, `-S `ruta``

  Fichero socket a usar para la conexión.

- `--start-datetime=`datetime``

  Comienza a leer el log binario en el primer evento que tenga una fecha igual o posterior a la del argumento `datetime` . El valor `datetime` es relativo a la zona horaria local en la máquina donde se ejecuta mysqlbinlog. El valor debe estar en un formato aceptado por los tipos de datos `DATETIME` o `TIMESTAMP` . Por ejemplo:

      shell> mysqlbinlog --start-datetime="2004-12-25 11:25:56" binlog.000003

  Esta opción es útil para recuperaciones en un punto temporal concreto.

- `--stop-datetime=`datetime``

  Detiene la lectura del log binario en el primer evento que tenga una fecha igual o posterior a la del argumento `datetime`. Consulte la descripción de la opción `--start-datetime` para información acerca del valor de `datetime`.

- `--start-position=`N``

  Comienza a leer el log binario en el primer evento que tenga una posición igual al argumento `N`.

- `--stop-position=`N``

  Deja de leer el log binario en el primer evento que tenga una posición igual o superior al argumento `N`.

- `--to-last-log`, `-t`

  No se detiene al final del log binario solicitado del servidor MySQL, sino que sigue mostrando información hasta el final del último log binario. Si se envía la salida (output) al mismo servidor MySQL, esto puede conducir a un bucle infinito. Esta opción requiere `--read-from-remote-server`.

- `--disable-log-bin`, `-D`

  Desactiva el log binario. Esto es útil para eliminar un bucle infinito si se utiliza la opción `--to-last-log` y envía la salida (output) al mismo servidor MySQL. Esta opción también es útil cuando se restaura tras un fallo para evitar duplicación de comandos que se han logueado. Nota: Esta opción requiere privilegios `SUPER` .

- `--user=`nombre_de_usuario``, `-u `nombre_de_usuario``

  Nombre de usuario MySQL a usar cuando se conecta a un servidor remoto.

- `--version`, `-V`

  Muestra versión de información y sale.

Puede cambiar las siguientes variales con las opciones `--`nombre_de_variable`=`valor``:

- `open_files_limit`

  Especifica el número de descriptores de ficheros abiertos a reservar.

Puede enviar la salida (output) de mysqlbinlog a un cliente mysql para que ejecute los comandos contenidos en el log binario. Esto se usa para recuperar de un fallo cuando tiene una copia de seguridad antigua (consulte Sección 5.8.1, “Copias de seguridad de bases de datos”):

    shell> mysqlbinlog nombre_de_equipo-bin.000001 | mysql

O:

    shell> mysqlbinlog hostname-bin.[0-9]* | mysql

También puede redirigir la salida (output) de mysqlbinlog a un fichero de texto, si necesita modificar el log de comandos primero (por ejemplo, para eliminar comandos que no quiere ejecutar por alguna razón). Tras editar el fichero, ejecute los comandos que contiene usándolo como entrada del programa mysql .

mysqlbinlog tiene la opción `--start-position`, que muestra sólo aquellos comandos con un desplazamiento en el log binario mayor o igual a una posición dada (la posición dada debe coincidir con el comienzo de un evento). También tiene las opciones de parar o arrancar cuando ve un evento de una fecha y hora dada. Esto permite ejecutar recuperaciones a partir de un punto temporal usando la opción `--stop-datetime` (que permite decir, por ejemplo, "devuelve mi base de datos al estado en que estaba hoy a las 10:30 AM").

Si tiene más de un log binario para ejecutar en el servidor MySQL, el método seguro es procesarlos todos usando una conexión única con el servidor. El siguiente ejemplo muestra una forma peligrosa de hacerlo:

    shell> mysqlbinlog nombre_de_equipo-bin.000001 | mysql # PELIGRO!!
    shell> mysqlbinlog nombre_de_equipo-bin.000002 | mysql # PELIGRO!!

Procesar logs binarios de esta manera, utilizando diferentes conexiones con el servidor provoca problemas si el primer fichero de log contiene un comando `CREATE TEMPORARY TABLE` y el segundo log contiene un comando que usa la tabla temporal. Cuando el primer proceso mysql termina, el servidor elimina la tabla temporal. Cuando el segundo proceso mysql trata de usar la tabla, el servidor devuelve “tabla desconocida”.

Para evitar problemas como éste, utilice una única conexión para ejecutar los contenidos de todos los logs binarios que quiere procesar. Sigue una forma de hacerlo:

    shell> mysqlbinlog nombre_de_equipo-bin.000001 nombre_de_equipo-bin.000002 | mysql

Otra forma de hacerlo es escribir todos los logs a un único fichero y luego procesar el fichero:

    shell> mysqlbinlog nombre_de_equipo-bin.000001 >  /tmp/statements.sql
    shell> mysqlbinlog nombre_de_equipo-bin.000002 >> /tmp/statements.sql
    shell> mysql -e "source /tmp/statements.sql"

En MySQL 5.0, mysqlbinlog puede producir la salida (output) que reproduce una operación `LOAD DATA INFILE` sin el fichero de datos original. mysqlbinlog copia los datos en un fichero temporal y escribe un comando `LOAD DATA LOCAL INFILE` que se refiere a este fichero. La localización por defecto del directorio donde estos ficheros se escriben es específico del sistema. Para espeficar un directorio explícitamente, use la opción `--local-load`.

Como mysqlbinlog convierte comandos `LOAD DATA INFILE` en comandos `LOAD DATA LOCAL INFILE` (esto es, añade `LOCAL`). Tanto el cliente como el servidor que se utiliza para procesar los comandos deben estar configurados para permitir `LOCAL`. Consulte Sección 5.5.4, “Cuestiones relacionadas con la seguridad y `LOAD DATA LOCAL`”.

Atención: Los ficheros temporales creados por comandos `LOAD DATA LOCAL` no se borran automáticamente ya que se necesitan hasta que los comandos se ejecutan totalmente. Debe borrar los ficheros temporales cuando no necesite el log de comandos. Los ficheros pueden encontrarse en el directorio de ficheros temporales y tienen nombres como `original_file_name-#-#`.

En el futuro, eliminaremos este problema permitiendo que mysqlbinlog pueda conectarse directamente a un servidor mysqld. Así será posible eliminar los ficheros de log automáticamente cuando los comandos `LOAD DATA INFILE` se hayan ejecutado.

## 8.6. El programa mysqlcheck para mantener y reparar tablas

El cliente mysqlcheck comprueba y repara tablas `MyISAM`. También puede optimizar y analizar tablas.

mysqlcheck es similar a myisamchk, pero funciona de forma distinta. La principal diferencia operacional es que mysqlcheck debe usarse cuando el servidor mysqld está en ejecución, mientras que myisamchk debe usarse cuando no lo está. El beneficio de usar mysqlcheck es que no tiene que parar el servidor para comprobar o reparar las tablas.

mysqlcheck usa los comandos SQL `CHECK TABLE`, `REPAIR TABLE`, `ANALYZE TABLE`, y `OPTIMIZE TABLE` de forma conveniente para los usuarios. Determina los comandos a usar en función de la operación que quiera realizar, luego envía los comandos al servidor para ejecutarlos.

Hay tres modos generales de invocar mysqlcheck:

    shell> mysqlcheck [opciones] nombre_de_base_de_datos [tablas]
    shell> mysqlcheck [opciones] --databases DB1 [DB2 DB3...]
    shell> mysqlcheck [opciones] --all-databases

Si no nombra ninguna tabla o usa las opciones `--databases` o `--all-databases`, se comprueban todas las bases de datos.

mysqlcheck tiene una característica especial comparado con otros clientes. El comportamiento por defecto de comprobar tablas (`--check`) puede cambiarse renombrando el binario. Si quiere tener una herramienta que repare las tablas por defecto, debe hacer una copia de mysqlcheck llamada mysqlrepair, o hacer un enlace simbólico a mysqlcheck llamado mysqlrepair. Si invoca `mysqlrepair`, repara tablas.

Los siguientes nombres pueden usarse para cambiar el comportamiento por defecto de mysqlcheck :

mysqlrepair | La opción por defecto es `--repair`
mysqlanalyze | La opción por defecto es `--analyze`
mysqloptimize | La opción por defecto es `--optimize`

mysqlcheck soporta las siguientes opciones:

- `--help`, `-?`

  Muestra el mensaje de ayuda y sale.

- `--all-databases`, `-A`

  Comprueba todas las tablas en todas las bases de datos. Esto es lo mismo que usar la opción `--databases` y llamar todas las bases de datos en la línea de comandos.

- `--all-in-1`, `-1`

  En lugar de realizar un comando para cada tabla, ejecuta un único comando para cada base de datos, que nombra todas las tablas de la base de datos a procesar.

- `--analyze`, `-a`

  Analiza las tablas.

- `--auto-repair`

  Si una tabla comprobada está corrupta, la repara automáticamente. Cualquier reparación necesaria se hace tras el chequeo de cada tabla.

- `--character-sets-dir=`path``

  El directorio donde los conjuntos de caracteres están instalados. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--check`, `-c`

  Comprueba las tablas en busca de errores.

- `--check-only-changed`, `-C`

  Chequea sólo tablas que han cambiado desde la última comprobación o que no se han cerrado correctamente.

- `--compress`

  Comprime toda la información enviada entre el cliente y el servidor si ambos soportan compresión.

- `--databases`, `-B`

  Procesa todas las tablas en la base de datos especificada. Con esta opción, todos los argumentos nombrados se tratan como nombres de bases de datos, no como nombres de tablas.

- `--debug[=`opciones_de_depuración`]`, `-# [`opciones_de_depuración`]`

  Escribe un log de depuración. La cadena de caracteres `opciones_de_depuración` a menudo es `'d:t:o,`nombre_de_fichero`'`.

- `--default-character-set=`conjunto_de_caracteres``

  Usa `conjunto_de_caracteres` como el conjunto de caracteres por defecto. ConsulteSección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--extended`, `-e`

  Si usa esta opción para comprobar tablas, se asegura que sean 100% consistentes pero tarda bastante.

  Si usa esta opción para reparar tablas, ejecuta una reparación extendida que puede no sólo tardar bastante tiempo, sino que ¡también puede producir un montón de registros basura!

- `--fast`, `-F`

  Comprueba sólo tablas que no se han cerrado correctamente.

- `--force`, `-f`

  Continúa incluso si se produce un error SQL.

- `--host=`nombre_de_equipo``, `-h `nombre_de_equipo``

  Conecta con el servidor MySQL en el equipo dado.

- `--medium-check`, `-m`

  Realiza un chequeo que es más rápido que la operación `--extended`. Esto encuentra sólo el 99.99% de todos los errores, lo cual debería ser suficiente en la mayoría de casos.

- `--optimize`, `-o`

  Optimiza las tablas.

- `--password[=`contraseña`]`, `-p[`contraseña`]`

  La contraseña a usar cuando se conecta con el servidor. Si usa la opción con su forma corta (`-p`), no puede haber un espacio entre la opción y la contraseña. Si omite el valor `contraseña` a continuación de la opción `--password` o `-p` en la línea de comandos, aparece un prompt pidiéndola.

- `--port=`número_de_puerto``, `-P `número_de_puerto``

  El puerto TCP/IP para usar en la conexión.

- `--protocol={TCP | SOCKET | PIPE | MEMORY}`

  Protocolo de conexión a usar.

- `--quick`, `-q`

  Si usa esta opción para comprobar tablas, evita que el chequeo escanee los registros para buscar enlaces incorrectos. Es el método de chequeo más rápido.

  Si se utiliza esta opción para reparar tablas, el programa intenta reparar sólo el árbol del índice. Este es el método más rápido de reparación.

- `--repair`, `-r`

  Hace una reparación que puede arreglar prácticamente todo excepto claves únicas que no son únicas.

- `--silent`, `-s`

  Modo silencioso. Sólo muestra mensajes de error.

- `--socket=`ruta``, `-S `ruta``

  Fichero socket a usar en la conexión.

- `--tables`

  Más prioritaria que la opción `--databases` o `-B`. Todos los argumentos que vienen después de la opción se consideran nombres de tablas.

- `--user=`nombre_de_usuario``, `-u `nombre_de_usuario``

  El nombre de usuario MySQL a usar cuando se conecta al servidor.

- `--verbose`, `-v`

  Modo explícito. Muestra información acerca de varios estados de las operaciones del programa.

- `--version`, `-V`

  Muestra información de la versión y sale.

## 8.7. El programa de copia de seguridad de base de datos mysqldump

El cliente mysqldump puede utilizarse para volcar una base de datos o colección de bases de datos para copia de seguridad o para transferir datos a otro servidor SQL (no necesariamente un servidor MySQL). EL volcado contiene comandos SQL para crear la tabla y/o rellenarla.

Si está haciendo una copia de seguridad del servidor, y las tablas son todas `MyISAM`, puede considerar usar mysqlhotcopy ya que hace copias de seguridad más rápidas y restauraciones más rápidas, que pueden realizarse con el segundo programa. Consulte Sección 8.8, “El programa de copias de seguridad de base de datos mysqlhotcopy”.

Hay tres formas de invocar mysqldump:

    shell> mysqldump [opciones] nombre_de_base_de_datos [tablas]
    shell> mysqldump [opciones] --databases DB1 [DB2 DB3...]
    shell> mysqldump [opciones] --all-databases

Si no se nombra ninguna tabla o se utiliza la opción `--databases` o `--all-databases`, se vuelca bases de datos enteras.

Para obtener una lista de las opciones que soporta su versión de mysqldump, ejecute mysqldump --help.

Si ejecuta mysqldump sin las opciones `--quick` o `--opt`, mysqldump carga el resultado entero en memoria antes de volcarlo. Esto puede ser un problema si está volcando una base de datos grande. En MySQL 4.0, `--opt` está activado por defecto, pero puede desactivarse con `--skip-opt`.

Si está utilizando una copia reciente del programa mysqldump para generar un volcado que tiene que ser cargado en un servidor MySQL muy viejo, no debe usar las opciones `--opt` ni `-e` .

mysqldump soporta las siguientes opciones:

- `--help`, `-?`

  Muestra un mensaje de error y sale.

- `--add-drop-table`

  Añade un comando `DROP TABLE` antes de cada comando `CREATE TABLE` .

- `--add-locks`

  Rodea cada volcado de tabla con los comandos `LOCK TABLES` y `UNLOCK TABLES`. Esto provoca inserciones más rápidas cuando el fichero volcado se recarga. Consulte Sección 7.2.14, “Velocidad de la sentencia `INSERT`”.

- `--all-databases`, `-A`

  Vuelca todas las tablas en todas las bases de datos. Es como utilizar la opción `--databases` y nombrar todas las bases de datos en la línea de comando.

- `--allow-keywords`

  Permite la creación de columnas con nombres que son palabras claves. Esto funciona añadiendo un prefijo a cada nombre de columna con el nombre de tabla.

- `--comments[={0|1}]`

  Si tiene como valor `0`, suprime información adicional en el fichero de volcado como la versión del programa, la versión del servidor, y el equipo. `--skip-comments` tiene el mismo efecto que `--comments=0`. El valor por defecto es `1`, que incluye la información extra.

- `--compact`

  Produce una salida (output) menos explícita. Esta opción suprime comentarios y activa las opciones `--skip-add-drop-table`, `--no-set-names`, `--skip-disable-keys`, y `--skip-add-locks` .

- `--compatible=`nombre``

  Produce una salida que es compatible con otros sistemas de bases de datos o con servidores MySQL antiguos. El valor de `name` puede ser `ansi`, `mysql323`, `mysql40`, `postgresql`, `oracle`, `mssql`, `db2`, `maxdb`, `no_key_options`, `no_table_options`, o `no_field_options`. Para usar varios valores, sepárelos por comas. Estos valores tienen el mismo significado que las opciones correspondientes para asignar el modo SQL del servidor. Consulte Sección 5.3.2, “El modo SQL del servidor”.

- `--complete-insert`, `-c`

  Usa comandos `INSERT` compuestos que incluyen nombres de columnas.

- `--compress`, `-C`

  Comprime toda la información enviada entre el cliente y el servidor si ambos admiten compresión.

- `--create-options`

  Incluye todas las opciones de tabla específicas de MySQL en el comando `CREATE TABLE`.

- `--databases`, `-B`

  Vuelca varias bases de datos. Normalmente, mysqldump trata el primer argumento de la línea de comandos como un nombre de base de datos y los siguientes argumentos como nombres de tablas. Con esta opción, trata todos los argumentos como nombres de bases de datos. Los comandos `CREATE DATABASE IF NOT EXISTS `nombre_de_base_de_datos`` y `USE `nombre_de_base_de_datos`` están incluídos en la salida (output) antes de cada nueva base de datos.

- `--debug[=`opciones_de_depuración`]`, `-# [`opciones_de_depuración`]`

  Escribe un log de depuración. La cadena de caracteres `opciones_de_depuración` normalmente es `'d:t:o,`nombre_de_fichero`'`.

- `--default-character-set=`conjunto_de_caracteres``

  Usa `conjunto_de_caracteres` como el conjunto de caracteres por defecto. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”. Si no se especifica, mysqldump desde MySQL 5.0 utiliza `utf8`.

- `--delayed-insert`

  Inserta registros usando comandos `INSERT DELAYED`. Esta opción se eliminió en MySQL 5.0.7.

- `--delete-master-logs`

  En servidores de replicación maestros, borra los logs binarios tras realizar la operación de volcado. En MySQL 5.0, esta opción se activa automáticamente `--master-data`.

- `--disable-keys`, `-K`

  Para cada tabla, rodea el comando `INSERT` con `/*!40000 ALTER TABLE `tbl_name` DISABLE KEYS */;` y `/*!40000 ALTER TABLE `tbl_name` ENABLE KEYS */;`. Esto hace que la carga del fichero volcado en MySQL 4.0 o posteriores sea más rápida porque los índices se crean sólo tras la inserción de todos los registros. Esta opción es efectiva sólo para tablas `MyISAM` .

- `--extended-insert`, `-e`

  Usa la sintaxis de `INSERT` de múltiples registros, que incluyen una lista de varios `VALUES`. Esto genera un fichero de volcado de menor tamaño y acelera las inserciones cuando se recarga el fichero.

- `--fields-terminated-by=...`, `--fields-enclosed-by=...`, `--fields-optionally-enclosed-by=...`, `--fields-escaped-by=...`, `--lines-terminated-by=...`

  Estas opciones se usan con la opción `-T` y tienen el mismo significado que las cláusulas correspondientes de `LOAD DATA INFILE`. Consulte Sección 13.2.5, “Sintaxis de `LOAD DATA INFILE`”.

- `--first-slave`, `-x`

  Obsoleto. Ahora es `--lock-all-tables`.

- `--flush-logs`, `-F`

  Vuelca los ficheros de log MySQL antes de empezar el volcado. Esta opción necesita el permiso `RELOAD`. Tenga en cuenta que si utiliza esta opción en combinación con la opción `--all-databases` (o `-A`) los logs se vuelcan para cada base de datos volcada. La excepción es cuando se usa `--lock-all-tables` o `--master-data`. En estos casos, los logs se vuelcan sólo una vez, en el momento en que todas las tablas están bloqueadas. Si quiere que el volcado de la base de datos y el del log ocurran exactamente en el mismo momento, debe usar `--flush-logs` junto con `--lock-all-tables` o `--master-data`.

- `--force`, `-f`

  Continúa incluso si ocurre un error SQL durante un volcado de tabla.

- `--host=`nombre_de_equipo``, `-h `nombre_de_equipo``

  Vuelca datos de un servidor MySQL en el equipo dado. Por defecto el equipo es `localhost`.

- `--hex-blob`

  Vuelca columnas de cadenas de caracteres binarios usando notación hexadecimal (por ejemplo, `'abc'` es `0x616263`). Las columnas sobre las que tiene efecto en MySQL 5.0 son `BINARY`, `VARBINARY`, `BLOB`.

- `--lock-all-tables`, `-x`

  Bloquea todas las tablas de todas las bases de datos. Esto se consigue estableciendo un bloqueo de lectura global que dura durante todo el volcado. Esta opción desactiva automáticamente `--single-transaction` y `--lock-tables`.

- `--lock-tables`, `-l`

  Bloquea todas las tablas antes de comenzar el volcado. Las tablas se bloquean con `READ LOCAL` para permitir inserciones concurrentes en caso de tablas `MyISAM` . Para tablas transaccionales como `InnoDB` y `BDB`, `--single-transaction` es una opción mucho mejor, ya que no necesita bloquear las tablas.

  Tenga en cuenta que al volcar múltiples bases de datos, `--lock-tables` bloquea tablas para cada base de datos separadamente. Así, esta opción no garantiza que las tablas en el fichero volcado sean lógicamente consistentes entre bases de datos. Tablas en bases de datos distintas pueden volcarse en estados completamente distintos.

- `--master-data[=`valor`]`

  Esta opción causa que se escriba en la salida (output) la posición y el nombre de fichero del log binario. Esta opción necesita el permiso `RELOAD` y el log binario debe estar activado. Si el valor de la opción es igual a 1, la posición y nombre de fichero se escriben en la salida del volcado en forma de comando `CHANGE MASTER` que hace que un servidor esclavo empiece desde la posición correcta en el log binario del maestro si usa este volcado SQL del maestro para preparar un esclavo. Si el valor de la opción es igual a 2, el comando `CHANGE MASTER` se escribe como un comentario SQL. Ésta es la acción por defecto si se omite `valor` .

  La opción `--master-data` activa `--lock-all-tables`, a no ser que `--single-transaction` también esté especificado (en tal caso, se establece un bloqueo de lectura global sólo durante un corto periodo de tiempo al principio del volcado. Consulte la descripción de `--single-transaction`. En cualquier caso, cualquier acción en logs se realiza en el momento exacto del volcado. Esta opción automáticamente desactiva `--lock-tables`.

- `--no-create-db`, `-n`

  Esta opción suprime el comando `CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name` que se incluye de otro modo en la salida si se especifica las opciones `--databases` o `--all-databases`.

- `--no-create-info`, `-t`

  No escribe los comandos `CREATE TABLE` que recrean cada tabla volcada.

- `--no-data`, `-d`

  No escribe ningún registro de la tabla. Esto es muy útil si sólo quiere obtener un volcado de la estructura de una tabla.

- `--opt`

  Esta opción es una abreviatura; es lo mismo que especificar `--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset`. Causa una operación de volcado rápida y produce un fichero de volcado que puede recargarse en un servidor MySQL rápidamente. En MySQL 5.0, `--opt` está activado por defecto, pero puede desactivarse con `--skip-opt`. Para desactivar sólo algunas de las opciones activadas por `--opt`, use la forma `--skip`; por ejemplo `--skip-add-drop-table` o `--skip-quick`.

- `--password[=`contraseña`]`, `-p[`contraseña`]`

  La contraseña a usar al conectar con el servidor. Si usa la opción en forma corta (`-p`), no puede haber un espacio entre la opción y la contraseña. Si omite el valor de `contraseña` a continuación de la opción `--password` o `-p` en la línea de comandos, aparece un prompt pidiéndola.

- `--port=`número_de_puerto``, `-P `número_de_puerto``

  El puerto TCP/IP a usar en la conexión.

- `--protocol={TCP | SOCKET | PIPE | MEMORY}`

  Protocolo de conexión a usar.

- `--quick`, `-q`

  Esta opción es útil para volcar tablas grandes. Fuerza mysqldump a recibir los registros de una tabla del servidor uno a uno en lugar de recibir el conjunto completo de registros y guardarlos en memoria antes de escribirlos.

- `--quote-names`, `-Q`

  Limita los nombres de base de datos, tablas, y columnas con caracteres '```' . Si el modo SQL del servidor incluye la opción `ANSI_QUOTES`, los nombres se ponen entre caracteres '`"`'. En MySQL 5.0, `--quote-names` está activado por defecto, pero puede desactivarse con `--skip-quote-names`.

- `--result-file=`fichero``, `-r `fichero``

  Redirige la salida a un fichero dado. Esta opción debe usarse en Windows, ya que previene que los caracteres de nueva línea '`\n`' se conviertan en secuencias de retorno/nueva línea '`\r\n`'.

- `--set-charset`

  Añade `SET NAMES `conjunto_de_caracteres_por_defecto`` a la salida (output). Esta opción está activada por defecto. Para suprimir el comando `SET NAMES`, use `--skip-set-charset`.

- `--single-transaction`

  Esta opción realiza un comando SQL `BEGIN` antes de volcar los datos del servidor. Es útil sólo con tablas transaccionales tales como las `InnoDB` y `BDB`, ya que vuelca el estado consistente de la base de datos cuando se ejecuta `BEGIN` sin bloquear ninguna aplicación.

  Cuando use esta opción, debe tener en cuenta que sólo las tablas `InnoDB` se vuelcan en un estado consistente. Por ejemplo, cualquier tabla `MyISAM` o `HEAP` volcadas mientras se usa esta opción todavía pueden cambiar de estado.

  La opción `--single-transaction` y la opción `--lock-tables` son mutuamente exclusivas, ya que `LOCK TABLES` provoca que cualquier transacción pendiente se confirme implícitamente.

  Para volcar tablas grandes, debe combinar esta opción con `--quick`.

- `--socket=`ruta``, `-S `ruta``

  El fichero socket a usar cuando se conecta con `localhost` (que es el equipo por defecto).

- `--skip-comments`

  Consulte la descripción de la opción `--comments`.

- `--tab=`ruta``, `-T `ruta``

  Produce ficheros con datos separados por tabuladores. Para cada tabla volcada mysqldump crea un fichero ``nombre_de_tabla`.sql` que contiene el comando `CREATE TABLE` que crea la tabla, y un fichero ``nombre_de_tabla`.txt` que contiene los datos. El valor de esta opción es el directorio en el que escribir los ficheros.

  Por defecto, los ficheros de datos `.txt` se formatean usando tabuladores entre los valores de las columnas y una nueva línea tras cada registro. El formato puede especificarse explícitamente usando las opciones `--fields-`xxx`` y `--lines--`xxx``.

  Nota: Esta opción debe usarse sólo cuando mysqldump se ejecuta en la misma máquina que el servidor mysqld. Se debe tener el permiso `FILE`, y el servidor debe tener permisos para escribir ficheros en el directorio que se especifique.

- `--tables`

  Tiene mayor prioridad que `--databases` o `-B`. Todos los argumentos que vienen después de esta opción se tratan como nombres de tablas.

- `--user=`nombre_de_usuario``, `-u `nombre_de_usuario``

  Nombre de usuario MySQL a usar al conectar con el servidor.

- `--verbose`, `-v`

  Modo explícito. Muestra más información sobre lo que hace el programa.

- `--version`, `-V`

  Muestra información de versión y sale.

- `--where='`condición_where`'`, `-w '`condición_where`'`

  Vuelca sólo registros seleccionados por la condición `WHERE` dada. Tenga en cuenta que las comillas alrededor de la condición son obligatorias si contienen espacios o caracteres especiales para el intérprete de comandos.

  Ejemplos:

      "--where=user='jimf'"
      "-wuserid>1"
      "-wuserid<1"

- `--xml`, `-X`

  Escribe la salida del volcado como XML bien formado.

Puede cambiar las siguientes variables usando las opciones `--`nombre_de_variable`=`valor``:

- `max_allowed_packet`

  Tamaño máximo del búfer para la comunicación cliente/servidor. En MySQL 5.0, el valor de esta variable puede ser de hasta 1GB.

- `net_buffer_length`

  Tamaño inicial del búfer para la comunicación cliente/servidor. Cuando se crean comandos de inserción de múltiples registros (como con las opciones `--extended-insert` o `--opt`), mysqldump crea registros de longitud máxima `net_buffer_length`. Si incrementa esta variable, debe asegurarse también de que la variable `net_buffer_length` en el servidor MySQL tenga como mínimo esta longitud.

También es posible cambiar variables usando la sintaxis `--set-variable=`nombre_de_variable`=`valor`` o `-O `nombre_de_variable`=`valor``. Sin embargo, esta sintaxis está obsoleta.

El uso más común de mysqldump es para hacer una copia de seguridad de toda la base de datos:

    shell> mysqldump --opt nombre_de_base_de_datos > fichero_de_seguridad.sql

El siguiente ejemplo muestra cómo volcar el fichero de seguridad de nuevo en el servidor:

    shell> mysql nombre_de_base_de_datos < fichero_de_seguridad.sql

El siguiente ejemplo obtiene el mismo resultado que el anterior:

    shell> mysql -e "source /ruta/fichero_de_seguridad.sql" nombre_de_base_de_datos

mysqldump es muy útil para poblar bases de datos copiando los datos de un servidor MySQL a otro:

    shell> mysqldump --opt nombre_de_base_de_datos | mysql --host=nombre_de_equipo_remoto -C nombre_de_base_de_datos

Es posible volcar varias bases de datos con un solo comando:

    shell> mysqldump --databases nombre_de_base_de_datos_1 [nombre_de_base_de_datos_2 ...] > mis_bases_de_datos.sql

Si quiere volcar todas las bases de datos, use la opción `--all-databases`:

    shell> mysqldump --all-databases > todas_las_bases_de_datos.sql

Si las tablas se guardan con el motor de almacenamiento `InnoDB`, `mysqldump` proporciona una forma de realizar una copia de seguridad de las mismas (consulte los comandos a continuación). Esta copia de seguridad sólo necesita un bloqueo local de todas las tablas (usando `FLUSH TABLES WITH READ LOCK`) al principio del volcado. En cuanto obtiene el bloqueo, se lee el log binario y se libera el bloqueo. Si y sólo si un comando de actualización largo está en ejecución cuando se ejecuta `FLUSH...`, el servidor MySQL puede quedar bloqueado hasta que acabe este comando largo, y luego el volcado queda sin ningún bloqueo. Si el servidor MySQL recibe sólo comandos de actualización cortos (en el sentido de "poco tiempo de ejecución"), incluso si son muchos, el periodo inicial de bloqueo no debe ser un problema.

    shell> mysqldump --all-databases --single-transaction > todas_las_bases_de_datos.sql

Para una recuperación en un momento dado (también comocido como "roll-forward", cuando necesita restaurar una copia de seguridad antigua y recrear los cambios que han ocurrido desde tal copia de seguridad), es útil rotar el log binario (consulte Sección 5.10.3, “El registro binario (Binary Log)”) o al menos conozca las coordinadas del log binario que se corresponden con el volcado:

    shell> mysqldump --all-databases --master-data=2 > todas_las_bases_de_datos.sql
    or
    shell> mysqldump --all-databases --flush-logs --master-data=2 > todas_las_bases_de_datos.sql

El uso simultáneo de `--master-data` y `--single-transaction` proporciona una forma de hacer copias de seguridad en línea apropiadas para recuperaciones en un momento dado, si las tablas se guardan con el motor de almacenamiento `InnoDB`.

Para más información sobre copias de seguridad, consulte Sección 5.8.1, “Copias de seguridad de bases de datos”.

## 8.8. El programa de copias de seguridad de base de datos mysqlhotcopy

mysqlhotcopy es un script Perl que fue escrito originalmente por Tim Bunce. Usa `LOCK TABLES`, `FLUSH TABLES`, y `cp` o `scp` para realizar una copia de seguridad rápida de la base de datos. Es la forma más rápida de hacer una copia de seguridad de la base de datos o de tablas, pero sólo puede ejecutarse en la misma máquina donde está el directorio de base de datos. mysqlhotcopy sólo realiza copias de seguridad de tablas `MyISAM`. Funciona en Unix y NetWare.

    shell> mysqlhotcopy nombre_de_base_de_datos [/ruta/al/nuevo_directorio]

    shell> mysqlhotcopy nombre_de_base_de_datos_1 ... nombre_de_base_de_datos_n /ruta/al/nuevo_directorio

En la base de datos señalada realiza una copia de seguridad de las tablas que verifican una expresión regular dada:

    shell> mysqlhotcopy nombre_de_base_de_datos./expresión_regular/

La expresión regular para el nombre de tabla puede negarse precediéndola con una tilde ('`~`'):

    shell> mysqlhotcopy nombre_de_base_de_datos./~expresión_regular/

mysqlhotcopy soporta las siguientes opciones:

- `--help`, `-?`

  Muestra un mensaje de ayuda y sale.

- `--allowold`

  No aborta si el objetivo ya existe (lo renombra añadiendo un sufijo `_old` ).

- `--checkpoint=`nombre_de_base_de_datos.nombre_de_tabla``

  Inserta puntos de referencia en la base de datos `nombre_de_base_de_datos` y en la tabla `nombre_de_tabla`.

- `--debug`

  Activa la opción de depuración.

- `--dryrun`, `-n`

  Reporta acciones sin ejecutarlas realmente.

- `--flushlog`

  Vuelca logs tras bloquear todas las tablas.

- `--keepold`

  No borra objetivos previos (renombrados) cuando acaba.

- `--method=`#``

  Método para copiar (`cp` o `scp`).

- `--noindices`

  No incluye los índices en la copia de seguridad. Esto hace que la copia de seguridad sea más inteligente y rápida. Los índices pueden reconstruirse posteriormente con myisamchk -rq.

- `--password=`contraseña`, -p`contraseña``

  La contraseña a usar al conectar con el servidor. Tenga en cuenta que el valor de la contraseña no es opcional para esta opción, no como con otros programas MySQL.

- `--port=`número_de_puerto``, `-P `número_de_puerto``

  El puerto TCP/IP a usar cuando se conecta el servidor local.

- `--quiet`, `-q`

  Es silencioso excepto para errores.

- `--regexp=`expresión_regular``

  Copia todas las bases de datos con nombres que cumplan la expresión regular dada.

- `--socket=`ruta``, `-S `ruta``

  El fichero socket Unix a usar para la conexión.

- `--suffix=`cadena``

  El sufijo para nombres de bases de datos copiadas.

- `--tmpdir=`ruta``

  Directorio temporal (en lugar de `/tmp`).

- `--triggers`

  Vuelca disparadores para cada tabla volcada. Esta opción está activada por defecto; desactívela con `--skip-triggers`. Esta opción se añadió en MySQL 5.0.11. Antes de esta versión, los disparadores no se vuelcan.

- `--user=`nombre_de_usuario``, `-u `nombre_de_usuario``

  El nombre de usuario MySQL a usar cuando se conecta al servidor.

mysqlhotcopy lee los grupos de opciones `[client]` y `[mysqlhotcopy]` de los ficheros de opciones.

Para ejecutar mysqlhotcopy, debe tener: acceso a los ficheros de las tablas de las que está haciendo copia de seguridad; el permiso `SELECT` para estas tablas; y el permiso `RELOAD` (para poder ejecutar `FLUSH TABLES`).

Use `perldoc` para información adicional de mysqlhotcopy:

    shell> perldoc mysqlhotcopy

## 8.9. El programa para importar datos mysqlimport

El cliente mysqlimport proporciona una interfaz de línea de comandos para el comando `LOAD DATA INFILE`. La mayoría de opciones de mysqlimport se corresponden directamente con cláusulas de `LOAD DATA INFILE`. Consulte Sección 13.2.5, “Sintaxis de `LOAD DATA INFILE`”.

Invoque mysqlimport así:

    shell> mysqlimport [opciones] nombre_de_base_de_datos fichero_de_texto1 [fichero_de_texto2 ...]

Del nombre de cada fichero de texto especificado en la línea de comandos, mysqlimport elimina cualquier extensión, y utliza el resultado para determinar el nombre de la tabla a la que importar el contenido del fichero. Por ejemplo, los ficheros con nombres `patient.txt`, `patient.text` y `patient` se importarían todos a la tabla llamada `patient`.

mysqlimport soporta las siguientes opciones:

- `--help`, `-?`

  Muestra un mensaje de ayuda y sale.

- `--columns=`lista_de_columnas``, `-c `lista_de_columnas``

  Esta opción admite una lista de nombres de columnas separados por comas. El orden de los nombres de columna indica cómo emparejar las columnas de los ficheros de datos con las columnas de la tabla.

- `--compress`, `-C`

  Comprime toda la información enviada entre el cliente y el servidor, si ambos soportan compresión.

- `--debug[=`opciones_de_depuración`]`, `-# [`opciones_de_depuración`]`

  Escribe un log de depuración. La cadena de caracteres `opciones_de_depuración` a menudo es `'d:t:o,`nombre_de_fichero`'`.

- `--delete`, `-D`

  Vacía la tabla antes de importar el fichero de texto.

- `--fields-terminated-by=...`, `--fields-enclosed-by=...`, `--fields-optionally-enclosed-by=...`, `--fields-escaped-by=...`, `--lines-terminated-by=...`

  Estas opciones tienen el mismo significado que las cláusulas correspondientes de `LOAD DATA INFILE`. Consulte Sección 13.2.5, “Sintaxis de `LOAD DATA INFILE`”.

- `--force`, `-f`

  Ignora errores. Por ejemplo, si una tabla para un fichero de texto no existe, sigue procesando el resto de ficheros. Sin `--force`, mysqlimport finaliza si la tabla no existe.

- `--host=`nombre_de_equipo``, `-h `nombre_de_equipo``

  Importa datos al servidor MySQL en el equipo dado. El equipo por defecto es `localhost`.

- `--ignore`, `-i`

  Consulte la descripción para la opción `--replace`.

- `--ignore-lines=`n``

  Ignora las primeras `n` líneas del fichero de datos.

- `--local`, `-L`

  Lee los ficheros de entrada localmente del equipo cliente.

- `--lock-tables`, `-l`

  Bloquea todas las tablas para escritura antes de procesar cualquier fichero de texto. Esto asegura que todas las tablas estén sincronizadas en el servidor.

- `--password[=`contraseña`]`, `-p[`contraseña`]`

  La contraseña a usar cuando se conecta al servidor. Si usa la opción en su forma corta (`-p`), no puede haber un espacio entre la opción y la contraseña. Si omite el valor de `contraseña` a continuación de `--password` o `-p` en la línea de comandos, aparece un prompt para que lo introduzca.

- `--port=`número_de_puerto``, `-P `número_de_puerto``

  El puerto TCP/IP para usar en la conexión.

- `--protocol={TCP | SOCKET | PIPE | MEMORY}`

  El protocolo de conexión a usar. Nuevo en MySQL 4.1.

- `--replace`, `-r`

  Las opciones `--replace` y `--ignore` controlan el tratamiento de registros de entrada que duplican registros existentes con valores clave únicos. Si especifica `--replace`, los nuevos registros replazan los existentes que tengan el mismo valor clave. Si especifica `--ignore`, los registros nuevos que duplican un registro existente con el mismo valor clave se ignoran. Si no especifica ninguna opción, se produce un error cuando se encuentra un valor duplicado, y el resto del fichero de texto se ignora.

- `--silent`, `-s`

  Modo silencioso. Sólo muestra mensajes de error.

- `--socket=`ruta``, `-S `ruta``

  Fichero socket a usar al conectar con `localhost` (que es el equipo por defecto).

- `--user=`nombre_de_usuario``, `-u `nombre_de_usuario``

  El nombre de usuario MySQL a usar cuando se conecta con el servidor.

- `--verbose`, `-v`

  Modo explícito. Muestra más información sobre lo que hace el programa.

- `--version`, `-V`

  Muestra información de versión y sale.

Ejemplo de una sesión que demuestra el uso de mysqlimport:

    shell> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
    shell> ed
    a
    100     Max Sydow
    101     Count Dracula
    .
    w imptest.txt
    32
    q
    shell> od -c imptest.txt
    0000000   1   0   0  \t   M   a   x       S   y   d   o   w  \n   1   0
    0000020   1  \t   C   o   u   n   t       D   r   a   c   u   l   a  \n
    0000040
    shell> mysqlimport --local test imptest.txt
    test.imptest: Records: 2  Deleted: 0  Skipped: 0  Warnings: 0
    shell> mysql -e 'SELECT * FROM imptest' test
    +------+---------------+
    | id   | n             |
    +------+---------------+
    |  100 | Max Sydow     |
    |  101 | Count Dracula |
    +------+---------------+

## 8.10. Mostrar bases de datos, tablas y columnas con mysqlshow

El cliente mysqlshow puede usarse para ver rápidamente qué bases de datos existen, sus tablas, y las columnas de las tablas e índices.

mysqlshow proporciona una interfaz de línea de comandos para varios comandos SQL `SHOW`. La misma información puede obtenerse usando estos comandos directamente. Por ejemplo, puede ejecutarlos desde el programa cliente mysql. Consulte Sección 13.5.4, “Sintaxis de `SHOW`”.

Invoque mysqlshow así:

    shell> mysqlshow [opciones] [nombre_de_base_de_datos [nombre_de_tabla [nombre_de_columna]]]

- Si no se da una base de datos, se muestran todas las bases de datos.

- Si no se da una tabla, se muestran todas las tablas de la base de datos.

- Si no se da una columna, se muestran todas las columnas y tipos de columnas de la tabla.

Si el último argumento contiene caracteres de shell o comodines SQL ('`*`', '`?`', '`%`', o '`_`'), sólo se muestran aquéllos nombres que coinciden con el comodín. Si un nombre de base de datos contiene algún carácter de subrayado, debe ponerse una barra invertida (algunos shells Unix necesitan dos) para obtener una lista de las tablas o columnas adecuadas. Los caracteres '`*`' y '`?`' se convierten en los caracteres comodines SQL '`%`' y '`_`'. Esto puede causar confusión cuando se trate de mostrar las columnas para una tabla con '`_`' en el nombre, ya que en este caso mysqlshow muestra sólo los nombres de tablas que cumplen con el patrón. Esto se puede arreglar fácilmente añadiendo un carácter '`%`' extra en la línea de comandos como argumento separado.

mysqlshow soporta las siguientes opciones:

- `--help`, `-?`

  Muestra un mensaje de ayuda y sale.

- `--character-sets-dir=`ruta``

  El directorio donde están instalados los conjuntos de caracteres. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--compress`, `-C`

  Comprime toda la información enviada entre el cliente y el servidor si ambos soportan compresión.

- `--debug[=`opciones_de_depuración`]`, `-# [`opciones_de_depuración`]`

  Escribe un log de depuración. La cadena de caracteres `opciones_de_depuración` a menudo es `'d:t:o,`nombre_de_fichero`'`.

- `--default-character-set=`conjunto_de_caracteres``

  Usa `conjunto_de_caracteres` como el conjunto de caracteres por defecto. Consulte Sección 5.9.1, “El conjunto de caracteres utilizado para datos y ordenación”.

- `--host=`nombre_de_equipo``, `-h `nombre_de_equipo``

  Conecta con el servidor MySQL del equipo dado.

- `--keys`, `-k`

  Muestra los índices de la tabla.

- `--password[=`contraseña`]`, `-p[`contraseña`]`

  La contraseña a usar cuando se conecta con el servidor. Si usa el formato corto de la opción (`-p`), no puede haber un espacio entre la opción y la contraseña. Si omite el valor de `contraseña` a continuación de la opción `--password` o `-p` en la línea de comandos, aparece un prompt para que lo introduzca.

- `--port=`número de puerto``, `-P `número de puerto``

  El puerto TCP/IP a usar para la conexión.

- `--protocol={TCP | SOCKET | PIPE | MEMORY}`

  El protocolo de conexión a usar.

- `--show-table-type`

  Muestra una columna indicando el tipo de tabla, como con `SHOW FULL TABLES`. Nuevo en MySQL 5.0.4.

- `--socket=`ruta``, `-S `ruta``

  El fichero socket a usar cuando se conecta con `localhost` (que es el equipo por defecto).

- `--status`, `-i`

  Muestra información extra de cada tabla.

- `--user=`nombre_de_usuario``, `-u `nombre_de_usuario``

  El nombre de usuario MySQL a usar cuando se conecta al servidor.

- `--verbose`, `-v`

  Modo explícito. Muestra más información sobre lo que hace el programa. Esta opción puede usarse varias veces para incrementar la cantidad de información.

- `--version`, `-V`

  Muestra información de versión y sale.

## 8.11. perror, explicación de códigos de error

Para la mayoría de errores de sistema, MySQL muestra, además del mensaje de texto interno, el código de error de sistema en uno de los siguientes estilos:

    message ... (errno: #)
    message ... (Errcode: #)

Puede aclararse qué significa cada código de error examinando la documentación del sistema o utilizando la utilidad perror .

perror muestra la descripción de códigos de error del sistema y del motor de almacenamiento (lo que maneja las tablas).

Invoque perror así:

    shell> perror [opciones] código_de_error ...

Ejemplo:

    shell> perror 13 64
    Error code  13:  Permission denied
    Error code  64:  Machine is not on the network

Nota: Para obtener el mensaje de error para un código de error de MySQL, invoque perror con la opción `--ndb` :

    shell> perror --ndb errorcode

Tenga en cuenta que el significado de los mensajes de error de sistema pueden ser dependientes del sistema operativo. Un código de error puede significar cosas distintas en diferentes sistemas operativos.

## 8.12. La utilidad replace de cambio de cadenas de caracteres

El programa replace cambia cadenas de caracteres en ficheros o en la entrada estándar. Utiliza una máquina de estado finito para encontrar las cadenas de caracteres más largas en primer lugar. Puede utilizarse para cambiar cadenas de caracteres. Por ejemplo, el siguiente comando intercambia `a` y `b` en los ficheros dados, `fichero1` y `fichero2`:

    shell> replace a b b a -- fichero1 fichero2 ...

Use la opción `--` para indicar dónde acaba la lista de reemplazo de cadena de caracteres y dónde empieza el nombre del fichero.

Todo fichero nombrado en la línea de comandos se modifica en su ubicación, así que puede ser conveniente hacer una copia de seguridad del fichero original antes de modificarlo.

Si no se especifica ningún fichero en la línea de comandos replace lee la entrada estándar y escribe en la salida estándar. En este caso, no se necesita ninguna opción `--` .

msql2mysql utiliza el programa replace. Consulte Sección 24.1, “msql2mysql — ”.

replace soporta las siguientes opciones:

- `-?`, `-I`

  Muestra un mensaje de error y sale.

- `-# `opciones_de_depuración``

  Escribe un log de depuración. La cadena de caracteres ``opciones_de_depuración`` a menudo es `'d:t:o,`nombre_de_fichero`'`.

- `-s`

  Modo silencioso. Muestra menos información sobre lo que hace el programa.

- `-v`

  Modo explícito. Muestra más información sobre lo que hace el programa.

- `-V`

  Muestra información de versión y sale.

Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

Anterior |  | Siguiente
Capítulo 7. Optimización de MySQL | Inicio | Capítulo 9. Estructura de lenguaje