Utilice mysqlbinlog para descargar archivos de registro binario desde una instancia de ApsaraDB RDS for MySQL y analizar su contenido con fines de depuración, auditoría o recuperación de datos.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una instancia de ApsaraDB RDS for MySQL con la función de copia de seguridad de registros habilitada. Para habilitarla, consulte Procedure
Un cliente de MySQL instalado localmente que ejecute la misma versión de MySQL que la instancia de RDS
El endpoint de la instancia. Para consultarlo, véase Consulta y gestión de endpoints y puertos de instancia
Una cuenta de base de datos con permisos suficientes para conectarse a la instancia
Descarga de archivos de registro binario
Existen dos métodos disponibles. Utilice el método de consola a menos que requiera acceso mediante programación o en tiempo real.
Método 1 (recomendado): Descarga desde la consola
Instancias con disco en la nube: La copia de seguridad de registros está habilitada de forma predeterminada. Los registros binarios se cargan en el almacenamiento de copias de seguridad en tiempo real. Descargue los registros en cualquier momento desde la consola. Consulte la sección de disco en la nube en Métodos de descarga.
Instancias con disco local: Consulte la sección de disco local en Métodos de descarga.
Método 2: Descarga mediante mysqlbinlog
Utilice este método para descargar archivos de registro binario directamente a su computadora mediante mysqlbinlog.
-
Conéctese a la instancia de RDS:
mysql -u<username> -p -h<endpoint> -
Liste los archivos de registro binario disponibles y anote los valores de
Log_name:SHOW BINARY LOGS;La salida muestra los archivos de registro binario disponibles:
mysql> SHOW BINARY LOGS; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000022 | 406039 | | mysql-bin.000023 | 71497 | +------------------+-----------+ 2 rows in set (0.01 sec) -
Salga de la CLI de MySQL:
exit; -
Descargue el archivo de registro binario a su computadora local. Reemplace
<mysql-bin.XXX>con el nombre del archivo obtenido en el paso 2 y<output-file>con el nombre del archivo local donde desea guardarlo:--read-from-remote-server— establece conexión con el servidor MySQL remoto para transmitir el contenido del registro binario.--raw— guarda el archivo en formato binario sin procesar en lugar de texto.-u<username>— el nombre de usuario de la cuenta de base de datos.-p<password>— la contraseña de la cuenta de base de datos.-h<endpoint>— el endpoint de la instancia de RDS.<mysql-bin.XXX>— el nombre del archivo de registro binario del paso 2.> <output-file>— el archivo local donde se guardará el registro binario.
mysqlbinlog \ -u<username> \ -p<password> \ -h<endpoint> \ --read-from-remote-server \ --raw \ <mysql-bin.XXX> > <output-file>Parámetros:
-
Compruebe que el archivo se haya descargado correctamente:
more <output-file>
Análisis de archivos de registro binario
Una vez descargado el archivo de registro binario, utilice mysqlbinlog para analizar y consultar su contenido.
Para visualizar la salida analizada página por página:
mysqlbinlog \
-vv \
--base64-output=decode-rows \
<mysql-bin.XXX> | more
Para escribir la salida analizada en un archivo:
mysqlbinlog \
-vv \
--base64-output=decode-rows \
<mysql-bin.XXX> > <output-file>
Parámetros:
-vv— muestra información detallada de los eventos, incluidos los cambios a nivel de fila en un formato legible.--base64-output=decode-rows— decodifica los eventos de fila codificados en Base64 para permitir la lectura de las sentencias SQL.<mysql-bin.XXX>— el archivo de registro binario que se va a analizar.| more— desplaza la salida pantalla por pantalla.> <output-file>— escribe la salida en un archivo local.
La salida analizada tiene un aspecto similar al siguiente:
[root@iZbp****** ~]# mysqlbinlog -vv --base64-output=decode-rows mysql-bin.000022 | more
# The proper term is pseudo_replica_mode, but we use this compatibility alias
# to make the statement usable on server versions 8.0.24 and older.
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#230911 9:27:28 server id 26718053 end_log_pos 123 CRC32 0xa231cb44 Start: binlog v 4, server v 5.7.42-log created 230911 9:27:28
# at 123
#230911 9:27:28 server id 26718053 end_log_pos 194 CRC32 0x078b6dc1 Previous-GTIDs
# a63b4ed1-4c86-11ee-9029-00163e157053:1-27339
# at 194
#230911 9:27:32 server id 26718053 end_log_pos 259 CRC32 0x59b848c3 GTID last_committed=0 sequence_number=1 rbr_only=yes original_committed_ti
mestamp=0 immediate_commit_timestamp=0 transaction_length=0
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
# immediate_commit_timestamp=0 (1970-01-01 08:00:00.000000 CST)
/*!80001 SET @@session.original_commit_timestamp=0*//*!*/;
/*!80014 SET @@session.original_server_version=0*//*!*/;
/*!80014 SET @@session.immediate_server_version=0*//*!*/;
SET @@SESSION.GTID_NEXT= 'a63b4ed1-4c86-11ee-9029-00163e157053:27340'/*!*/;
# at 259
#230911 9:27:32 server id 26718053 end_log_pos 327 CRC32 0xc0dddaec Query thread_id=16849 exec_time=0 error_code=0
SET TIMESTAMP=1694395652/*!*/;
SET @@session.pseudo_thread_id=16849/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=2097152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb3 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
Para obtener detalles completos sobre las opciones de mysqlbinlog , consulte la documentación de MySQL .
Preguntas frecuentes
La salida muestra contenido binario ilegible en lugar de sentencias SQL.
Agregue --base64-output=decode-rows al comando mysqlbinlog. Sin esta opción, los eventos de registro binario basados en filas se muestran en formato Base64 sin procesar.

Aparece este error: ERROR: Error in Log_event::read_log_event(): 'Sanity check failed'
ERROR: Error in Log_event::read_log_event(): 'Sanity check failed', data_len: 151, event_type: 35
ERROR: Could not read entry at offset 120: Error in log format or read error.
Este es un problema conocido en mysqlbinlog 3.3. Actualice a mysqlbinlog 3.4 o posterior para resolverlo.
Aparece este error: mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4'
Su archivo de configuración my.cnf contiene default-character-set=utf8mb4, parámetro no admitido por mysqlbinlog. Agregue --no-defaults para omitir el archivo de configuración:
mysqlbinlog \
--no-defaults \
-u<username> \
-p<password> \
-h<endpoint> \
--read-from-remote-server \
<mysql-bin.XXX> > <output-file>
Las marcas de tiempo en la salida analizada no coinciden con las horas reales de los eventos.
Las marcas de tiempo de los registros binarios se almacenan como marcas de tiempo UNIX sin información de zona horaria. mysqlbinlog las convierte utilizando la zona horaria local de la computadora donde se ejecuta el comando. Si dicha zona horaria difiere de la zona horaria de la instancia de RDS, las horas mostradas serán incorrectas. Configure su zona horaria local para que coincida con la de la instancia de RDS antes de ejecutar mysqlbinlog.
Ámbito de aplicación
ApsaraDB RDS for MySQL