phpBB-DB-Backup mit Cronjob

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
DreamPromise
Mitglied
Beiträge: 3793
Registriert: 27.01.2004 17:56

Beitrag von DreamPromise »

Moin moin

So gehts :
<?
exec("mysqldump -u Datenbankname -pPasswort --add-drop-table Datenbankname >dump" . date('dmY') . ".sql");
// exec("gzip dump" . date('dmY') . ".sql");
echo "Die Datenbank ist gesichert ...";
?>
Benutzeravatar
Gumfuzi
Ehemaliges Teammitglied
Beiträge: 2454
Registriert: 26.03.2004 22:25
Wohnort: Linz, AT
Kontaktdaten:

Beitrag von Gumfuzi »

ist die einfachste und schnellste Lösung - sofern man diesen Befehl ausführen darf (das weiss der Provider)
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von Banger »

Ich hab dafür ein shellscript:

Code: Alles auswählen

#!/bin/sh
DATUMZEIT=`date "+%d.%m.%Y, %H:%M"`
DATUM=`date "+%Y-%m-%d"`
ZIEL="dump-$DATUM.sql.gz"
cd /var/www/web0/files/backup/
mysqldump --quick --add-drop-table --add-locks --extended-insert  -u[user]  -p[password] [db]  | gzip -c  > $ZIEL
echo "$DATUMZEIT Backup durchgefuehrt: $ZIEL"
# Backups aelter als 5 Tage loeschen:
find . -name "dump-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].sql.gz" -mtime +5 -maxdepth 1 -exec echo "$DATUMZEIT Backupfile geloescht: {}" \;
find . -name "dump-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].sql.gz" -mtime +5 -maxdepth 1 -exec rm -f {} \;
[user], [password], [db] und der Zielpfad (hier: /var/www/web0/files/backup/ - außerhalb des Document Roots) müssen natürlich noch durch die entsprechenden Werte (ohne eckige Klammern!) ersetzt werden.

Das ganze dann als daily_backup.sh speichern, Ausführbarkeitsbits setzen (chmod 700 - außer Dir sollte natürlich keiner das File und somit Dein DB-Passwort einsehen können!) und einen Crontab-Eintrag generieren:

Code: Alles auswählen

30 3 * * * /var/www/web0/files/crons/daily_backup >> /var/www/web0/files/logs/backup.log 2>>/var/www/web0/files/logs/backup.err
Sodele. Nu wird jeden Morgen um halb vier ein Backup gefahren, Backups mit einem Alter von mehr als 5 Tagen werden gelöcht und die Ergebnisse in /var/www/web0/files/logs/ geloggt.
thoha
Mitglied
Beiträge: 372
Registriert: 11.01.2006 19:28
Wohnort: Oetwil an der Limmat CH
Kontaktdaten:

Beitrag von thoha »

Vielen herzlichen Dank an euch!!
Ich werde mich wegen diesen Scripts mit meinem Provider in Verbindung setzen!
Benutzeravatar
DreamPromise
Mitglied
Beiträge: 3793
Registriert: 27.01.2004 17:56

Beitrag von DreamPromise »

Moin moin

Banger hat geschrieben:Ich hab dafür ein shellscript:

Code: Alles auswählen

#!/bin/sh
DATUMZEIT=`date "+%d.%m.%Y, %H:%M"`
DATUM=`date "+%Y-%m-%d"`
ZIEL="dump-$DATUM.sql.gz"
cd /var/www/web0/files/backup/
mysqldump --quick --add-drop-table --add-locks --extended-insert  -u[user]  -p[password] [db]  | gzip -c  > $ZIEL
echo "$DATUMZEIT Backup durchgefuehrt: $ZIEL"
# Backups aelter als 5 Tage loeschen:
find . -name "dump-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].sql.gz" -mtime +5 -maxdepth 1 -exec echo "$DATUMZEIT Backupfile geloescht: {}" \;
find . -name "dump-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9].sql.gz" -mtime +5 -maxdepth 1 -exec rm -f {} \;
[user], [password], [db] und der Zielpfad (hier: /var/www/web0/files/backup/ - außerhalb des Document Roots) müssen natürlich noch durch die entsprechenden Werte (ohne eckige Klammern!) ersetzt werden.

Das ganze dann als daily_backup.sh speichern, Ausführbarkeitsbits setzen (chmod 700 - außer Dir sollte natürlich keiner das File und somit Dein DB-Passwort einsehen können!) und einen Crontab-Eintrag generieren:

Code: Alles auswählen

30 3 * * * /var/www/web0/files/crons/daily_backup >> /var/www/web0/files/logs/backup.log 2>>/var/www/web0/files/logs/backup.err
Sodele. Nu wird jeden Morgen um halb vier ein Backup gefahren, Backups mit einem Alter von mehr als 5 Tagen werden gelöcht und die Ergebnisse in /var/www/web0/files/logs/ geloggt.

Ich hab das mal probiert.....aber es funktioniert bei mir nicht.
Ich hab bei meinem Provider EIN CJ der z.Z. täglich eine Datei startet.
In diese Datei stehen die Pfade zu Sicherungsdatein drin...so z.B.:
<?php include("http://www.mein-forum.de/cronjob/cronjob.php");?>
<?php include("http://www.mein-zweites-forum.de/cronjob/cronjob.php");?>
.
.
.
. usw...

Das hat zur Folge das ich täglich mehrere Backups (mehrere Foren) downloaden muß damit der Speicher nicht zu voll wird.

Ich hab die Datei daily_backup.sh in ein Verzeichnis kopiert und wollte sie ausführen um zu testen ob es auch geht.Aber es kommt ein Fenster wo steht ob ich die Datei downloaden will..... hmmm....

Was hab ich falsch gemacht???

DP
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag von Banger »

DreamPromise hat geschrieben:Ich hab die Datei daily_backup.sh in ein Verzeichnis kopiert und wollte sie ausführen um zu testen ob es auch geht.Aber es kommt ein Fenster wo steht ob ich die Datei downloaden will..... hmmm....

Was hab ich falsch gemacht???
Das ist ein Shellscript! => http://de.wikipedia.org/wiki/Bourne_Shell#Skripte
Das wird auf dem System selbst aufgerufen, nicht über den Browser.
Benutzeravatar
DreamPromise
Mitglied
Beiträge: 3793
Registriert: 27.01.2004 17:56

Beitrag von DreamPromise »

Moin moin
Banger hat geschrieben:Das wird auf dem System selbst aufgerufen, nicht über den Browser.
Und wer führt das aus ?Ich denke der CJ.
Wie ich ja schrieb startet der CJ eine PHP-Datei die wiederum andere Dateien startet die die Datenbanken der verschiedenen Foren sichert.
Was muß ich denn ich die PHP-Datei, die die anderen Dateien starteten, reinschreiben ??


Und was ist das:
30 3 * * * /var/www/web0/files/crons/daily_backup >> /var/www/web0/files/logs/backup.log 2>>/var/www/web0/files/logs/backup.err
DP
Benutzeravatar
killerbees19
Mitglied
Beiträge: 1185
Registriert: 09.05.2006 17:33
Wohnort: Wien (Österreich)
Kontaktdaten:

Beitrag von killerbees19 »

Also die Exec Befehl kann bei manchem Providern schon ausgeführt werden, nur muss man dafür manchmal die Dateiendlung ändern.
Bei all-inkl z.B. muss die Datei *.phpx heißen, sonst geht nix.

Und wegen Backups, da mische ich mich ja immer gerne ein :D
Ich würde auf jeden Fall ein fertiges Script nehmen, da diese mehr Funktionen haben, wie das die Backups nach X Tagen wieder gelöscht werden und so. Und mysqldumper verwende ich auch nicht, sagt mir nicht zu, versuche es mal damit: www.phpmybackuppro.net - funktioniert auch mit einem Cron Job. Der einzige Nachteil bei diesem Script, bei größeren Datenbanken könnte es zu einem Timeout kommen, das kann man aber leicht umgehen, indem man ein paar Codezeilen hinzufügt :wink:
Damit wäre dieser Part wohl auch geklärt, da viele immer sagen: "phpmybackuppro" ungeht die Ausführungszeit nicht, muss man halt selber ein paar Zeilen Code hinzufügen.


MfG Christian
» Real programmers don't comment. If it was hard to write, it should be hard to understand!
thoha
Mitglied
Beiträge: 372
Registriert: 11.01.2006 19:28
Wohnort: Oetwil an der Limmat CH
Kontaktdaten:

Beitrag von thoha »

DreamPromise hat geschrieben:Moin moin

So gehts :
<?
exec("mysqldump -u Datenbankname -pPasswort --add-drop-table Datenbankname >dump" . date('dmY') . ".sql");
// exec("gzip dump" . date('dmY') . ".sql");
echo "Die Datenbank ist gesichert ...";
?>
Und:
Gumfuzi hat geschrieben:ist die einfachste und schnellste Lösung - sofern man diesen Befehl ausführen darf (das weiss der Provider)
Also folgendes Prob:

den Befehl

Code: Alles auswählen

exec()
darf ich ausführen, PHP läuft nicht im Safe Mode, aber es geht einfach nicht! Ich rufe die Datei auf, das Script gibt "Die Datenbank ist gesichert..." aus, aber wenn ich ins Verzeichnis schauen gehe, dann ist dort weit und breit keine .sql-Datei zu sehen!
Bei mir auf dem localhost hats funktioniert, aber auf dem "richtigen" nicht...

Woran kann das liegen?



Vielen Dank!
Benutzeravatar
killerbees19
Mitglied
Beiträge: 1185
Registriert: 09.05.2006 17:33
Wohnort: Wien (Österreich)
Kontaktdaten:

Beitrag von killerbees19 »

Du musst dem Ordner CHMOD 777 geben, sonst kann das Script die Datei nciht speichern. Und bei XAMPP & Co auf localhost braucht man das nicht, deshalb ist dir das nicht aufgefallen :wink:


MfG Christian
» Real programmers don't comment. If it was hard to write, it should be hard to understand!
Antworten

Zurück zu „Coding & Technik“