È sicuro eliminare i file mysql-bin?


93

Ho MM Replication in mysql e voglio spremere un po 'di spazio libero nella casella eliminando i file non necessari, ho trovato questi mysql-binfile all'interno /var/db/mysql/Ci sono centinaia di quei file come mysql-bin.000123, mysql-bin.000223ecc. Ho controllato la replica di mysql facendo show master statuse show slave statussono usando alcuni file mysql-bin in determinate posizioni, ma immagino che tutti gli altri file bin siano gli avanzi che non verranno più utilizzati. In questo caso è sicuro eliminare tutti quei file mysql-bin tranne quelli a cui punta attualmente la replica?

Se è sicuro eliminare, allora c'è qualcosa che potrei fare per eliminare automaticamente quei file quando non sono in uso?

Risposte:


137

Ti preghiamo di non eliminarli nel sistema operativo.

Devi lasciare che mysqld lo faccia per te. Ecco come lo gestisce mysqld:

Il file mysql-bin.[index]mantiene un elenco di tutti i registri binari che mysqld ha generato e ruotato automaticamente. I meccanismi per ripulire i binlog in combinazione con mysql-bin.[index]sono:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

Questi cancelleranno tutti i registri binari prima del binlog o del timestamp appena specificato.

Ad esempio, se corri

PURGE BINARY LOGS TO 'mysql-bin.000223';

questo cancellerà prima tutti i registri binari mysql-bin.000223.

Se corri

PURGE BINARY LOGS BEFORE DATE(NOW() - INTERVAL 3 DAY) + INTERVAL 0 SECOND;

questo cancellerà tutti i registri binari prima di mezzanotte 3 giorni fa.

Se vuoi che il binlog venga ruotato automaticamente e mantenga 3 giorni, basta impostare questo:

mysql> SET GLOBAL expire_logs_days = 3;

quindi aggiungilo a /etc/my.cnf

[mysqld]
expire_logs_days=3

e mysqld li cancellerà per te

MOSTRA STATO SLAVE \ G

Questo è fondamentale. Quando esegui SHOW SLAVE STATUS\G, vedrai due registri binari dal Master:

  • Master_Log_File
  • Relay_Master_Log_File

Quando la replica presenta un ritardo minimo o nullo, di solito hanno lo stesso valore. Quando c'è molto ritardo di replica, questi valori sono diversi. Giusto per renderlo semplice, scegli quello che Relay_Master_Log_Fileè e torna dal Maestro ed esegui

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

In questo modo, la replica non viene interrotta.


1
Nota un errore di battitura - trattini [mysqld] expire_logs_days=3[mysqld]
bassi

@changokun Non è un refuso. my.cnf accetterà trattini. L'esecuzione SET GLOBAL expire_logs_days = 3;dal client mysql non li accetterà. Esempio nei documenti MySQL: dev.mysql.com/doc/refman/5.5/en/mysqld-option-tables.html
RolandoMySQLDBA

Questo funziona per me. Domanda, qual è la differenza tra ... mysql> SET GLOBAL expire_logs_days = 3;e expire-logs-days=3in /etc/my.cnf.. Sono uguali? È ridondante o no? Oppure, è importante eseguire SET GLOBAL...quindi aggiungere expire-logs-days=..? Grazie.
Nino Paolo,

Rimuovi rapidamente tutti i log, ovviamente: PURGE BINARY LOGS BEFORE DATE(NOW());perché non ci sono impostazioni predefinite corrette per questo? Da nessuna parte, mai esplicitamente cambiato la dimensione del file di registro in una quantità gigantesca. Avevo 10,0 GB di file di registro, dopo aver eseguito questo comando la dimensione della mia cartella mysql.bin si è ridotta a 1,6 GB.
Michael Trouw,

20

Questo dipende davvero dalla tua strategia di backup. Uno dei motivi principali per mantenere i registri binari è ripristinare il database in un "punto temporale". Se il database si arresta in modo anomalo e richiede il ripristino, è necessario ripristinare l'ultimo backup completo, quindi riprodurre i registri binari a partire dalla posizione del backup completo.

Pertanto, se si esegue un backup completo ogni giorno e si dispone di registri binari per 7 giorni, è probabile che sia possibile eliminare i registri binari degli ultimi 4-6 giorni. È possibile controllare per quanti giorni vengono conservati i registri binari con l' expire_logs_daysimpostazione.

È possibile eliminare i registri binari non necessari vedendo prima qual è il registro più vecchio che si desidera conservare:

ls -lh /path/to/binary/logs/mysql-bin.0*

e poi in mysql:

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

5

Prova questo:

RESET MASTER;

come diceva il documento :

RESET MASTER consente di eliminare qualsiasi file di registro binario e il relativo file di indice del registro binario, riportando il master al suo stato prima dell'avvio della registrazione binaria.

Ciò eliminerà tutti i file di registro binari correlati, che potrebbero non essere quelli desiderati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.