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

Weitere Informationen

MySQL.de - Binary Log