Wie lässt sich das Problem der zunehmenden Größe von MySQL-Binlog-Dateien lösen?

Wie lässt sich das Problem der zunehmenden Größe von MySQL-Binlog-Dateien lösen?

Die Anzahl der MySQL-Binlog-Dateien steigt täglich und ihre Größe nimmt in Gigabyte zu. Wie kann ich die zunehmende Größe der Binlog-Dateien stoppen? Sie füllen den Speicherplatz.

Antwort1

Bei MySQL8 ist die binäre Protokollierung standardmäßig aktiviert und die Standardbereinigung (Ablauf/Löschung) binärer Protokolle ist auf 30 Tage eingestellt.

Sobald Sie in Ihrem SSH und in MySQL sind, können Sie die folgenden Befehle verwenden

So zeigen Sie Binärprotokolle an

mysql> SHOW BINARY LOGS;

Um Binärprotokolle manuell zu löschen, bis zu einem bestimmten Punkt

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

Ändern Sie das automatische Standardablaufdatum für die Bereinigung von 30 Tagen (Standard) auf 3 Tage.

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)

Der obige Wert ist in Sekunden, d. h. 3 Tage in Sekunden = (60 Sekunden x 60 Minuten x 24 Stunden x 3 Tage) = 259200

Antwort2

Wenn Sie diese Binärprotokolle nicht aufbewahren müssen, können Sie sie in MySQL wie folgt „trimmen“:

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

Natürlich können Sie das Datum jederzeit ändern. Wenn Sie auf eine bestimmte Binärprotokolldatei trimmen möchten, können Sie dies folgendermaßen tun:

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

Geben Sie unbedingt die tatsächliche Datei an, in die Sie zuschneiden möchten.

WICHTIG:Löschen Sie die Dateien nicht einfach aus dem Dateisystem. MySQL wird sich irgendwann in der Zukunft schrecklich beschweren. Sparen Sie sich die unnötige Ausfallzeit, indem Sie PURGE BINARY LOGS Befehl aus MySQL heraus.

Antwort3

Binlogs werden für die Replikation und bestimmte Formen der Datensicherung benötigt. Es klingt, als würden Sie beides nicht tun.

Zum Ändern der Einstellungen füge ich gerne eine neue Datei hinzu, beispielsweise (wobei „rj“ meine Initialen sind):

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

und setzen Sie Overrides, wie unten. darin. Nachdem Sie Änderungen vorgenommen haben,

sudo systemctl restart mysql

log_binsteuert die Erstellung von Binärprotokollen.

Um sie gelöscht zu halten, fügen Sie binlog_expire_logs_seconds = 86400(oder eine andere Zahl) hinzu.

Eine weitere Einstellung steuert die maximale Größe jeder Binärprotokolldatei. Dies hat keine Auswirkungen auf den insgesamt verwendeten Speicherplatz, außer dass die letzte Datei erhalten bleibt, bis sie „abläuft“. Nach jedem Neustart (oder Neustart von MySQL) wird ein neues Binärprotokoll gestartet, sodass Sie möglicherweise viele kleine Dateien sehen.

meine Datei rj.cnf könnte also einiges davon enthalten:

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

Antwort4

Sie können das Skript verwenden, das auf https://github.com/Thibs/monitor_mysql_binary_logging/blob/main/monitor_mysql_binary_logging.sh

um die Größe/Anzahl Ihrer binären Logdateien zu verwalten

verwandte Informationen