Quando o servidor MySQL é iniciado, ele verifica se há operações em sua linha de comando para ver se deve realizar um login e abre o arquivo de log apropriado (se for o caso). Você pode fazer com que o servidor gere dois tipos principais de arquivos de log: Arquivos de log regulares. Ele relata conexões de clientes, consultas e vários outros eventos. Quando o servidor MySQL é iniciado, ele verifica se há operações em sua linha de comando para ver se deve realizar um login e abre o arquivo de log apropriado (se for o caso). Você pode fazer com que o servidor gere dois tipos principais de arquivos de log: Arquivos de log regulares. Ele relata conexões de clientes, consultas e vários outros eventos. É útil para rastrear a atividade do servidor: quem está se conectando, de onde e o que está fazendo.
Registro de alterações
Ele relata consultas que modificam o banco de dados. O termo "atualização" neste contexto refere-se não apenas às instruções UPDATE, mas a todas as instruções que modificam o banco de dados. Por esse motivo, contém registros de consulta para DELETE, INSERT, REPLACE, CREATE TABLE, DROP TABLE, GRANT e REVOKE. O conteúdo do log de atualização é escrito na forma de instruções SQL, que são usadas como entrada para o mysql. Os logs de atualização e os backups são úteis se a tabela precisar ser restaurada após uma falha. Você pode restaurar o banco de dados a partir de um arquivo de backup e executar novamente quaisquer consultas que modificaram o banco de dados após esse arquivo de backup usando o log de atualização como entrada para o mysql. Isso restaura a tabela ao seu estado no momento da falha.
Para tornar os logs efetivos, use a opção --log para habilitar o log regular e a opção --log-update para habilitar o log de atualização. Estas opções podem ser especificadas na linha de comando em mysqld.safe_mysqld ou mysql.server, ou no grupo [mysqld] de uma opção. Quando o log está ativado, os arquivos de log são gravados no diretório de dados do servidor por padrão.
O autor recomenda que ambos os tipos de log sejam válidos ao usar o MySQL pela primeira vez. Depois de ganhar alguma experiência com MySQL, você pode ficar tentado a usar apenas o log de atualização para reduzir os requisitos de espaço em disco.
Depois de ativar o log, certifique-se de não encher o disco com uma grande quantidade de informações de log, especialmente se o servidor estiver lidando com um grande número de consultas. A rotação e os tempos de expiração dos arquivos de log podem ser usados para evitar que os arquivos de log cresçam ilimitadamente, mantendo os logs mais recentes disponíveis online.
A rotação do arquivo de log funciona da seguinte maneira. Suponha que o arquivo de log seja denominado log. No primeiro loop, log é renomeado como log 0 e o servidor começa a escrever um novo arquivo de log. No segundo loop, log.0 é renomeado para log.1, log é renomeado para log.0 e o servidor começa a gravar outro novo arquivo de log. Dessa forma, cada arquivo percorre os nomes log 0, log 1 e assim por diante. Quando o arquivo atinge um determinado ponto do loop, ele pode ser encerrado.
Atualizar logs e instruções LOAD DATA
Normalmente, quando o servidor executa uma instrução LOAD DATE, ele grava apenas a instrução em si, e não o conteúdo da linha carregada, no log de atualização. Isso significa que as operações de recuperação usando o log de atualização estarão incompletas, a menos que os arquivos de dados permaneçam acessíveis. Para garantir que isso seja seguro, os arquivos de dados não devem ser excluídos, a menos que tenha sido feito backup do banco de dados.
Backup do sistema
Os logs de atualização nem sempre são bons para a recuperação do banco de dados e, se uma falha no disco fizer com que você perca os logs de atualização, certifique-se de realizar backups regulares do sistema de arquivos. Também é uma boa ideia gravar o log de atualização em um disco diferente daquele onde o banco de dados está armazenado.
Por exemplo, se você alternar os logs todos os dias e quiser mantê-los por uma semana, você manterá log.0 até log.6. No próximo loop, log.6 será encerrado permitindo que log.5 substitua log.6 para se tornar o novo log.6. Dessa forma, você pode manter muitos logs sem exceder o limite do disco.
A frequência de rotação de logs e o número de logs antigos mantidos dependerão de quão ocupado o servidor está (servidores ativos produzem mais mensagens de log) e de quanto espaço em disco você deseja dedicar aos logs antigos. Ao girar logs regulares, você pode usar o comando mysqla d - min flush-logs para informar ao servidor para fechar o arquivo de log atual e abrir um novo arquivo de log.
Um script para executar uma rotação regular de log seria mais ou menos assim (isso pode ser modificado para refletir o nome da base de log e a localização do seu diretório de dados, e talvez o número de logs antigos que você deseja reter):
É melhor executar este script a partir da conta mysqladm para garantir que os arquivos de log pertencem a esse usuário. Se você deixar os parâmetros de conexão no arquivo de opções .my.cnf, não será necessário especificar nenhum parâmetro no comando mysqladmin do script. Se você não fizer isso, poderá criar um usuário restrito que não fará nada além de emitir comandos de atualização. A senha desse usuário pode então ser colocada no script com risco mínimo. Se você quiser fazer isso, o usuário deverá ter apenas permissões RELOAD. Por exemplo, para invocar o usuário flush e atribuir uma senha, fl us h pass, use a seguinte instrução GRANT:
GRANT RELOAD ON *.* TO flush@localhost IDENTIFIEDBY "flushpass"
Quando precisar executar uma operação de atualização em um script, você pode fazer o seguinte:
mysqladmin -ufush -pflushpass flush -logs
No Linux, é melhor usar logrotate para instalar o script mysql-log-rotate no pacote de distribuição do MySQL em vez de escrever o script você mesmo. Se mysql-log-rotate não for instalado automaticamente através de um arquivo RPM, você deve verificar o diretório support-files do pacote de distribuição do MySQL.
Devido às diferenças na forma como os servidores lidam com os arquivos de log de atualização, a rotação dos arquivos de log difere ligeiramente entre os logs de atualização e os logs regulares. Se você instruir o servidor a usar um nome de arquivo de log de atualização sem extensão (como data de atualização), o servidor criará automaticamente nomes de arquivo de log de atualização usando a sequência up date, update.002, etc. Um novo log de atualização é gerado quando o servidor é iniciado e quando o log é atualizado. Se você ativar o log de atualização sem especificar um nome de arquivo, o servidor gerará uma sequência de arquivos de log de atualização usando o nome do host como nome base.
Ao encerrar uma sequência de arquivos gerada dessa maneira, você pode querer encerrá-los com base na idade (a hora em que foram modificados pela última vez) e não pelo nome. A razão para isso é que, como você não sabe quando o comando flush-log será emitido, não pode esperar criar um número fixo de logs de atualização em qualquer período de tempo. Por exemplo, se você fizer backup de uma tabela com mysqldump e usar a opção --flush-logs, um novo arquivo nessa sequência de nomes de log de atualização será criado com cada backup.
Para logs de atualização com nomes de arquivos sequenciais gerados automaticamente pelo servidor, o script de encerramento baseado na idade do log é semelhante a este:
O comando find localiza e exclui arquivos de log de atualização modificados há mais de uma semana. É importante usar o parâmetro -name para testar uma extensão de arquivo numérica para evitar a exclusão de tabelas especificadas pela atualização errada.
Você também pode instruir o servidor a usar um nome de arquivo de log de atualização fixo (se desejar), o que é útil se você deseja alternar o log de atualização da mesma forma que um log normal. Para usar um nome de log de atualização fixo, especifique um nome que inclua uma extensão. Por exemplo, você pode iniciar o servidor com a opção --log-update=update.log para usar o nome up date .log. O servidor sempre desligará e abrirá o log ao receber o comando flush-logs, mas o servidor não gerará novos arquivos todas as vezes. Nesse caso, o script de rotação de log para o log de atualização e o script para o log regular diferem apenas no nome base do arquivo da rotação.
Se você deseja automatizar a rotação e encerramento de log, use cron. Supõe-se que os scripts para rotação de logs regulares e logs de atualização sejam rotar-logs e rotacionar - data de atualização - logs e sejam instalados no diretório /usr/user/mysql/bin. Registre-se como usuário mysqlladm e use o seguinte comando para editar o arquivo crontab do usuário mysqladm: % crontab -e
Este comando permite editar o backup do arquivo crontab atual (pode estar vazio se não tiver sido feito anteriormente). Adicione linhas ao arquivo da seguinte maneira:
Esta entrada diz ao cron para executar este script todas as manhãs às 4h. Você pode alterar o horário ou agendá-lo conforme necessário. Consulte a página de manual do crontab para obter instruções.
-