Seite 2 von 3

Verfasst: 26.09.2006 19:06
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 ...";
?>

Verfasst: 26.09.2006 19:17
von Gumfuzi
ist die einfachste und schnellste Lösung - sofern man diesen Befehl ausführen darf (das weiss der Provider)

Verfasst: 26.09.2006 19:21
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.

Verfasst: 26.09.2006 21:42
von thoha
Vielen herzlichen Dank an euch!!
Ich werde mich wegen diesen Scripts mit meinem Provider in Verbindung setzen!

Verfasst: 28.09.2006 19:41
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

Verfasst: 28.09.2006 22:26
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.

Verfasst: 28.09.2006 23:25
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

Verfasst: 29.09.2006 09:12
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

Verfasst: 06.10.2006 15:42
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!

Verfasst: 06.10.2006 16:30
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