Sicherungsscript

  • Cron-Jobs sind gewissermaßen das Linux-Equivalent des Windows-Schedulers.
    Leider habe ich damit keine großartige Erfahrung, nach allem was ich gehört und gelesen habe lässt sich darüber jedoch eine Anfrage an die Linux-Kommandozeile durchführen sodass man zum Beispiel jeden Tag um 05:00 Uhr morgens eine komplette Sicherung der Datenbank vornimmt. 05:00 Uhr deshalb weil in dieser Zeit sicherlich die wenigstens User online sind und etwas schreiben.

    Steht dir ein Konfigurationswerkzeug für die Crons zur Verfügung oder musst du sie manuell einrichten?
    Ein passender Cronjob könnte so aussehen:

    Code
    0 5 *  *  *   mysqldump -pPASSWORT konvers > dailybackup.sql

    Dieser Cronjob würde dann jeden Tag die Datei konversdaily.sql mit der aktuellen Datenbank überspielen.
    Du könntest aber auch mehrere Cronjobs erstellen, einen für jeden Tag der Woche. Die könnten dann so ausschauen:

    Code
    0 5 *  *  1   mysqldump -pPASSWORT konvers > konversmonday.sql
    0 5 *  *  2   mysqldump -pPASSWORT konvers > konverstuesday.sql
    0 5 *  *  3   mysqldump -pPASSWORT konvers > konverswednesday.sql
    0 5 *  *  4   mysqldump -pPASSWORT konvers > konversthursday.sql
    0 5 *  *  5   mysqldump -pPASSWORT konvers > konversfriday.sql
    0 5 *  *  6   mysqldump -pPASSWORT konvers > konverssaturday.sql
    0 5 *  *  7   mysqldump -pPASSWORT konvers > konverssunday.sql

    Nun, keine Ahnung ob du da irgendwie an die crontab-Datei ran musst um das ganze zu machen. Wichtig wäre auch wenn du den Befehl "mysqldump -pPASSWORT konvers > testbackup.sql" zuvor per telnet testen könntest. Bei dem Test darf der Server keinen Usernamen und kein Passwort fordern. Er muss vielmehr sofort reagieren und das Passwort eingeben.

    Die Zahlen bedeuten folgendes:
    0 = Zur Minute Null (Werte von 0-59 sind zulässig)
    5 = Zur Stunde Fünf (Werte von 0-23 sind zulässig)
    * = An jedem Tag des Monats (Werte von 1-31 sind zulässig)
    * = In jedem Monat des Jahres (Werte von 1-31 sind zulässig)
    1 = An einem Monat (0 u. 7 = Sonntag, 1 = Montag, Werte von 0-7 sind zulässig)
    Die Sternchen bedeuten dass der Job jeden möglichen Tag bzw. jeden Monat ausgeführt wird.

    Das jeweilige Backup dürfte sich auf die gleiche weise einspielen lassen wie das Philosophie-Backup.
    Es wäre nicht schlecht wenn du ein gutes Konfigurationswerkzeug für die Cronjobs zur Verfügung hättest, das würde das ganze erheblich erleichtern. Die Backup-Dateien werden dann auf dem Server abgelegt und sollten regelmäßig von diesem abgeholt werden - für den Fall eines Festplattencrashes.

    Informationen zu CronJobs gibt es auf den Hilfeseiten von 1und1.de.

    nähere ahnung von cronjobs hab ich leider nicht...
    time

  • Der Umweg über PHP dürfte wie folgt funktionieren:
    Lege per FTP ein neues Verzeichnis an dem du per chmod die Rechte "777" gibtst.
    Dort fügst du eine PHP-Datei mit folgendem Code ein:

    PHP
    <?phpsystem("mysqldump -uUSERNAME -pPASSWORT -h ihrdatenbankserver.de DATENBANKNAME|gzip > /VOLLER_PFAD/dump.sql.gz", $fp);if ($fp==0) echo "Daten exportiert"; else echo "Es ist ein Fehler aufgetreten";?>

    Der Code stammt von MiXa aus dem phpBB.de-Forum, wo das Original herkommt kann ich dir allerdings auch nicht sagen.
    Das PHP-File kann man dann per Cronjob z.B. täglich aufrufen lassen. Mit einigen Modifikationen lässt sich sicherlich mehr als eine dump.sql.gz anlegen, also dass der Dateiname zum Beispiel auch das Datum enthält. In dieser Hinsicht muss ich mich allerdings noch Schlau machen, selbst habe ich in PHP bislang nicht mehr gemacht als ein paar Link-Änderungen.
    Den "vollen Pfad" sollte man dem Artikel von MiXa zufolge mit diesem PHP-Script "heraus bekommen":

    Code
    <?  echo "Der absolute Pfad lautet: ";  $path = ereg_replace ("\\\\","/",__FILE__);  $path = dirname ($path);  $path = trim($path);  echo "<b>$path</b>";?>

    Das Einspielen der Datenbank kann über ein ähnliches PHP-Script erfolgen, dieses könnte so ausschauen:

    PHP
    <?php
    system("mysql -uUSERNAME -pPASSWORT -h ihrdatenbankserver.de DATENBANKNAME|gzip < /VOLLER_PFAD/dump.sql.gz", $fp);
    if ($fp==0) echo "Daten exportiert"; else echo "Es ist ein Fehler aufgetreten";
    ?>

    Ob das so allerdings funktioniert kann ich nicht sagen, ich weiß nicht wie und wo genau man die Angabe bezüglich des gzip machen muss.
    Bei der erzeugten Datei handelt es sich jedenfalls um eine Standard-SQL-Datei wie sie auch von phpMyAdmin und MySQLFront erzeugt wird, sodass beim Re-Import keine Probleme zu erwarten sind.

    Der Nachteil der ganzen Geschichte ist - ohne die angesprochenen Modifikationen - dass nur eine einzige Datenbanksicherung erstellt wird.
    Abhilfe könnte man - ohne wirkliche Änderungen - schaffen indem man sieben Backup-PHP-Dateien erstellt die die Daten dann zum Beispiel nach dumpmonday.sql.gz, dumptuesday.sql.gz usw. sichert. Die passenden PHP-Dateien müssten dann per Cronjob an den jeweiligen Tagen ausgeführt werden.

    ich müsste mich mal mehr mit php und auch cronjobs befassen,
    time