
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_bin
steuert 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