O MySQL por padrão possui uma forma de recuperar os arquivos caso tenha acontecido um desligamento inesperado, ele faz isso utilizando a estrutura dos arquivos binlog, que são criados na inicialização do MySQL de forma sequencial da seguinte forma binlog.0000N e escritos no binlog.index para que o sistema verifique qual arquivo é o atual.
Este arquivos são conhecidos como logs binários ou binlog, que são arquivos que guardam de forma sequencial e cronológica todas as operações que modificam dados e estruturas das tabelas do MySQL. Esta função já vem habilitada por padrão no MySQL.
Cada operação de escrita no banco é escrita também no arquivo do log binário gerando uma concorrência de I/O com os dados do banco.
Estes logs binários são rotacionados quando chegam ao tamanho especificado na variável max_binlog_size, que por padrão é 1GB. Durante a rotação, o MySQL acrescenta mais 1 ao contador do prefixo gerando um novo arquivo, por exemplo, binlog.000002.
Como estes arquivos são gerados automaticamente pelo banco de dados a cada operação de escrita, acaba ocupando um grande espaço em disco, as vezes lotando o disco e prejudicando o funcionamento do MySQL.
Muitos administradores quando tem este problema de superlotação do disco acabam executando o comando abaixo e apagando todos os arquivos binlog.00*
# rm -f /var/log/mysql/binlog.00*
O problema é quando reiniciam o MySQL e aparece a seguinte mensagem:
[Note] [Entrypoint]: Entrypoint script for MySQL Server 8.1.0-1.el8 started.
'/var/lib/mysql/mysql.sock' -> '/var/run/mysqld/mysqld.sock'
[System] [MY-015015] [Server] MySQL Server - start.
[Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
[System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.1.0) starting as process 1
[System] [MY-013576] [InnoDB] InnoDB initialization has started.
[System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysqld: File './binlog.000041' not found (OS errno 2 - No such file or directory)
Isso acontece porque na inicialização o MySQL verifica o arquivo binlog.index para verificar qual o último arquivo existem do binlog.0000N e como não encontra ocorre este erro na inicialização.
Para solucionar o problema abra o arquivo binlog.index e apague todos as linhas existentes ou execute o comando abaixo.
#cat > /var/log/mysql/binlog.index
Reinicie o banco de dados, desta forma o MySQL irá reiniciar sem problemas.
#/etc/init.d/mysqld restart
O MySQL não expurga os logs binários automaticamente, isso deve ser feito através das variáveis expire_logs_days e binlog_expire_logs_seconds no arquivo my.cnf.
Compartilhe sempre conhecimento, neste processo todos ganham!
Deixar um comentário