Como resolver o problema do tamanho crescente dos arquivos binlog do MySQL?

Como resolver o problema do tamanho crescente dos arquivos binlog do MySQL?

A contagem de arquivos Binlog do MySQL está aumentando dia a dia e seu tamanho está aumentando em gigabytes. Como posso impedir o aumento do tamanho dos arquivos binlog? Eles estão preenchendo o espaço do disco.

Responder1

Com o MySQL8, eles ativaram o log binário por padrão e a eliminação padrão (expiração/exclusão) dos logs binários é definida como 30 dias.

Quando estiver em seu SSH e no mysql, você pode usar os comandos abaixo

Para mostrar logs binários

mysql> SHOW BINARY LOGS;

Para limpar logs binários manualmente até algum ponto

mysql> PURGE BINARY LOGS TO 'binlog.000142';

Alterar a expiração da eliminação automática padrão de 30 dias (padrão) para 3 dias

mysql> SET GLOBAL binlog_expire_logs_seconds = 259200;
Query OK, 0 rows affected (0.00 sec)

mysql> SET PERSIST binlog_expire_logs_seconds = 259200;
Query OK, 0 rows affected (0.01 sec)

O valor acima está em segundos, ou seja, 3 dias em segundos = (60 segundos x 60 minutos x 24 horas x 3 dias) = ​​259200

Responder2

Se você não precisa manter esses logs binários, você pode “cortá-los” no MySQL assim:

mysql> PURGE BINARY LOGS BEFORE '2021-01-01 00:00:00';

Claro, você pode alterar a data para quando quiser. Se quiser cortar para um arquivo de log binário específico, você pode fazer assim:

mysql> PURGE BINARY LOGS TO 'mysql-bin.12345';

Certifique-se de especificar o arquivo real para o qual você está cortando.

IMPORTANTE:Não exclua simplesmente os arquivos do sistema de arquivos. O MySQL irá reclamar em algum momento no futuro de uma forma terrível. Evite o tempo de inatividade desnecessário usando PURGE BINARY LOGS comando de dentro do MySQL.

Responder3

Binlogs são necessários para replicação e certas formas de backup. Parece que você também não está fazendo isso.

Para alterar as configurações, gosto de adicionar um novo arquivo, como (onde "rj" são minhas iniciais):

/etc/mysql/mysql.conf.d/rj.cnf

e colocar substituições, como abaixo. iniciar. Depois de fazer alterações,

sudo systemctl restart mysql

log_bincontrola a criação de binlogs.

Para mantê-los eliminados, adicione binlog_expire_logs_seconds = 86400(ou algum outro número).

Outra configuração controla o tamanho máximo de cada arquivo binlog; isso não afetará o espaço total em disco usado, exceto que o último arquivo permanecerá até "expirar". Um novo binlog é iniciado após qualquer reinicialização (ou reinicialização do mysql), então você poderá ver muitos arquivos pequenos.

então, meu arquivo rj.cnf pode ter alguns destes:

# Added by Rick James
[mysqld]
log_bin =                           # turn off
binlog_expire_logs_seconds = 86400  # 1 day
max_binlog_size = 104857600         # 100M

Responder4

Você poderia usar o script disponível em https://github.com/Thibs/monitor_mysql_binary_logging/blob/main/monitor_mysql_binary_logging.sh

para gerenciar o tamanho/número de seus arquivos de log binários

informação relacionada