Eu tenho MM Replication no mysql, e quero espremer algum espaço livre na caixa estar excluindo arquivos desnecessários, me deparei com esses mysql-bin
arquivos dentro /var/db/mysql/
Existem centenas desses arquivos como mysql-bin.000123
, mysql-bin.000223
etc. Eu verifiquei a replicação do mysql fazendo show master status
e show slave status
eles estão usando alguns arquivos mysql-bin em certas posições, mas acho que todos os outros arquivos bin são sobras que não serão mais usadas. Nesse caso, é seguro excluir todos os arquivos mysql-bin, exceto aqueles para os quais a replicação está apontando atualmente?
Se for seguro excluir, há algo que eu possa fazer para excluir automaticamente esses arquivos quando não estiverem em uso?
Por favor, não basta excluí-los no sistema operacional.
Você precisa deixar o mysqld fazer isso por você. Aqui está como o mysqld gerencia isso:
O arquivo
mysql-bin.[index]
mantém uma lista de todos os logs binários que o mysqld gerou e girou automaticamente. Os mecanismos para limpar os binlogs em conjunto commysql-bin.[index]
são:Isso limpará todos os logs binários antes do log binário ou carimbo de data/hora que você acabou de especificar.
Por exemplo, se você executar
isso apagará todos os logs binários antes
mysql-bin.000223
de .Se você correr
isso apagará todos os logs binários antes da meia-noite 3 dias atrás.
Se você quiser que o binlog seja girado automaticamente e mantenha 3 dias, basta definir isso:
então adicione isso a
/etc/my.cnf
e o mysqld excluirá os logs para você
MOSTRAR STATUS DO ESCRAVO\G
Isso é crítico. Ao executar
SHOW SLAVE STATUS\G
, você verá dois logs binários do Master:Master_Log_File
Relay_Master_Log_File
Quando a replicação tem pouco ou nenhum atraso, eles geralmente têm o mesmo valor. Quando há muito atraso de replicação, esses valores são diferentes. Só para simplificar, escolha o que
Relay_Master_Log_File
for, e volte para o Master e corraDessa forma, a replicação não é interrompida.
Isso realmente depende da sua estratégia de backup. Uma das principais razões para manter os logs binários é restaurar seu banco de dados para um 'point-in-time'. Se o banco de dados travar e precisar de restauração, você restaurará o backup completo mais recente e, em seguida, reproduzirá os logs binários começando com a posição do backup completo.
Portanto, se você fizer um backup completo todos os dias e tiver 7 dias de logs binários, é provável que você possa excluir os últimos 4-6 dias de logs binários. Você pode controlar quantos dias de logs binários são mantidos com a
expire_logs_days
configuração.Você pode excluir os logs binários desnecessários vendo primeiro qual é o log mais antigo que deseja manter:
e depois no mysql:
Tente isto:
como dizia o documento :
Isso excluirá todos os arquivos de log binários relacionados, que podem não ser o que você deseja.
Sim, é seguro. Para o mysql 8, veja como você pode fazer isso.
Podemos definir
binlog_expire_logs_seconds
como opção ou como variável de sistema ou como parâmetro de linha de comando também, mas vou mostrar como usar como opção de configuração.Usando como opções, você tem que editar os arquivos de configuração. Você pode procurar arquivos do Windows e Linux aqui . Para linux, fui ao
/etc/mysql/my.cnf
arquivo:Vamos ver o que tem dentro
/etc/mysql/mysql.conf.d/
:Por exemplo, para manter apenas 3 dias de logs, você deve calcular o total de segundos (24 60 60*3). Agora, tudo o que temos para adicionar
binlog_expire_logs_seconds
opção a umamysqld
seção. Minha solução foi criar um arquivo com este conteúdo:Como o arquivo estava dentro de um diretório incluído por
/etc/mysql/my.cnf
ele será carregado com o serviço.E então, reinicie o serviço:
Ele apagará o log para você e continuará excluindo-os.
NOTA: Para referência,
expire_logs_days
foi preterido.