DB-Backup per Cronjob bei All-Inkl

Ich hatte vor einiger Zeit beschrieben, wie ich mir ein DB-Backup bei meinem Hoster Domainfactory eingerichtet habe. Ich ziehe nun gerade zu All-Inkl um und musste dafür meine damalige Lösung etwas überarbeiten.

Cronjobs

Der wichtigste Unterschied: Bei All-Inkl kann ich nur Scripte im Webroot aufrufen. Ein Shell-Script als Cronjob einzutragen, geht also höchstens über Umwege. Da ich die eigentliche Arbeit sowieso über PHP erledigen möchte, habe ich hier also direkt das PHP-Script eingetragen. Der Ordner ist mit einem Verzeichnisschutz versehen, am Cronjob wird das Passwort mit eingetragen. Die erzeugten Backup-Dateien liegen jedoch nicht in diesem Ordner, sondern auf der obersten Ebene in einem Ordner, der keinesfalls aus dem Netz heraus aufrufbar ist.

Das grundsätzliche Setup bleibt ansonsten gleich, außer dass ich keine php-ini-Datei brauche, da der Aufruf ja über den Web-Browser und damit über die normale PHP-Umgebung kommt. Der „Cron-Job“ ruft also die Datei „db_backup.php“ auf, welche über „exec“ den „mysqldump“-Befehl startet. Aus Sicherheitsgründen wird hier nur ein login-path-Argument mitgegeben, nicht das Passwort. Zu den Gründen dafür schaut in den damaligen Eintrag.

Einen wichtigen Unterschied gibt es zum Vorgehen bei Domainfactory. Dort war das mir zur Verfügung stehende Verzeichnis scheinbar als mein Home-Verzeichnis konfiguriert. Der „mysql_config_editor“-Befehl hat also die “.mylogin.cnf“-Datei dort abgelegt. Bei all-inkl klappt das Setzen des Passwortes ebenfalls und man kann es auch mit „mysql_config_editor list –all“ wieder auslesen. Die Datei taucht aber nicht auf. Wo immer sie liegt, sie kann jedenfalls per SSH von dem Benutzer, der sie angelegt hat, gelesen werden. Aber da ich ihren Pfad nicht kenne, kann ich diesen dem PHP-Script auch nicht mitgeben. Das Ergebnis ist wie bei meinen ersten Versuchen bei Domainfactory: Es wird eine 0-KB-Backup-Datei erzeugt.

Die Lösung ist eigentlich aber ganz einfach. Vor dem Setzen des Passwortes muss dem System mitgeteilt werden, wo die Datei liegen soll. Das geht über die im damaligen Eintrag erwähnte Umgebungsvariable. Ihr verbindet euch also per SSH und setzt dann das ab:

export MYSQL_TEST_LOGIN_FILE=/www/htdocs/[euer User]/.mylogin.cnf
mysql_config_editor set --login-path=[ein Identifier, z.B. appdb_02] --host=localhost --user=[DB-User] --password

Damit wird beim Bekanntmachen des DB-Passwortes bereits der Pfad verwendet, den ihr dann auch im Backup-Script setzen müsst. Und damit klappt nun das Anlegen des Backups über einen Cronjob bei all-inkl.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Bitte beachte die Kommentarregeln: 1) Kein Spam, und bitte höflich bleiben. 2) Ins Namensfeld gehört ein Name. Gerne ein Pseudonym, aber bitte keine Keywords. 3) Keine kommerziellen Links, außer es hat Bezug zum Beitrag. mehr Details...

So, noch mal kurz drüber schauen und dann nichts wie ab damit. Vielen Dank fürs Kommentieren! :-)