Howto: MySQL Binlog sauber ausschalten und löschen

Da hat man MySQL nun schön auf den neuesten Stand gebracht und schon nach wenigen Tagen fliegt einem der Server um die Ohren: Festplatte randvoll! Kam früher nie vor, heute ist klar: bei MySQL vergessen, das Binary Logging auszuschalten. Was tut das überhaupt? Braucht man das? Geht das wieder weg?

09. Apr 2012 10:58

MySQL speichert schon seit der Version 3 sämtliche Anfragen an eine Datenbank in diesen Logdateien. Mit Hilfe des letzten kompletten Backups einer DB und diesen Logfiles ab exakt dem Start der DB nach dem Backup (und freilich einer Menge Zeit und Lust zum "sich mit MySQL beschäftigen") ist es möglich, sämtliche Transaktion automatisiert zu wiederholen und so eine DB bis zu einem bestimmten Zeitpunkt vollständig wieder herzustellen.

# binary logging einschalten
# Kommentarmarker (#) bei nachfolgenden Zeilen
# in /etc/my.cnf entfernen:
log-bin=mysql-bin
binlog_format=mixed


Danach den MySQL-Server neu starten und das Binary Logging ist eingeschaltet. Nachteil: ab diesem Moment sollte man seinen Festplattenplatz jede Minute im Auge behalten, denn dieser schmilzt hinweg wie Schnee in der Sonne.

Im Gegensatz zur bisherigen Strategie, bei der bin-logs nach der Neuinstallation zunächst deaktiviert waren (und Server ohne weitere Aufsicht mit ein paar GB Plattenplatz jahrelang problemlos vor sich hin liefen), sind bin-logs ab Version 5.0 nach der Neuinstallation aktiv und es dauert nur ein paar Wochen, bis einem der Server auch ohne große Belastung um die Ohren fliegt (Festplatte randvoll).

Dabei spielt die Größe der DB gar keine Rolle. Ein paar Daten in der DB genügen, um dennoch innerhalb von ein paar Wochen 20-30GB an Logfiles anfallen zu lassen.

Eine seltsame Strategie, die Oracle da mit MySQL verfolgt.

Immerhin kann man diesen Spuk aber abstellen. Dazu meldet man sich mit einem MySQL-Client an der DB an und führt einen MySQL-Befehl aus, mit dessen Hilfe die Logs sauber gelöscht werden (z.B. unter Linux in einer Shell):

mysql -uroot -p
mysql> RESET MASTER;
Query OK, 0 rows affected (17.50 sec)
mysql> quit;
Bye


Unmittelbar danach muss das Logging in der Konfiguration deaktiviert werden.

# binary logging ausschalten
# Kommentarmarker (#) bei nachfolgenden Zeilen
# in /etc/my.cnf einfügen:
#log-bin=mysql-bin
#binlog_format=mixed


Danach den MySQL-Server neu starten und das Binary Logging ist ausgeschaltet.
Um das zu kontrollieren kann man in einem MySQL-Client einen SQL-Befehl verwenden, der den Status anzeigt (z.B. unter Linux in einer Shell):

mysql -uroot -p
mysql> SHOW MASTER STATUS;
Empty set (0.00 sec)
mysql> quit;
Bye


Ist der Master aktiv, wird an dieser Stelle das aktuell verwendete bin-log-file angezeigt.

Damit keine Mißverständnisse aufkommen: Binary Logging ist ein probates Mittel, wenn man einen wichtigen Grund hat, es zu benutzen (beispielsweise bei einer Replikation zwischen mehreren MySQL-Servern oder bei kritischen Anwendungen wie etwa Applikationen für Banken etc.). In den meisten Fällen, in denen MySQL zum Einsatz kommt, wird jedoch ein regelmäßiger unkomplizierter mysqldump zur Sicherung der Datenbank genügen, so wie das bis Version 5.0 praktisch Gewohnheit war.

 
π