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

Arquivos de log do banco de dados MariaDB

É possível monitorar o log de erros do MariaDB, o log de consultas lentas e o log geral. O log de erros do MariaDB é gerado por padrão. Você pode gerar a consulta lenta e os logs gerais definindo parâmetros em seu grupo de parâmetros do banco de dados. O Amazon RDS alterna todos os arquivos de log do MariaDB; os intervalos para cada tipo são fornecidos a seguir.

Você pode monitorar os logs do MariaDB diretamente por meio do console do Amazon RDS, da API do Amazon RDS, da CLI do Amazon RDS ou os SDKs da AWS. Você também pode acessar os logs do MariaDB direcionando os logs para uma tabela de banco de dados no banco de dados primário e consultando essa tabela. Você pode usar o utilitário mysqlbinlog para baixar 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 Monitorar arquivos de log do Amazon RDS.

Acessar logs de erros do MariaDB

O log de erros do MariaDB é gravado no arquivo <host-name>.err. É possível visualizar esse arquivo usando o console do Amazon RDS ou recuperando o log usando a API do Amazon RDS, a CLI do Amazon RDS ou SDKs da AWS. O arquivo <host-name>.err é descarregado a cada 5 minutos, e seu conteúdo é anexado a mysql-error-running.log. O arquivo mysql-error-running.log é então rotacionado a cada hora, e os arquivos horários gerados durante as últimas 24 horas são mantidos. 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 MariaDB 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 MariaDB

O log de consultas lentas do MariaDB 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 Trabalhar com grupos de parâmetros. 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 AWS CLI ou os SDKs da AWS.

Você pode controlar o registro em log do MariaDB 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 esse parâmetro 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 a performance. 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.

    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.

O Amazon RDS registra o rodízio dos logs TABLE e FILE em um evento do Amazon RDS e envia uma notificação para você.

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 MariaDB, esses arquivos de log são rotacionados por hora. Os arquivos de log que foram gerados durante as 24 horas anteriores são retidos.

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

Publicar logs do MariaDB no Amazon CloudWatch Logs

Você pode configurar sua instância de banco de dados MariaDB para publicar dados de log em um grupo de log 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 MariaDB 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 MariaDB.

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.

Para publicar logs do MariaDB no CloudWatch Logs a partir do 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 MariaDB com o AWS CLI. 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 MariaDB seguindo os seguintes comandos AWS CLI:

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

  • --db-instance-identifier

  • --enable-cloudwatch-logs-exports

  • --db-instance-class

  • --engine

Outras opções podem ser obrigatórias, dependendo do comando da AWS CLI executado.

exemplo

O exemplo a seguir altera uma instância de Banco de Dados MariaDB 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"]}'

exemplo

O comando a seguir cria uma instância de banco de dados do MariaDB e publica 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 mariadb

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 mariadb

Você pode publicar logs MariaDB com a API da RDS. É possível chamar a operaçã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 MariaDB 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 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 MariaDB 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.

Gerenciar logs do MariaDB 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 a performance.

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 espaço de armazenamento alocado. O Amazon RDS não permite truncar tabelas de log, mas é possível mover o conteúdo delas. 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 MariaDB no Amazon RDS oferece suporte a formatos do registro de logs binários baseados em linha, baseados em instrução e mistos. O formato de registro em log binário padrão é combinado. Para obter detalhes sobre os diferentes formatos de logs binários do MariaDB, consulte o tópico sobre Formatos de logs binários na documentação do MariaDB.

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 Instruções não seguras para replicação baseada na instrução na documentação do MariaDB.

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

  1. Faça login no AWS Management Console e 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 um novo grupo de parâmetros e o associe à instância de banco de dados.

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

  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. Escolha Save changes (Salvar alterações) para salvar as atualizações no parameter group de banco de dados.

Acessar logs binários do MariaDB

Você pode usar o utilitário mysqlbinlog para baixar logs binários no formato de texto das instâncias de bancos de dados MariaDB. O log binário é baixado para o computador local. Para obter mais informações sobre como usar o utilitário mysqlbinlog, acesse o tópico sobre como usar mysqlbinlog na documentação do MariaDB.

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 MariaDB ao qual foi concedida a permissão de escravo de replicação.

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

  • --result-file: especifique o arquivo local que recebe a saída.

  • 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 obter mais informações sobre as opções de mysqlbinlog, acesse Opções de mysqlbinlog na documentação do MariaDB.

Veja um exemplo a seguir:

Para Linux, macOS ou Unix:

mysqlbinlog \ --read-from-remote-server \ --host=mariadbinstance1.1234abcd.region.rds.amazonaws.com \ --port=3306 \ --user ReplUser \ --password <password> \ --result-file=/tmp/binlog.txt

Para Windows:

mysqlbinlog ^ --read-from-remote-server ^ --host=mariadbinstance1.1234abcd.region.rds.amazonaws.com ^ --port=3306 ^ --user ReplUser ^ --password <password> ^ --result-file=/tmp/binlog.txt

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ê baixe os 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.

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;

Anotação de logs binários

Em uma instância de banco de dados MariaDB, você pode usar o evento Annotate_rows para anotar um evento de linha com uma cópia da consulta SQL que causou esse evento de linha. Essa abordagem fornece funcionalidade semelhante para habilitar o parâmetro binlog_rows_query_log_events em uma instância de banco de dados no MySQL versão 5.6 ou posterior.

Você pode habilitar anotações de logs binários globalmente criando um parameter group personalizado e definindo o parâmetro binlog_annotate_row_events como 1. Você também pode habilitar anotações em nível de sessão, chamando SET SESSION binlog_annotate_row_events = 1. Use a opção replicate_annotate_row_events para replicar anotações de logs binários para a instância de réplica se o registro em log binário estiver habilitado nela. Não são necessários privilégios especiais para usar essas configurações.

A seguir está um exemplo de uma transação com base em linha no MariaDB. O uso do registro em log baseado em fila é acionado definindo o nível de isolamento da transação como confirmado na leitura.

CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN INSERT INTO square(x, y) VALUES(5, 5 * 5); COMMIT;

Sem anotações, as entradas de logs binários para a transação são as seguintes:

BEGIN /*!*/; # at 1163 # at 1209 #150922 7:55:57 server id 1855786460 end_log_pos 1209 Table_map: `test`.`square` mapped to number 76 #150922 7:55:57 server id 1855786460 end_log_pos 1247 Write_rows: table id 76 flags: STMT_END_F ### INSERT INTO `test`.`square` ### SET ### @1=5 ### @2=25 # at 1247 #150922 7:56:01 server id 1855786460 end_log_pos 1274 Xid = 62 COMMIT/*!*/;

A seguinte instrução permite anotações em nível de sessão para essa mesma transação e as desabilita em seguida confirmando a transação:

CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION binlog_annotate_row_events = 1; BEGIN; INSERT INTO square(x, y) VALUES(5, 5 * 5); COMMIT; SET SESSION binlog_annotate_row_events = 0;

Com anotações, as entradas de logs binários para a transação são as seguintes:

BEGIN /*!*/; # at 423 # at 483 # at 529 #150922 8:04:24 server id 1855786460 end_log_pos 483 Annotate_rows: #Q> INSERT INTO square(x, y) VALUES(5, 5 * 5) #150922 8:04:24 server id 1855786460 end_log_pos 529 Table_map: `test`.`square` mapped to number 76 #150922 8:04:24 server id 1855786460 end_log_pos 567 Write_rows: table id 76 flags: STMT_END_F ### INSERT INTO `test`.`square` ### SET ### @1=5 ### @2=25 # at 567 #150922 8:04:26 server id 1855786460 end_log_pos 594 Xid = 88 COMMIT/*!*/;