Arquivos de log do banco de dados MySQL - Amazon Relational Database Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Arquivos de log do banco de dados MySQL

É possível monitorar o log de erros do MySQL, o log de consultas lentas e o log geral. O log de erros do MySQL é gerado por padrão; você pode gerar a consulta lenta e os logs gerais, definindo parâmetros no seu parameter group de banco de dados. O Amazon RDS rotaciona todos os arquivos de log do MySQL; os intervalos para cada tipo são especificados a seguir.

Você pode monitorar os logs do MySQL diretamente por meio do console do Amazon RDS, da API do Amazon RDS, da AWS CLI ou dos SDKs da AWS. Você também pode acessar os logs do MySQL direcionando os logs para uma tabela de banco de dados no banco de dados principal e consultando essa tabela. Você pode usar o utilitário mysqlbinlog para fazer download de um log de binários.

Para mais informações sobre a visualização, o download e os logs de bancos de dados baseados no monitoramento de arquivos, consulte Arquivos de log do banco de dados do Amazon RDS.

Acessar logs de erros do MySQL

O log de erros do MySQL é gravado no arquivo mysql-error.log. É possível visualizar mysql-error.log usando o console do Amazon RDS ou recuperando o log usando a API do Amazon RDS, a CLI do Amazon RDS ou os SDKs da AWS. mysql-error.log é descarregado a cada 5 minutos, e seu conteúdo é anexado a mysql-error-running.log. Em seguida, o arquivo mysql-error-running.log é rotacionado a cada hora, e os arquivos horários gerados durante as últimas 24 horas são mantidos. Observe que o período de retenção é diferente entre o Amazon RDS e o Aurora.

Cada arquivo de log tem a hora em que foi gerado (em UTC) anexada ao seu nome. Os arquivos de log também possuem um carimbo de data/hora que ajuda você a determinar quando as entradas de log foram gravadas.

O MySQL grava no log de erros apenas na inicialização, no desligamento e quando encontra erros. Uma instância de banco de dados pode passar horas ou dias sem novas entradas gravadas no log de erros. Se você não vir nenhuma entrada recente, é porque o servidor não encontrou um erro que resultou em uma entrada de log.

Acessar os logs gerais e de consultas lentas do MySQL

O log de consultas lentas do MySQL e o log geral podem ser gravados em um arquivo ou em uma tabela de banco de dados definindo parâmetros em seu parameter group de banco de dados. Para obter informações sobre como criar e modificar um parameter group de banco de dados, consulte Como trabalhar com grupos de parâmetros de banco de dados. Você deve definir esses parâmetros antes de visualizar o log de consultas lentas ou o log geral no console do Amazon RDS ou usando a API do Amazon RDS, a CLI do Amazon RDS ou os SDKs da AWS.

Você pode controlar o registro em log do MySQL usando os parâmetros nessa lista:

  • slow_query_log: para criar o log de consultas lentas, defina como 1. O padrão é 0.

  • general_log: para criar o log geral, defina como 1. O padrão é 0.

  • long_query_time: para evitar que as consultas de execução rápida sejam registradas no log de consultas lentas, especifique um valor para o tempo de execução de consultas mais curto a ser registrado, em segundos. O padrão é 10 segundos; o mínimo é 0. Se log_output = FILE, você poderá especificar um valor de ponto flutuante com resolução por microssegundo. Se log_output = TABLE, você deverá especificar um valor inteiro com a segunda resolução. Apenas as consultas cujo tempo de execução excede o valor long_query_time são registradas em log. Por exemplo, definir long_query_time como 0.1 impede que qualquer consulta que seja executada por menos de 100 milissegundos seja registrada.

  • log_queries_not_using_indexes: para registrar todas as consultas que não usam um índice no log de consultas lentas, defina como 1. O padrão é 0. As consultas que não usam um índice são registradas em log, mesmo que seu tempo de execução seja inferior ao valor do parâmetro long_query_time.

  • log_output option: você pode especificar uma das seguintes opções para o parâmetro log_output.

    • TABLE (padrão) – grava consultas gerais na tabela mysql.general_log e consultas lentas na tabela mysql.slow_log.

    • FILE – grave logs de consultas gerais e lentas no sistema de arquivos. Arquivos de log são rotacionados de hora em hora.

    • NONE – desabilite o registro em log.

Quando o registro em log está habilitado, o Amazon RDS faz o rodízio de logs de tabelas ou exclui arquivos de log em intervalos regulares. Essa medida é uma precaução para reduzir a possibilidade de um arquivo de log grande bloquear o uso do banco de dados ou afetar o desempenho. O registro em log FILE e TABLE abordam o rodízio e a exclusão da seguinte maneira:

  • Quando o registro em log FILE está habilitado, os arquivos de log são examinados a cada hora, e os arquivos de log com mais de 24 horas são excluídos. Em alguns casos, o tamanho do arquivo de log combinado restante após a exclusão pode exceder o limite de 2% do espaço alocado da instância de um banco de dados. Nesses casos, os arquivos de log maiores são excluídos até que o tamanho de arquivo de log não exceda o limite.

  • Quando o registro de TABLE estiver ativado, em alguns casos as tabelas de log serão rotacionadas a cada 24 horas. Essa rotação ocorrerá se o espaço usado pelos logs de tabelas for superior a 20% do espaço de armazenamento alocado ou se o tamanho de todos os logs combinados for superior a 10 GB. Se a quantidade de espaço usada por uma instância de banco de dados for maior que 90 por cento do espaço de armazenamento alocado da instância de banco de dados, os limites para o rodízio do log serão reduzidos. As tabelas de log serão rotacionadas se o espaço usado pelos logs de tabelas for superior a 10% do espaço de armazenamento alocado ou se o tamanho de todos os logs combinados for superior a 5 GB. Você pode assinar o evento low_free_storage para ser notificado quando tabelas de log forem rotacionadas para liberar espaço. Para obter mais informações, consulte Usar a notificação de evento do Amazon RDS.

    Quando as tabelas de log são revezadas, a tabela de log atual é copiada para uma tabela de log de backup e as entradas na tabela de log atual são removidas. Se a tabela de log de backup já existir, então ela será excluída antes que a tabela de log atual seja copiada ao backup. Você pode consultar a tabela de log de backup, se necessário. A tabela de log de backup para a tabela mysql.general_log é denominada mysql.general_log_backup. A tabela de log de backup para a tabela mysql.slow_log é denominada mysql.slow_log_backup.

    Você pode rotacionar a tabela mysql.general_log chamando o procedimento mysql.rds_rotate_general_log. Você pode rotacionar a tabela mysql.slow_log chamando o procedimento mysql.rds_rotate_slow_log.

    Os logs de tabelas são rotacionados durante um upgrade de versão do banco de dados.

Para trabalhar com os logs no console do Amazon RDS, na API do Amazon RDS, na CLI do Amazon RDS ou nos SDKs da AWS, defina o parâmetro log_output como FILE. Como o log de erros do MySQL, esses arquivos de log são rotacionados por hora. Os arquivos de log que foram gerados durante as 24 horas anteriores são retidos. Observe que o período de retenção é diferente entre o Amazon RDS e o Aurora.

Para obter mais informações sobre os log de consultas gerais e de consultas lentas, acesse os seguintes tópicos na documentação do MySQL:

Acessar o log de auditoria do MySQL

Para acessar o log de auditoria, a instância de banco de dados deve usar um grupo de opções personalizado com a opção MARIADB_AUDIT_PLUGIN. Para obter mais informações, consulte Suporte ao plug-in de auditoria do MariaDB.

Publicar logs do MySQL no CloudWatch Logs

Você pode configurar sua instância de banco de dados MySQL do Amazon RDS para publicar dados de log em um grupo no Amazon CloudWatch Logs. Com o CloudWatch Logs, você pode executar análise em tempo real de dados de log e usar o CloudWatch para criar alarmes e visualizar métricas. Você pode usar o CloudWatch Logs para armazenar seus registros de log em armazenamento resiliente.

O Amazon RDS publica cada log de banco de dados MySQL como um fluxo separado de banco de dados no grupo de logs. Por exemplo, se você configurar a função de exportação para incluir o log de consultas lentas, os dados de consultas lentas serão armazenados em um fluxo de log de consultas lentas no grupo de logs /aws/rds/instance/my_instance/slowquery.

O log de erros está habilitado por padrão. A tabela a seguir resume os requisitos de outros logs do MySQL.

Log Requisito

Log de auditoria

A instância de banco de dados deve usar um grupo de opções personalizado com a opção MARIADB_AUDIT_PLUGIN.

Log geral

A instância de banco de dados deve usar um parameter group personalizado com a configuração de parâmetro general_log = 1 para habilitar o log geral.

Log de consultas lentas

A instância de banco de dados deve usar um parameter group personalizado com a configuração de parâmetro slow_query_log = 1 para habilitar o log de consulta lenta.

Resultado de saída do log

A instância de banco de dados deve usar um parameter group personalizado com a configuração de parâmetro log_output = FILE para gravar logs no sistema de arquivos e publicá-los no CloudWatch Logs.

nota

A publicação de arquivos de log no CloudWatch Logs só é compatível nas versões 5.6, 5.7 e 8.0. do MySQL.

Para publicar logs do MySQL no CloudWatch Logs usando o console

  1. Abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, escolha Databases (Bancos de dados) e a instância de banco de dados que você deseja modificar.

  3. Selecione Modify.

  4. Na seção Log exports (Exportações de log), escolha os logs que deseja começar a publicar no CloudWatch Logs.

  5. Escolha Continue (Continuar) e depois escolha Modify DB Instance (Modificar instância de banco de dados) na página de resumo.

Você pode publicar logs do MySQL com a CLI da AWS. Você pode chamar o comando modify-db-instance com os seguintes parâmetros:

  • --db-instance-identifier

  • --cloudwatch-logs-export-configuration

nota

Uma alteração feita na opção --cloudwatch-logs-export-configuration sempre é aplicada imediatamente na instância de banco de dados. Por isso, as opções --apply-immediately e --no-apply-immediately não entram em vigor.

Também é possível publicar logs do MySQL chamando os seguintes comandos CLI da AWS:

Execute um destes comandos CLI da AWS com as seguintes opções:

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

Outras opções podem ser exigidas dependendo do comando de CLI da AWS que você executa.

O exemplo a seguir altera uma instância de Banco de Dados MySQL existente para publicar os arquivos de log no CloudWatch Logs. O valor --cloudwatch-logs-export-configuration é um objeto JSON. A chave para esse objeto é EnableLogTypes, e seu valor é uma matriz de strings com qualquer combinação de audit, error, general e slowquery.

Para Linux, macOS ou 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"]}'

O exemplo a seguir cria uma instância de Banco de Dados MySQL e publica os arquivos de log no CloudWatch Logs. O valor --enable-cloudwatch-logs-exports é uma matriz de strings JSON. As strings podem ser qualquer combinação de audit, error, general e slowquery.

Para Linux, macOS ou Unix:

aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' \ --db-instance-class db.m4.large \ --engine MySQL

Para Windows:

aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --enable-cloudwatch-logs-exports '["audit","error","general","slowquery"]' ^ --db-instance-class db.m4.large ^ --engine MySQL

Você pode publicar logs do MySQL com a API da RDS. Você pode chamar a ação ModifyDBInstance com os seguintes parâmetros:

  • DBInstanceIdentifier

  • CloudwatchLogsExportConfiguration

nota

Uma alteração feita no parâmetro CloudwatchLogsExportConfiguration sempre é aplicada imediatamente na instância de banco de dados. Por isso, o parâmetro ApplyImmediately não entra em vigor.

Também é possível publicar logs do MySQL chamando as seguintes operações da API do RDS:

Execute uma destas operações da API do RDS com os seguintes parâmetros:

  • DBInstanceIdentifier

  • EnableCloudwatchLogsExports

  • Engine

  • DBInstanceClass

Outros parâmetros podem ser exigidos dependendo do comando da AWS CLI que você executa.

Tamanho do arquivo de log

Os tamanhos de arquivo do log de consultas lentas, do log de erros e do log geral do MySQL são restritos a não mais de 2% do espaço de armazenamento alocado para uma instância de banco de dados. Para manter esse limite, os logs são rotacionados automaticamente a cada hora, e os arquivos de log com mais de 24 horas são removidos. Se o tamanho do arquivo de log combinado exceder o limite após a remoção dos arquivos de log antigos, os arquivos de log maiores serão excluídos até o tamanho do arquivo de log deixar de exceder esse limite.

Para o MySQL, há um limite de tamanho em BLOBs gravados no log redo. Para considerar este limite, certifique-se de que o parâmetro innodb_log_file_size da sua instância de banco de dados MySQL seja 10 vezes maior que o maior tamanho de dados BLOB encontrado nas suas tabelas, mais o comprimento de outros campos de comprimento variável (VARCHAR, VARBINARY, TEXT) nas mesmas tabelas. Para obter informações sobre definir valores de parâmetros, consulte Como trabalhar com grupos de parâmetros de banco de dados. Para obter informações sobre o limite de tamanho do BLOB de logs redo, acesse o tópico sobre Alterações no MySQL 5.6.20.

Gerenciar logs do MySQL com base em tabelas

Você pode direcionar os logs de consultas gerais e lentas para tabelas na instância de banco de dados, criando um parameter group de banco de dados e definindo o parâmetro do servidor log_output como TABLE. As consultas gerais são registradas na tabela mysql.general_log e as consultas lentas são registradas na tabela mysql.slow_log. Você pode consultar as tabelas para acessar as informações do log. Habilitar esse registro aumenta a quantidade de dados gravados no banco de dados, o que pode degradar o desempenho.

O log geral e os logs de consultas lentas estão desabilitados por padrão. Para habilitar o registro em log de tabelas, você também deve definir os parâmetros de servidor general_log e slow_query_log como 1.

As tabelas de log continuarão crescendo até que as respectivas atividades de log sejam desativadas com a redefinição do parâmetro apropriado como 0. Uma grande quantidade de dados geralmente se acumula ao longo do tempo, o que pode consumir uma porcentagem considerável do seu espaço de armazenamento alocado. O Amazon RDS não permite que você trunque tabelas de log, mas você pode mover seu conteúdo. Rotacionar uma tabela salva seu conteúdo em uma tabela de backup e, em seguida, cria uma nova tabela de log vazia. Você pode rotacionar manualmente as tabelas de log com os seguintes procedimentos de linha de comando, em que o prompt de comando é indicado por PROMPT>:

PROMPT> CALL mysql.rds_rotate_slow_log; PROMPT> CALL mysql.rds_rotate_general_log;

Para remover completamente os dados antigos e recuperar o espaço em disco, chame o procedimento apropriado duas vezes sucessivamente.

Formato de registro em log binário

O MySQL no Amazon RDS oferece suporte aos formatos de registro em log binário baseado em linha, baseado em instrução e misto para o MySQL versão 5.6 e posterior. O formato de registro em log binário padrão é combinado. Para instâncias de bancos de dados que executam o MySQL versões 5.1 e 5.5, há suporte apenas ao registro em log binário. Para obter detalhes sobre os diferentes formatos de logs binários do MySQL, consulte Formatos de registro em logs binários na documentação do MySQL.

Se você pretende usar replicação, o formato do registro em log binário é importante porque determina o registro de alterações feitas nos dados salvas na origem e enviadas para os destinos de replicação. Para obter informações sobre as vantagens e as desvantagens de formatos de registro em logs binários para replicação, consulte Vantagens e desvantagens da replicação baseada em instrução e baseada em linha na documentação do MySQL.

Importante

Definir o formato de registro em log de binários como baseado em linha pode resultar em arquivos de log de binários muito grandes. Arquivos de log binários grandes reduzem a quantidade de armazenamento disponível para uma instância de banco de dados e podem aumentar o tempo necessário para realizar uma operação de restauração de uma instância de banco de dados.

A replicação baseada em instrução pode causar inconsistências entre a instância de banco de dados de origem e uma réplica de leitura. Para obter mais informações, consulte Determinar instruções seguras e não seguras em registros em logs binários na documentação do MySQL.

Para definir o formato de registro em log binário do MySQL

  1. Abra o console do Amazon RDS em https://console.aws.amazon.com/rds/.

  2. No painel de navegação, selecione Parameter groups.

  3. Escolha o grupo de parâmetros usado pela instância de banco de dados que você deseja modificar.

    Não é possível modificar um grupo de parâmetros padrão. Se a instância de banco de dados estiver usando um grupo de parâmetros padrão, crie outro grupo de parâmetros e o associe à instância de banco de dados.

    Para obter mais informações sobre parameter groups, consulte Como trabalhar com grupos de parâmetros de banco de dados.

  4. Em Parameter group actions (Ações do grupo de parâmetros), escolha Edit (Editar).

  5. Defina o parâmetro binlog_format para o formato de registro em log binário escolhido (ROW, STATEMENT ou MIXED).

  6. Selecione Salvar alterações para salvar as atualizações no grupo de parâmetros de banco de dados.

Importante

Alterar um grupo de parâmetros de banco de dados afeta todas as instâncias de banco de dados que usam esse grupo de parâmetros. Se você quiser especificar diferentes formatos de log binário para diferentes instâncias de banco de dados MySQL em uma região da AWS, as instâncias de banco de dados deverão usar diferentes grupos de parâmetros de banco de dados. Esses grupos de parâmetros identificam diferentes formatos de log. Atribua o grupo de parâmetros de banco de dados apropriado a cada instância de banco de dados.

Acessar logs binários do MySQL

Você pode usar o utilitário mysqlbinlog para fazer download ou o streaming de logs binários de instâncias do Amazon RDS executando o MySQL 5.6 ou posterior. O log binário é transferido por download para o computador local, onde você pode realizar ações como reproduzir o log usando o utilitário mysql. Para obter mais informações sobre como usar o utilitário mysqlbinlog, acesse Usar mysqlbinlog para fazer backup de arquivos de log binários.

Para executar o utilitário mysqlbinlog em uma instância do Amazon RDS, use as seguintes opções:

  • Especifique a opção --read-from-remote-server.

  • --host: especifique o nome DNS do endpoint da instância.

  • --port: especifique a porta usada pela instância.

  • --user: especifique um usuário do MySQL ao qual foi concedida a permissão de escravo de replicação.

  • --password: especifique uma senha para o usuário ou omita um valor de senha de forma que o serviço solicite uma senha.

  • Para ter o download do arquivo em um formato binário, especifique a opção --raw.

  • --result-file: especifique o arquivo local para receber a saída bruta.

  • Especifique os nomes de um ou mais arquivos de log binários. Para obter uma lista dos logs disponíveis, use o comando SQL SHOW BINARY LOGS.

  • Para fazer streaming dos arquivos de log binários, especifique a opção --stop-never.

Para obter mais informações sobre as opções de mysqlbinlog, acesse Utilitário mysqlbinlog para processar arquivos de log binários.

Por exemplo, veja o seguinte:

Para Linux, macOS ou 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, o Amazon RDS limpa um log de binários o mais rápido possível, mas o log de binários ainda deve estar disponível na instância para ser acessado por mysqlbinlog. Para especificar o número de horas para o RDS reter os logs binários, use o procedimento armazenado mysql.rds_set_configuration e especifique um período com tempo suficiente para que você faça download dos logs. Após configurar o período de retenção, monitore o uso de armazenamento da instância de banco de dados para garantir que os logs binários retidos não consumam muito armazenamento.

nota

O procedimento armazenado mysql.rds_set_configuration só está disponível para o MySQL versão 5.6 ou posterior.

O exemplo a seguir define o período de retenção como 1 dia.

call mysql.rds_set_configuration('binlog retention hours', 24);

Para exibir a configuração atual, use o procedimento armazenado mysql.rds_show_configuration.

call mysql.rds_show_configuration;