beste Möglichkeit für server-backup?

pdg1

Registered User
Hallo!

bin im Besitz eines Strato HighEnd servers [unter Confixx] mit derzeit 10 gehosteten websites. Nun überlege ich, welches die beste Backup-Strategie ist...

Der Idealfall wäre das jede domain mitsamt der datenbank per cronjob regelmässig gesichert wird. also ein backup für den webfolder und die jeweilge datenbank jedes users unter Confixx:

domainXX1_web_09202005.tar.gz
domainXX1_db_09202005.zip
domainXX2_web_09202005.tar.gz
domainXX2_db_09202005.zip

welche möglichkeiten gibt es da? wie sichert ihr euren dedicated server für einzelne webpräsenzen in regelmässig intervallen?

habe mir auch schon REOBack angesehen, aber vielleicht gibt es ja noch andere Möglichkeiten... :cool:

würde mich über feedback freuen!
 
Ich sicher alles in ein großes Archiv. Ich hab 16 Kunden im Moment die jede Nacht um 3 Uhr gesichert werden. Das beinhaltet WWW, Mail, DB, Einstellungen
 
Ich mach sowas mit den folgenden Scripten.
Allerdings geh ich von der selben OS Version aus.
Keine Ahnung was passiert, wenn die OS VERsion dann höher ist.
Kannst ja aber die Scripte anpassen, wenn nötig.

Als erstes führst du folgendes Script aus.
Alle Scripte müssen dazu in /backup liegen

Code:
#!/bin/bash

# config
ftp_upload="no"
ftp_user=""
ftp_pass=""
ftp_ip=""
ftp_dir="/"

/backup/backup.sh mail logs

/bin/tar -C /backup -c -z -f /backup/full_backup.tar.gz *.tar.gz

if [ "${ftp_upload}" = yes ]; then
    /usr/bin/ncftpput -V -u ${ftp_user} -p ${ftp_pass} ${ftp_ip} ${ftp_dir} /backup/full_backup.tar.gz
fi

rm /backup/web*.tar.gz /backup/system.tar.gz

Code:
#!/bin/bash

# config
web_dir="/srv/www/htdocs"
mail_dir="/var/spool/mail"
backup_group="backup"
#mysql_opt="--opt --allow-keywords --compatible=mysql40"    #bei mysql 4.1 db
mysql_opt="--opt --allow-keywords"
mysql_pass="mysql password"
sql_backup="yes"
mail_backup="no"
ftp_upload="no"
ftp_user="ftp user"
ftp_pass="ftp password"
ftp_ip="ftp ip"
ftp_dir="/"

test -d /backup || /bin/mkdir /backup
test -d /backup/excludes || /bin/mkdir /backup/excludes

if [ ! -n "`cat /etc/group | grep ${backup_group}`" ]; then 
groupadd ${backup_group}
fi

# system
/bin/tar cfz /backup/etc.tar.gz /etc
/bin/tar cfz /backup/confixx.tar.gz /srv/www/htdocs/confixx /usr/local/confixx
/etc/init.d/mysql stop 
/bin/tar cfz /backup/mysql.tar.gz /var/lib/mysql/confixx /var/lib/mysql/mysql
/etc/init.d/mysql start
/bin/tar -C /backup -c -z -f system.tar.gz mysql.tar.gz etc.tar.gz confixx.tar.gz *.sh excludes
/bin/rm /backup/etc.tar.gz /backup/mysql.tar.gz /backup/confixx.tar.gz
if [ "${ftp_upload}" = yes ]; then
    /usr/bin/ncftpput -V -u ${ftp_user} -p ${ftp_pass} ${ftp_ip} ${ftp_dir} /backup/system.tar.gz
fi

# users
for nr in `ls ${web_dir} | grep web\[0-9\] | sed 's/web//'`
do   
    	test -d /backup/web${nr} || /bin/mkdir /backup/web${nr}
	test -e /backup/excludes/exclude_${nr}.list || /bin/touch /backup/excludes/exclude_${nr}.list
	/bin/tar -X /backup/excludes/exclude_${nr}.list -C ${web_dir}/web${nr}/html -c -z -f /backup/web${nr}/web${nr}_html.tar.gz .
	if [ "${sql_backup}" = yes ]; then
	    for db in `echo show databases | mysql -u root -p${mysql_pass} | grep usr_web${nr}_ | sed 's/usr_web[0-9]\{1,3\}_//'`
	    do
    		/usr/bin/mysqldump ${mysql_opt} -uroot -p${mysql_pass} -hlocalhost usr_web${nr}_${db} > /backup/web${nr}/web${nr}_db${db}.sql
	    done
	    if [ "`ls /backup/web${nr} | grep web${nr}_db | wc -w`" -gt 0 ]; then
		ls /backup/web${nr} | grep web${nr}_db | xargs tar -C /backup/web${nr} -c -z -f /backup/web${nr}/web${nr}_sql.tar.gz
		/bin/rm /backup/web${nr}/web${nr}_db*.sql
	    fi
	fi
	if [ "${mail_backup}" = yes ] && [ "`ls ${mail_dir} | grep web${nr}p | wc -w`" -gt 0 ] || [ "${1}" = mail ] && [ "`ls ${mail_dir} | grep web${nr}p | wc -w`" -gt 0 ]; then
	    ls /var/spool/mail | grep web${nr}p | xargs tar -C /var/spool/mail -c -z -f /backup/web${nr}/web${nr}_mail.tar.gz
	fi
	if [ "${2}" = logs ]; then
	/bin/tar cfz /backup/web${nr}/web${nr}_logs.tar.gz ${web_dir}/web${nr}/log ${web_dir}/web${nr}/.configs
	fi
	    /bin/tar -C /backup/web${nr} -c -z -f /backup/web${nr}.tar.gz .
	    /bin/rm -r /backup/web${nr}
	if [ "`groups web${nr} | grep ${backup_group} | sed 's/web[0-9]\{1,3\}.:.ftponly.//'`" = ${backup_group} ] && [ "${1}" != mail ]; then
	    /bin/cp /backup/web${nr}.tar.gz ${web_dir}/web${nr}/files/web${nr}.tar.gz
	    /bin/chown web${nr}:ftponly ${web_dir}/web${nr}/files/web${nr}.tar.gz
	    if [ "${ftp_upload}" = yes ]; then
    		/usr/bin/ncftpput -V -u ${ftp_user} -p ${ftp_pass} ${ftp_ip} ${ftp_dir} /backup/web${nr}.tar.gz
    	    fi
	fi    
done


Zum Wiederherstellen folgendes Script verwenden:
Code:
#!/bin/bash

echo All Data will be lost!
echo Press CTRL + C to abort!
sleep 10

# config
restore_dir="/backup/restore"
web_dir="/srv/www/htdocs"
mail_dir="/var/spool/mail"
root_dir="/"
mysql_pass="mysql root passwort"

# restore
test -d ${mail_dir} || /bin/mkdir -p ${mail_dir}
test -d ${restore_dir} || /bin/mkdir -p ${restore_dir}
/bin/tar -C /backup/restore -x -z -f full_backup.tar.gz
/etc/init.d/mysql stop 
/bin/tar -C ${restore_dir} -x -p -z -f ${restore_dir}/system.tar.gz
/bin/tar -C ${root_dir} -x -p -z -f ${restore_dir}/mysql.tar.gz
/bin/tar -C ${root_dir} -x -p -z -f ${restore_dir}/etc.tar.gz
/bin/tar -C ${root_dir} -x -p -z -f ${restore_dir}/confixx.tar.gz
/etc/init.d/mysql start
for nr in `ls ${restore_dir} | grep web\[0-9\] | sed 's/web//' | sed 's/.tar.gz//'`
do
test -d ${restore_dir}/web${nr} || /bin/mkdir ${restore_dir}/web${nr}
/bin/tar -C ${restore_dir}/web${nr} -x -z -f ${restore_dir}/web${nr}.tar.gz
/bin/tar -C ${root_dir} -x -p -z -f ${restore_dir}/web${nr}/web${nr}_logs.tar.gz
test -d ${web_dir}/web${nr}/files || /bin/mkdir -p ${web_dir}/web${nr}/files
chown -c web${nr}:ftponly ${web_dir}/web${nr}/files
chmod 0755 ${web_dir}/web${nr}/files
test -d ${web_dir}/web${nr}/phptmp || /bin/mkdir -p ${web_dir}/web${nr}/phptmp
chown -c web${nr}:ftponly ${web_dir}/web${nr}/phptmp
chmod 0777 ${web_dir}/web${nr}/phptmp
test -d ${restore_dir}/web${nr}/html || /bin/mkdir ${restore_dir}/web${nr}/html
/bin/tar -C ${restore_dir}/web${nr}/html -x -p -z -f ${restore_dir}/web${nr}/web${nr}_html.tar.gz
/bin/cp -r -p ${restore_dir}/web${nr}/html ${web_dir}/web${nr}
if [ -e ${restore_dir}/web${nr}/web${nr}_mail.tar.gz ]; then
test -d ${restore_dir}/web${nr}/mail || /bin/mkdir ${restore_dir}/web${nr}/mail
/bin/tar -C ${restore_dir}/web${nr}/mail -x -p -z -f ${restore_dir}/web${nr}/web${nr}_mail.tar.gz
/bin/cp -p ${restore_dir}/web${nr}/mail/* ${mail_dir}
fi
if [ -e ${restore_dir}/web${nr}/web${nr}_sql.tar.gz ]; then
test -d ${restore_dir}/web${nr}/sql || /bin/mkdir ${restore_dir}/web${nr}/sql
/bin/tar -C ${restore_dir}/web${nr}/sql -x -p -z -f ${restore_dir}/web${nr}/web${nr}_sql.tar.gz
for db in `ls ${restore_dir}/web${nr}/sql | grep web | sed 's/web[0-9]\{1,3\}_db//' | sed 's/.sql//'`
do
echo CREATE DATABASE usr_web${nr}_${db} | mysql -u root -p${mysql_pass}
echo SOURCE ${restore_dir}/web${nr}/sql/web${nr}_db${db}.sql | mysql -uroot -p${mysql_pass} usr_web${nr}_${db}
done
fi
done
 
Hi,

ich habe das script bei mir auch mit raufgemacht, funktioniert wunderbar.
Nur habe ich jetz einige fragen:

Wenn ich das Backup mache wird mir angezeigt

/bin/tar: Removing leading `/' from member names
/bin/tar: Removing leading `/' from member names
Shutting down service mysql done
/bin/tar: Removing leading `/' from member names
Starting service MySQL done

MySQL ist ja okay, aber was meint er mit den andren drei Einträgen?
Ist das normal oder nicht?
Die Backups werden aber gemacht, und sind dann auch für jedes webXX ein eigenes .tar.gz.
(ok gutes Deutsch lol)

Nun wollt ich noch wissen, ich hab mir solch ein Archiv mal angesehn und nichts darauf schließen lassen das die Mails auch mit gesichert wurden.
Woran sieht man das? Oder ist es trotzdem passiert.

Und dann wollt ich noch wissen, wozu die erste Datei ist (die mit dem kleineren Text), ich führe immer die zweite für das Backup aus.

Dann noch eine letzte Frage:
Wenn ich jetzt zb ein Restore mache, wird dann auch alles zurückgespielt? Also auch die confixx einstellungen, da die User und PWs, Emails usw.? Und werden auch die Rechte wieder mit übernommen? Also das web2 web2 bleibt?


Also schonmal danke fürs lesen =)

greetz mbanse
 
Last edited by a moderator:
Hi,

Eenn ich das Script jetzt ausführe zeigt er mir:

/bin/tar: Removing leading `/' from member names
/bin/tar: Removing leading `/' from member names
Shutting down service mysql..done
/bin/tar: Removing leading `/' from member names
Starting service MySQL..done
/bin/tar: *.sh: Cannot stat: No such file or directory
/bin/tar: Error exit delayed from previous errors

Also noch die beiden Zeilen unten zusätzlich an.


greetz mbanse
 
also ich nehm reoback
damit werden bei mir jeden tag www db und mails gesichert und per ftp auf meinem backupserver kopiert

find ich schwergenial das teil

mfg Chris
 
naja bei reoback kannste ja in den settings einstellen welche verzeichnisse du sichern willst

und dort habe ich halt eben auch das verzeichnis der dbs eingetragen


mfg Chris
 
Un zu meinem Prob sagt keiner was?
Oobwohl ich jetzt auch Reoback benutze, find ich auch ok.

Gibt es bei Reoback eig ne art Restore funktion? Oder muss ich alles per Hand zurückkopieren und die Userrechte setzen?
 
Joa stimmt schon ist kein Prob,
aber das ist immer sone kleine Fummelarbeit *g
und so wenn man zb 35 webs wieder zurück spielen muss
und für jeden seine Rechte wieder vergeben muss.

Sag mal, wenn ich die Confixx DB wieder zurückspiele, sind dann auch alle alten Einstellungen wieder in Confixx vorhanden? Also PWs, Subdomains, Maildomains usw. Oder gibts da nen Prob?
Ok für die Domains und so weiss ich muss ich die vhost sichern, ich sicher jedes mal die gesamte Apache config, und so.

Aber was müsste ich noch mitsichern für die Mail accounts und so?
Die Mails an sich sichere ich ja auch mit. ('var/spool/mail') wars glaub ich.

Oder gibts im Anschluss mit den UIDs? *gg* joa danke schonma xD
 
mbanse said:
Gibt es bei Reoback eig ne art Restore funktion? Oder muss ich alles per Hand zurückkopieren und die Userrechte setzen?

benutze nun auch REOBack und sichere so ziemlich alle wichtigen Verzeichnisse auf meinen STRATO FTP backup space.

Kann mir jemand genaueres für einen restore prozess sagen? Woher weiss ich genau wie ich die Userrechte für die einzelnen Verzeichnisse (/etc, /srv, ...) setzen muss? Bin da leider noch ein wenig Neuling...

DANKE!
 
Freez said:
Die Systemuser, Gruppen für die Webs und Mailkonten müssen auch zurückgespielt werden.

hm und wo liegen die Systemuser, gruppen und so?

Ich dachte immer die liegen mit im /etc oder?


@pdg1
Na eigentlich bekommen alle Dateien den user root, als Benutzer.
Und eben die einzelnen Webs die webs des jeweiligen Users das geht einfach mit chown -R webID:ftponly Ordner
das bedeutet das alle Ordner und Unterordner ab 'Ordner' den user webID bekommen.
 
Last edited by a moderator:
Back
Top