8.5. La utilidad mysqlbinlog para registros binarios

MySQL 5.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 []  ...

Por ejemplo, para mostrar el contenido del log binario , use este comando:

shell> mysqlbinlog binlog.0000003

La salida incluye todos los comandos contenidos en , 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 .

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 . Estas opciones son , , , , y .

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:

  • ,

    Muestra un mensaje de ayuda y sale.

  • ,

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

  • ,

    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.

  • ,

    Obtiene el log binario del servidor MySQL del equipo dado.

  • ,

    Prepara ficheros temporales locales para en el directorio especificado.

  • ,

    Ignora las primeras entradas.

  • ], ]

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

  • ,

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

  • ,

    Obsoleto, use .

  • Protocolo de conexión a usar.

  • ,

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

  • ,

    Salida directa al fichero dado.

  • ,

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

  • ,

    Fichero socket a usar para la conexión.

  • Comienza a leer el log binario en el primer evento que tenga una fecha igual o posterior a la del argumento . El valor 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 o . 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.

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

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

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

  • ,

    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 .

  • ,

    Desactiva el log binario. Esto es útil para eliminar un bucle infinito si se utiliza la opción 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 .

  • ,

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

  • ,

    Muestra versión de información y sale.

Puede cambiar las siguientes variales con las opciones =:

  • 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 -bin.000001 | mysql

O:

shell> mysqlbinlog -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 , 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 (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 -bin.000001 | mysql # PELIGRO!!
shell> mysqlbinlog -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 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 -bin.000001 -bin.000002 | mysql

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

shell> mysqlbinlog -bin.000001 >  /tmp/statements.sql
shell> mysqlbinlog -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 sin el fichero de datos original. mysqlbinlog copia los datos en un fichero temporal y escribe un comando 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 .

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

Atención: Los ficheros temporales creados por comandos 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 .

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 se hayan ejecutado.