Ist es sicher, mysql-bin-Dateien zu löschen?

92

Ich habe MM - Replikation in mysql, und ich möchte einige freie Raum in der Box drücken unnötige Dateien zu löschen sein, stieß ich auf diese mysql-binDateien innerhalb /var/db/mysql/Es gibt Hunderte dieser Dateien sind wie mysql-bin.000123, mysql-bin.000223usw. Ich habe die MySQL - Replikation , indem Sie überprüft show master statusund show slave statussie sind Verwenden einiger Mysql-Bin-Dateien an bestimmten Positionen, aber ich denke, alle anderen Bin-Dateien sind Reste, die nicht mehr verwendet werden. Ist es in diesem Fall sicher, alle diese mysql-bin-Dateien zu löschen, mit Ausnahme der Dateien, auf die die Replikation aktuell zeigt?

Wenn das Löschen sicher ist, kann ich dann irgendetwas tun, um diese Dateien automatisch zu löschen, sobald sie nicht mehr verwendet werden?


quelle

Antworten:

136

Bitte löschen Sie diese nicht einfach im Betriebssystem.

Sie müssen mysqld das für Sie tun lassen. So schafft es mysqld:

Die Datei enthält mysql-bin.[index]eine Liste aller von mysqld generierten und automatisch gedrehten Binärprotokolle. Die Mechanismen zum Löschen der Binlogs in Verbindung mit mysql-bin.[index]sind:

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

Dadurch werden alle Binärprotokolle vor dem soeben angegebenen Binärprotokoll oder Zeitstempel gelöscht.

Zum Beispiel, wenn Sie laufen

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

Dadurch werden alle Binärprotokolle zuvor gelöscht mysql-bin.000223.

Wenn du läufst

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

Dadurch werden alle Binärprotokolle vor Mitternacht vor 3 Tagen gelöscht.

Wenn Sie möchten, dass binlog automatisch entfernt wird und 3 Tage erhalten bleibt, stellen Sie einfach Folgendes ein:

mysql> SET GLOBAL expire_logs_days = 3;

dann füge dies hinzu zu /etc/my.cnf

[mysqld]
expire_logs_days=3

und mysqld löscht sie protokolle für sie

SHOW SLAVE STATUS \ G

Das ist kritisch. Wenn Sie ausführen SHOW SLAVE STATUS\G, sehen Sie zwei Binärprotokolle vom Master:

  • Master_Log_File
  • Relay_Master_Log_File

Wenn die Replikation keine oder nur geringe Verzögerungen aufweist, haben diese normalerweise denselben Wert. Wenn eine große Replikationsverzögerung vorliegt, unterscheiden sich diese Werte. Um es einfach zu machen, wähle, was auch immer Relay_Master_Log_Fileist, und gehe zurück zum Meister und renne

PURGE BINARY LOGS TO 'Whatever Relay_Master_Log_File Is';

Auf diese Weise wird die Replikation nicht unterbrochen.

RolandoMySQLDBA
quelle
1
Bitte beachten Sie Tippfehler - und keine Bindestriche: [mysqld] expire_logs_days=3(und Sie müssen den [mysqld]Abschnitt
changokun 12.08.14
@ Changokun Das ist kein Tippfehler. my.cnf akzeptiert Bindestriche. Das Ausführen SET GLOBAL expire_logs_days = 3;vom MySQL-Client akzeptiert sie nicht. Beispiel in den MySQL- Dokumenten
RolandoMySQLDBA
Das funktioniert bei mir. Frage, was ist der Unterschied zwischen ... mysql> SET GLOBAL expire_logs_days = 3;und expire-logs-days=3in /etc/my.cnf.. Sind sie gleich? Ist das überflüssig oder nicht? Oder ist es wichtig, ausgeführt und SET GLOBAL...dann hinzugefügt zu werden expire-logs-days=..? Vielen Dank.
Nino Paolo
Entfernen Sie schnell alle Protokolle, offensichtlich: PURGE BINARY LOGS BEFORE DATE(NOW());Warum gibt es dafür keine vernünftigen Standardeinstellungen? Ich habe nirgendwo explizit die Größe der Protokolldatei auf einen gigantischen Betrag geändert. Ich hatte 10,0 GB Protokolldateien, nachdem ich diesen Befehl ausgeführt hatte, schrumpfte meine mysql.bin-Ordnergröße auf 1,6 GB.
Michael Trouw
20

Dies hängt wirklich von Ihrer Sicherungsstrategie ab. Einer der Hauptgründe für die Beibehaltung der Binärprotokolle ist die Wiederherstellung der Datenbank auf einen bestimmten Zeitpunkt. Wenn Ihre Datenbank abstürzt und eine Wiederherstellung erforderlich ist, stellen Sie die letzte vollständige Sicherung wieder her und geben die Binärprotokolle ab der Position der vollständigen Sicherung wieder.

Wenn Sie also jeden Tag eine vollständige Sicherung durchführen und über Binärprotokolle für 7 Tage verfügen, können Sie wahrscheinlich die Binärprotokolle für die letzten 4 bis 6 Tage löschen. Mit dieser expire_logs_daysEinstellung können Sie steuern, wie viele Tage Binärprotokolle gespeichert werden .

Sie können die nicht benötigten Binärprotokolle löschen, indem Sie zuerst das älteste Protokoll anzeigen, das Sie speichern möchten:

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

und dann in MySQL:

mysql> PURGE BINARY LOGS TO 'mysql-bin.XXXXX';
Derek Downey
quelle
5

Versuche dies:

RESET MASTER;

wie das Dokument sagte:

Mit RESET MASTER können Sie alle Binärprotokolldateien und die zugehörige Binärprotokollindexdatei löschen und den Master in seinen Zustand zurückversetzen, bevor die Binärprotokollierung gestartet wurde.

Dadurch werden alle zugehörigen binären Protokolldateien gelöscht, die möglicherweise nicht Ihren Wünschen entsprechen.

Morris
quelle