MySQL Binary-Log - Erklärung, Deaktivieren und Löschen
Moderne Webseiten können nicht mehr alleine mit statischem HTML verwaltet werden. Aktuelle Redaktionssysteme wie Typo3, Drupal & Co. bieten alle wichtigen Möglichkeiten, um auf einfache Weise eine dynamische Webseite zu bedienen. In der Regel setzen die hier erwähnten Redaktionssysteme auf PHP und einer MySQL-Datenbank auf, so dass das frei verfügbare MySQL sehr stark verbreitet ist.
Wer auf seinem lokalen PC oder einem produktiven Server-System bereits Erfahrung mit MySQL gemacht und die Installation mit der Standard-Konfiguration durchgeführt hat, der wird sich irgendwann einmal gewundert haben, warum der freie Festplattenspeicher stets weniger wird, obwohl an sich keine neue Daten hinzugekommen sind.
In diesem Fall sollte man einen Blick in das MySQL-Verzeichnis werfen (unter Linux ist es standardmäßig /var/lib/mysql/). Eventuell findet man hier recht viele solcher mysqld-bin Dateien:
16K -rw-rw---- 1 mysql mysql 15K 14. Dez 2008 mysqld-bin.000001
617K -rw-rw---- 1 mysql mysql 614K 14. Dez 2008 mysqld-bin.000002
430M -rw-rw---- 1 mysql mysql 429M 14. Dez 2008 mysqld-bin.000003
172K -rw-rw---- 1 mysql mysql 171K 14. Dez 2008 mysqld-bin.000004
4,0K -rw-rw---- 1 mysql mysql 117 14. Dez 2008 mysqld-bin.000005
87M -rw-rw---- 1 mysql mysql 87M 14. Dez 2008 mysqld-bin.000006
258M -rw-rw---- 1 mysql mysql 257M 14. Dez 2008 mysqld-bin.000007
419M -rw-rw---- 1 mysql mysql 419M 14. Dez 2008 mysqld-bin.000008
4,0K -rw-rw---- 1 mysql mysql 117 19. Dez 2008 mysqld-bin.000009
416K -rw-rw---- 1 mysql mysql 416K 21. Dez 2008 mysqld-bin.000010
24K -rw-rw---- 1 mysql mysql 21K 6. Jan 2009 mysqld-bin.000011
264K -rw-rw---- 1 mysql mysql 263K 8. Jan 2009 mysqld-bin.000012
4,0K -rw-rw---- 1 mysql mysql 117 29. Jan 2009 mysqld-bin.000013
5,9M -rw-rw---- 1 mysql mysql 5,9M 23. Feb 2009 mysqld-bin.000014
4,8M -rw-rw---- 1 mysql mysql 4,8M 25. Feb 2009 mysqld-bin.000015
4,0K -rw-rw---- 1 mysql mysql 117 26. Feb 2009 mysqld-bin.000016
4,0K -rw-rw---- 1 mysql mysql 117 27. Feb 2009 mysqld-bin.000017
208K -rw-rw---- 1 mysql mysql 207K 3. Apr 2009 mysqld-bin.000018
52K -rw-rw---- 1 mysql mysql 49K 3. Apr 2009 mysqld-bin.000019
510M -rw-rw---- 1 mysql mysql 510M 10. Apr 2009 mysqld-bin.000020
92K -rw-rw---- 1 mysql mysql 91K 10. Apr 2009 mysqld-bin.000021
12K -rw-rw---- 1 mysql mysql 11K 10. Apr 2009 mysqld-bin.000022
92K -rw-rw---- 1 mysql mysql 89K 11. Apr 2009 mysqld-bin.000023
4,0K -rw-rw---- 1 mysql mysql 117 11. Apr 2009 mysqld-bin.000024
Es handelt sich hierbei um Log-Dateien, welche MySQL standardmäßig anlegt.
Wofür braucht MySQL die Binary Logdateien (mysqld-bin.XXXXX)?
Man spricht hierbei von so genannten Transaktionsprotokollen. MySQL notiert in diesen Dateien sämtliche Änderungen, die in irgendeiner Form an den Datenbanken und Tabellen vorgenommen werden. Das Anlegen neuer Tabellen, Speichern neuer Datensätze, Ändern von Werten, Löschen ganzer Zeilen, und so weiter. Alle Änderungen an den Datenbanken wird somit protokolliert. Je mehr mit den Datenbanken gearbeitet wird, desto größer werden die Logdateien.
MySQL kann anhand dieser Logdateien nach einem Crash oder Recovery die Datenbank nahezu vollständig wiederherstellen. Dazu braucht man lediglich das letzte Vollbackup (welches man selbst erstellt hat) und die Logdateien. MySQL baut auf dem Vollbackup auf und liest sich die Transaktionsprotokolle (Logdateien) ein. Somit kann MySQL Schritt für Schritt, Eintrag für Eintrag wiederherstellen, so dass sich die Datenbank nach Abschluss wieder in dem Zustand unmittelbar vor dem Crash befindet.
Wie kann ich das Log abschalten bzw. die Logdateien löschen?
Wenn man die Logdateien nicht benötigt, weil man beispielsweise eine Testumgebung betreibt, kann das Logging deaktivieren. Bevor man dies tut, sollte man die vorhandenen Log-Dateien löschen, da MySQL sich mit deaktiviertem Logging sich später weigert, dies zu tun. Dazu loggt man sich in MySQL ein und startet den Befehl RESET MASTER:
# mysql -u root -p
mysql> RESET MASTER;
Query OK, 0 rows affected (17.50 sec)
Anschließend sollten die Log-Dateien unter /var/lib/mysql/ verschwunden sein. Danach kann man das Logging deaktivieren. In der Konfigurationsdatei my.cnf (unter Linux befindet sich diese Datei in /etc/mysql) muss man lediglich den Eintrag log-bin auskommentieren:
// Auszug my.cnf
# log-bin
Anschließend noch MySQL neustarten und das Logging hat ein Ende:
# /etc/init.d/mysql restart