Archivos de registro de base de datos de MySQL
Puede monitorizar el registro de errores, el registro de consultas lentas y el registro general. El registro de errores de MySQL se genera de forma predeterminada. Los registros general y de consultas lentas se pueden generar configurando parámetros del grupo de parámetros de base de datos. Amazon RDS aplica una rotación a todos los archivos de registro de MySQL con los intervalos indicados a continuación para cada tipo.
Puede monitorizar los registros de MySQL directamente desde la consola de Amazon RDS la API de Amazon RDS, la AWS CLI o los SDK de AWS. También es posible el acceso a los registros de MySQL dirigiéndolos a una tabla de la base de datos principal y consultando esa tabla. Puede usar la utilidad mysqlbinlog para descargar un registro binario.
Para obtener más información acerca de la visualización, descarga y vigilancia de los registros de bases de datos basados en archivos, consulte Archivos de registro de base de datos de Amazon RDS.
Temas
- Acceso a los registros de errores de MySQL
- Acceso al registro de consultas lentas y al registro general de MySQL
- Acceso al registro de auditoría de MySQL
- Publicación de registros de MySQL en CloudWatch Logs
- Tamaño del archivo de registro
- Administración de registros de MySQL basados en tablas
- Formato de registro binario
- Acceso a los registros binarios de MySQL
Acceso a los registros de errores de MySQL
El registro de errores de MySQL se almacena en el archivo mysql-error.log
. Puede ver mysql-error.log
usando la consola de Amazon RDS o recuperando el registro con la API de Amazon RDS,
la CLI de Amazon RDS o los SDK de AWS. mysql-error.log
se vacía cada 5 minutos y su contenido se agrega a mysql-error-running.log
. El archivo mysql-error-running.log
rota cada hora, y se conservan los archivos generados cada hora durante las últimas
24 horas. Tenga en cuenta que el periodo de retención es diferente entre Amazon RDS y Aurora.
Cada archivo de registro tiene la hora a la que se generó (en UTC) agregada a su nombre. Los archivos de registro también tienen una marca temporal que ayuda a determinar cuándo se escribieron las entradas del registro.
MySQL solo escribe en el registro de errores durante el inicio, el cierre y cuando encuentra errores. Una instancia de base de datos puede pasar horas o días sin que se escriban nuevas entradas en el registro de errores. Si no hay entradas recientes, se debe a que el servidor no ha encontrado ningún error que genere una entrada en el registro.
Acceso al registro de consultas lentas y al registro general de MySQL
El registro de consultas lentas y el registro general de MySQL pueden almacenarse en un archivo o en una tabla de base de datos configurando parámetros del grupo de parámetros de base de datos. Para obtener información acerca de cómo crear y modificar un grupo de parámetros de base de datos, consulte Trabajo con los grupos de parámetros de base de datos. Debe definir estos parámetros para poder ver el registro de consultas lentas o el registro general en la consola de Amazon RDS o a través de la API de Amazon RDS. la CLI de Amazon RDS o los SDK de AWS.
Puede controlar lo que registra MySQL con los parámetros de esta lista:
-
slow_query_log
: para crear el registro de consultas lentas, use el valor 1. El valor predeterminado es 0. -
general_log
: para crear el registro general, use el valor 1. El valor predeterminado es 0. -
long_query_time
: para evitar que se registren consultas rápidas en el registro de consultas lentas, especifique el valor del tiempo de ejecución mínimo de una consulta, en segundos, para que se registre. El valor predeterminado es 10 segundos y el mínimo es 0. Si log_output = FILE, puede especificar un valor de punto flotante que llega a una resolución de microsegundos. Si log_output = TABLE, debe especificar un valor entero con resolución de segundos. Solo se registran las consultas cuyo tiempo de ejecución exceda el valor delong_query_time
. Por ejemplo, si configuralong_query_time
como 0,1, evitará que se registren las consultas que tarden menos de 100 milisegundos en ejecutarse. -
log_queries_not_using_indexes
: para incluir en el registro de consultas lentas todas las consultas que no usen un índice, use el valor 1. El valor predeterminado es 0. Las consultas que no usen un índice se registran incluso si su tiempo de ejecución es inferior al valor del parámetrolong_query_time
. -
log_output
: puede especificar una de las opciones siguientes para el parámetrooption
log_output
.-
TABLE (predeterminada): las consultas generales se escriben en la tabla
mysql.general_log
y las consultas lentas en la tablamysql.slow_log
. -
FILE: tanto los registros de las consultas generales como los de las consultas lentas se escriben en el sistema de archivos. Los archivos de registro se rotan cada hora.
-
NONE: deshabilitar registro.
-
Cuando el registro está habilitado, Amazon RDS rota los registros de las tablas o
elimina los archivos de registro a intervalos regulares. Esta medida es una precaución
para reducir el riesgo de que un archivo de registro grande bloquee el uso de la base
de datos o afecte al rendimiento. El registro con las opciones FILE
y TABLE
emplea la rotación y eliminación del modo siguiente:
-
Cuando está activado el registro
FILE
, los archivos de registro se examinan cada hora, y los que tienen una antigüedad superior a 24 horas se eliminan. En algunos casos, el tamaño restante del archivo de registro combinado después de la eliminación puede superar el umbral del 2 por ciento del espacio asignado a una instancia de base de datos. En estos casos, los archivos de registro más grandes se eliminan hasta que el tamaño del archivo de registro no sobrepase el umbral. -
Cuando el registro de tipo
TABLE
está habilitado, en algunos casos, las tablas de registro se rotan cada 24 horas. Esta rotación de produce cuando el espacio ocupado por los registros de tabla es superior al 20% del espacio de almacenamiento asignado o si el tamaño de todos los registros combinados es superior a 10 GB. Si la cantidad de espacio utilizada para una instancia de base de datos es superior al 90% del espacio de almacenamiento asignado a la instancia de base de datos, se reducen los umbrales de la rotación de registros. En este caso las tablas de registro rotan cuando el espacio ocupado por los registros es superior al 10% del almacenamiento asignado o si el tamaño de todos los registros combinados es superior a 5 GB. Puede suscribirse al eventolow_free_storage
para recibir una notificación cuando roten las tablas de registro para liberar espacio. Para obtener más información, consulte Uso de las notificaciones de eventos de Amazon RDS.Cuando se rotan las tablas de registro, la tabla de registro actual se copia en una tabla de registro de copia de seguridad y las entradas de la tabla de registro actual se eliminan. Si la tabla de registro de copia de seguridad ya existe, se elimina antes de copiar la tabla del registro actual en la copia de seguridad. Puede consultar la tabla de registro de copia de seguridad si es necesaria. La tabla de registro de copia de seguridad para la tabla
mysql.general_log
se llamamysql.general_log_backup
. La tabla de registro de copia de seguridad para la tablamysql.slow_log
se llamamysql.slow_log_backup
.Para rotar la tabla
mysql.general_log
puede ejecutar el procedimientomysql.rds_rotate_general_log
. Para rotar la tablamysql.slow_log
puede ejecutar el procedimientomysql.rds_rotate_slow_log
.Los registros de tabla se rotan durante una actualización de la versión de la base de datos.
Para trabajar con los registros desde la consola de Amazon RDS, la API de Amazon RDS,
CLI de Amazon RDS o los SDK de AWS, configure el parámetro log_output
en FILE. Al igual que el registro de errores de MySQL, estos archivos de registro
rotan cada hora. Se conservan los archivos de registro que se generaron durante las
24 horas anteriores. Tenga en cuenta que el periodo de retención es diferente entre Amazon
RDS y Aurora.
Para obtener más información sobre la el registro de consultas lentas y el registro general, consulte los siguientes temas de la documentación de MySQL:
Acceso al registro de auditoría de MySQL
Para acceder al registro de auditoría, la instancia de base de datos debe usar un
grupo de opciones personalizado con la opción MARIADB_AUDIT_PLUGIN
. Para obtener más información, consulte Compatibilidad con el complemento de auditoría MariaDB.
Publicación de registros de MySQL en CloudWatch Logs
Puede configurar una instancia de base de datos MySQL en Amazon RDS para publicar datos de registro en un grupo de registros en Amazon CloudWatch Logs. Con CloudWatch Logs, puede realizar análisis en tiempo real de los datos de registro y utilizar CloudWatch para crear alarmas y ver métricas. Puede utilizar CloudWatch Logs para almacenar los registros de registros en almacenamiento de larga duración.
Amazon RDS publica cada registro de base de datos de MySQL como un flujo de base de
datos independiente en el grupo de registros. Por ejemplo, si configura la función
de exportación para que incluya el registro de consultas lentas, los datos de consultas
lentas se almacenan en un flujo de registros de consultas lentas en el grupo de registros
/aws/rds/instance/
.
my_instance
/slowquery
El registro de errores están habilitados de forma predeterminada. La tabla siguiente resume los requisitos para los otros registros de MySQL.
Registro | Requisito |
---|---|
Registro de auditoría |
La instancia de base de datos debe usar un grupo de opciones personalizado con la
opción |
Registro general |
La instancia de base de datos debe usar un grupo de parámetros personalizado con la
configuración del parámetro |
Registro de consultas lentas |
La instancia de base de datos debe usar un grupo de parámetros personalizado con la
configuración del parámetro |
Resultado de registro |
La instancia de base de datos debe usar un grupo de parámetros personalizado con la
configuración del parámetro |
La publicación de archivos de registro en CloudWatch Logs solo es compatible en las versiones de MySQL 5.6, 5.7 y 8.0.
Para publicar registros de base de datos MySQL en CloudWatch Logs con la consola
-
Abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/
. -
En el panel de navegación, elija Databases (Bases de datos) y, a continuación, seleccione la instancia de base de datos que desee modificar.
-
Elija Modify.
-
En la sección Logs exports (Exportaciones de registros), elija los registros que desea comenzar a publicar en CloudWatch Logs.
-
Elija Continue, seguido de Modify DB Instance en la página de resumen.
Puede publicar registros de MySQL con la CLI de AWS. Puede llamar al comando modify-db-instance
con los parámetros siguientes:
-
--db-instance-identifier
-
--cloudwatch-logs-export-configuration
Los cambios en la opción --cloudwatch-logs-export-configuration
siempre se aplican a la instancia de base de datos inmediatamente. Por lo tanto,
las opciones --apply-immediately
y --no-apply-immediately
no tienen ningún efecto.
También puede publicar registros de MySQL llamando a los siguientes comandos de la CLI de AWS:
Ejecute uno de estos comandos de la CLI de AWS con las siguientes opciones:
-
--db-instance-identifier
-
--enable-cloudwatch-logs-exports
-
--db-instance-class
-
--engine
Podrían ser necesarias otras opciones en función del comando de la CLI de AWS que ejecute.
En el siguiente ejemplo se modifica una instancia de base de datos MySQL DB para publicar
archivos de registro en CloudWatch Logs. El valor --cloudwatch-logs-export-configuration
es un objeto JSON. La clave de este objeto es EnableLogTypes
y su valor es una matriz de cadenas con cualquier combinación de audit
, error
, general
y slowquery
.
Para Linux, macOS o Unix:
aws rds modify-db-instance \ --db-instance-identifier
mydbinstance
\ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
Para Windows:
aws rds modify-db-instance ^ --db-instance-identifier
mydbinstance
^ --cloudwatch-logs-export-configuration '{"EnableLogTypes":["audit","error","general","slowquery"]}'
En el siguiente ejemplo se crea una instancia de base de datos MySQL y se publican
archivos de registro en CloudWatch Logs. El valor --enable-cloudwatch-logs-exports
es una matriz de cadenas JSON. Las cadenas pueden ser cualquier combinación de audit
, error
, general
y slowquery
.
Para Linux, macOS o Unix:
aws rds create-db-instance \ --db-instance-identifier
mydbinstance
\ --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \ --db-instance-classdb.m4.large
\ --engineMySQL
Para Windows:
aws rds create-db-instance ^ --db-instance-identifier
mydbinstance
^ --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' ^ --db-instance-classdb.m4.large
^ --engineMySQL
Puede publicar registros de MySQL con la API de RDS. Puede llamar a la acción ModifyDBInstance
con los parámetros siguientes:
-
DBInstanceIdentifier
-
CloudwatchLogsExportConfiguration
Los cambios en el parámetro CloudwatchLogsExportConfiguration
siempre se aplican a la instancia de base de datos inmediatamente. Por tanto, el
parámetro ApplyImmediately
no tiene efecto.
También puede publicar registros de MySQL llamando a las siguientes operaciones de la API de RDS:
Ejecute una de estas operaciones de la API de RDS con los siguientes parámetros:
-
DBInstanceIdentifier
-
EnableCloudwatchLogsExports
-
Engine
-
DBInstanceClass
Podrían ser necesarios otros parámetros en función del comando de la CLI de AWS que ejecute.
Tamaño del archivo de registro
El tamaño de los archivos de registro de consultas lentas, registro de errores y registro general de MySQL está limitado al 2 por ciento del espacio de almacenamiento asignado a una instancia de base de datos. Para mantener este umbral, los registros se rotan automáticamente cada hora y los que tienen una antigüedad superior a 24 horas se eliminan. Si el tamaño combinado de los archivos de registro sobrepasa el umbral después de eliminar los archivos de registro antiguos, los archivos de registro más grandes se eliminan hasta que el tamaño del archivo de registro deje de sobrepasar el umbral.
En MySQL existe un límite al tamaño de los BLOB escritos en el registro REDO. Para
respetar este límite, asegúrese de que el parámetro innodb_log_file_size
de la instancia de base de datos MySQL sea 10 veces mayor que el tamaño máximo de
BLOB que haya en las tablas, más la longitud de otros campos de longitud variable
(como VARCHAR
, VARBINARY
o TEXT
) de las mismas tablas. Para obtener información acerca del modo de configurar los
valores de los parámetros, consulte Trabajo con los grupos de parámetros de base de datos. Para obtener información acerca del límite de tamaño de BLOB en el registro REDO,
consulte Changes in MySQL 5.6.20
Administración de registros de MySQL basados en tablas
Para dirigir los registros general y de consultas lentas a tablas de la instancia
de base de datos, cree un grupo de parámetros de base de datos y asigne al parámetro
log_output
del servidor el valor TABLE
. Las consultas generales se registrarán entonces en la tabla mysql.general_log
y las consultas lentas en la tabla mysql.slow_log
. Puede consultar las tablas para obtener acceso a la información del registro. Al
habilitar este registro, se incrementa la cantidad de datos que se escribe en la base
de datos, lo que puede degradar el desempeño.
Tanto el registro general como los registros de consultas lentas están deshabilitados
de manera predeterminada. Para habilitar el registro en tablas, también debe asignar
a los parámetros general_log
y slow_query_log
del servidor el valor 1
.
Las tablas de registro seguirán creciendo hasta que las actividades de registro respectivas
se desactiven cambiando el valor del parámetro a 0
. A menudo, se acumula con el tiempo una gran cantidad de datos, lo que puede consumir
un porcentaje elevado del espacio de almacenamiento asignado. Amazon RDS no permite
truncar las tablas de registro, pero sí mover su contenido. Al rotar una tabla, su
contenido se guarda en una tabla de copia de seguridad y se crea una nueva tabla de
registro vacía. Puede aplicar manualmente la rotación de las tablas de registro con
los procedimientos de línea de comandos siguientes, en los que el símbolo del sistema
se representa por PROMPT>
:
PROMPT> CALL mysql.rds_rotate_slow_log; PROMPT> CALL mysql.rds_rotate_general_log;
Para eliminar por completo los datos antiguos y recuperar el espacio del disco, llame al procedimiento correspondiente dos veces consecutivas.
Formato de registro binario
MySQL en de Amazon RDS admite los formatos de registro binario basados en filas, basados en instrucciones y mixto para las versiones 5.6 y posteriores de MySQL. El formato de registro binario predeterminado
es el mixto. Para las instancias de base de datos con MySQL 5.1 y 5.5, solo se admite el registro
binario mixto. Para obtener información detallada acerca de los formatos de registro binarios de
MySQL, consulte Binary Logging Formats
Si tiene pensado utilizar la replicación, el formato de registro binario es importante
porque determina el registro de los cambios de datos que se registra en la fuente
y se envía a los objetivos de replicación. Para obtener más información acerca de
las ventajas y desventajas de distintos tipos de formatos de registro binarios para
la replicación, consulte Advantages and Disadvantages of Statement-Based and Row-Based Replication
La configuración del formato de registro binario como basado en filas puede generar archivos de registro binario muy grandes. Los archivos de registro binario grandes reducen la cantidad de almacenamiento disponible para el de instancia de base de datos y pueden incrementar la cantidad de tiempo necesaria para llevar a cabo la operación de restauración del de una instancia de base de datos.
La replicación basada en instrucciones puede causar incoherencias entre el de la
instancia de base de datos de origen y la réplica de lectura. Para obtener más información,
consulte Determination of Safe and Unsafe Statements in Binary Logging
Para configurar el formato de registro binario de MySQL
-
Abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/
. -
En el panel de navegación, seleccione Parameter groups (Grupos de parámetros).
-
Elija el grupo de parámetros utilizados por el de la instancia de base de datos que quiera modificar.
No puede modificar un grupo de parámetros predeterminado. Si el de la instancia de base de datos emplea un grupo de parámetros predeterminado, cree un nuevo grupo de parámetros y asócielo con el de la instancia de base de datos.
Para obtener más información acerca de los grupos de parámetros, consulte Trabajo con los grupos de parámetros de base de datos.
-
En Parameter group actions (Acciones de grupos de parámetros), seleccione Edit (Editar).
-
Establezca el parámetro
binlog_format
en el formato de registro binario de su elección (ROW, STATEMENT o MIXED). -
Elija Save Changes (Guardar cambios) para guardar los cambios realizados en el grupo de parámetros del de la base de datos.
El cambio de un grupo de parámetros de base de datos afecta a todas las instancias de base de datos que utilizan ese grupo de parámetros. Si desea especificar diferentes formatos de registro binario para diferentes instancias de base de datos MySQL en una región de AWS, las instancias de base de datos deben utilizar diferentes grupos de parámetros de base de datos. Estos grupos de parámetros identifican diferentes formatos de registro. Asigne el grupo de parámetros de base de datos apropiado a cada instancia de base de datos.
Acceso a los registros binarios de MySQL
Puede usar la herramienta mysqlbinlog para descargar o transmitir los registros binarios
desde las instancias de Amazon RDS con MySQL 5.6 o posterior. El registro binario
se descarga en el equipo local, donde puede ejecutar acciones tales como reproducirlo
con la utilidad mysql. Para obtener más información acerca del uso de la herramienta
mysqlbinlog, consulte Using mysqlbinlog to Back Up Binary Log Files
Para ejecutar la utilidad mysqlbinlog en una instancia de Amazon RDS, use las siguientes opciones:
-
Especifique la opción
--read-from-remote-server
. -
--host
: especifique el nombre de DNS del punto de conexión de la instancia. -
--port
: especifique el puerto que utiliza la instancia. -
--user
: especifique un usuario de MySQL al que se haya asignado el permiso de esclavo de replicación. -
--password
: especifique la contraseña del usuario o no indique ninguna para que la utilidad le pida una contraseña. -
Especifique la opción
--raw
para descargar el archivo en formato binario. -
--result-file
: especifique el archivo local en que se guardará la salida sin procesar. -
Especifique los nombres de uno o varios de los archivos de registro binarios. Para obtener una lista de los registros disponibles, use el comando SHOW BINARY LOGS de SQL.
-
Especifique la opción
--stop-never
para transmitir los archivos binarios en streaming.
Para obtener más información acerca de las opciones de mysqlbinlog, consulte mysqlbinlog - Utility for Processing Binary Log Files
Consulte los ejemplos siguientes.
Para Linux, macOS o Unix:
mysqlbinlog \ --read-from-remote-server \ --host=MySQL56Instance1.cg034hpkmmjt.region.rds.amazonaws.com \ --port=3306 \ --user ReplUser \ --password \ --raw \ --result-file=/tmp/ \ binlog.00098
Para Windows:
mysqlbinlog ^ --read-from-remote-server ^ --host=MySQL56Instance1.cg034hpkmmjt.region.rds.amazonaws.com ^ --port=3306 ^ --user ReplUser ^ --password ^ --raw ^ --result-file=/tmp/ ^ binlog.00098
Normalmente, Amazon RDS limpia un registro binario lo antes posible, pero el registro
binario debe seguir estando disponible en la instancia para que mysqlbinlog pueda
obtener acceso a él. Para especificar el número de horas que RDS debe retener los
archivos binarios, utilice el procedimiento almacenado mysql.rds_set_configuration
y especifique un periodo lo bastante largo como para descargar los registros. Una
vez que haya definido el periodo de retención, monitorice el uso del almacenamiento
para la instancia de base de datos con el fin de asegurarse de que los registros binarios
conservados no consuman demasiado almacenamiento.
El procedimiento almacenado mysql.rds_set_configuration
solo está disponible para la versión 5.6 o posteriores de MySQL.
En el siguiente ejemplo se define el periodo de retención en 1 día.
call mysql.rds_set_configuration('binlog retention hours', 24);
Para mostrar el valor actual, utilice el procedimiento almacenado mysql.rds_show_configuration
.
call mysql.rds_show_configuration;