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> mysqlbinlognombre_de_equipo-bin.000001 | mysql # PELIGRO!! shell> mysqlbinlognombre_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> mysqlbinlognombre_de_equipo-bin.000001nombre_de_equipo-bin.000002 | mysql
Otra forma de hacerlo es escribir todos los logs a un único fichero y luego procesar el fichero:
shell> mysqlbinlognombre_de_equipo-bin.000001 > /tmp/statements.sql shell> mysqlbinlognombre_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.
    
É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.

