Benutzer mit Rechten für mysqldump ausstatten

MySQL Backupscripte sind ein potentielles Sicherheitsrisiko, wenn zum Sichern der root Benutzer verwendet wird. Denn meist steht das Passwort direkt im Script oder ist in der my.cnf abgelegt. Ein potenzieller Angreifer der lesend auf das System gelangt, hat dadurch leichtes Spiel an die Passwörter zu kommen. Deshalb empfiehlt es sich Backups mit einem separaten Benutzer anzulegen, der nur die nötigsten Rechte hat. Ich gehe meist wie folgt vor:

Benutzer angelegen

CREATE USER 'backupnutzer'@'localhost' IDENTIFIED BY 'geheim';

Berechtigungen setzen (Wer keine Trigger oder Views benutzt kann SHOW VIEW bzw. TRIGGER auch weg lassen.)

GRANT SELECT, FILE, LOCK TABLES, SHOW VIEW, TRIGGER ON *.* TO 'backupnutzer'@'localhost';

Hinweis! Diese Query vergibt globale Rechte. Will man nur auf eine bestimmte Datenbank sichern sollte der Befehl so aussehen.

GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER ON datenbank.* TO 'backupnutzer'@'localhost';

Rechte neu einlesen

FLUSH PRIVILEGES;

Fertig. Nun kann der Benutzer backupnutzer mit dem Passwort geheim in den Scripten verwendet werden. Ein potentieller Angreifer würde zwar trotzdem noch auf die Datenbank gelangen, könnte aber deutlich weniger Schaden anrichten.

MySQL Datenbankbackup auf einem entfernten Host einspielen

Mit Produktiv Datenbanken zu arbeiten kann unter Umständen eine heikle Sache sein. Besser ist es eine Arbeits- bzw. Testumgebung anzulegen. Um mit aktuellen Daten aus der Produktiv Umgebung zu testen, benötigt man für die Testumgebung ein SQL Dump.

Natürlich kann man eine MySQL Datenbank sichern und wiederherstellen. Es gibt aber noch einen einfacheren Weg. Ist die Testumgebung von der Produktivumgebung erreichbar, funktioniert folgendes:

mysqldump DATENBANK | mysql —host=ENTFERNTER_HOST -C DATENBANK

Selbstverständlich ist diese Variante nicht die einzige Lösung, aber um eine Normale Datenbank von einer MySQL Installation auf eine andere zu bekommen, reicht es alle mal.

MySQL Datenbank sichern

Das Thema Sicherung wird meist nicht ausreichend beachtet. Gerade bei Datenbanken wie z.B. MySQL kann das aber ein Fehler sein. Ist die Datenbank klein kann z.B. die Verwaltungsoberfläche phpMyAdmin genutzt werden. Bei größeren Datenbanken empfielt sich dann doch schon die Kommandozeile.

Eine sehr simple Variante einer Sicherung in der Kommandozeile lautet wie folgt:

mysqldump DATENBANK1 > /pfad/zur/mysqlsicherung.sql

Wobei DATENBANK1 mit dem Namen der zu sichernden Datenbank ersetzt wird. Natürlich kann man auch gleich mehrere Datenbanken sichern. Zum Beispiel so:

mysqldump –opt DATENBANK1, DATENBANK2, … > /pfad/zur/mysqlsicherung.sql

Um eine mit mysqldump erstellte Sicherung wieder herzustellen, benutzt man den folgenden Befehl:

mysql -uBENUTZER -pPASSWORT DATENBANK1 < /pfad/zur/mysqlsicherung.sql

Weitere Informationen zum Sichern von Datenbanken gibts in der MySQL-Dokumentation.
http://dev.mysql.com/doc/refman/5.1/de/mysqldump.html
http://dev.mysql.com/doc/refman/5.1/de/mysql-command-options.html
http://dev.mysql.com/doc/refman/5.1/de/disaster-prevention.html