Hallo Gemeinde,
Hier stelle ich euch insgesamt drei Skripte vor die ich selbst benutze um automatisierte Backups von Datenbanken und Filesystem zu erstellen und diese dann auf einem anderen Server zu replizieren.
Zuerst das Skript für die MySQL-Datenbanken:
Alles anzeigen
Dieses Script sichert alle Datenbanken außer diese stehen in der Variable $DBFILTER. Wenn die Datenbank gesichert wurde, wird diese mittels ncftpput auf einen FTP-Server kopiert. Die Verbindungsdaten für den FTP-Server stehen in der Datei /root/.backup.ftp
Nun kommt das Skript um die Dateien zu sichern:
Alles anzeigen
Diese Datei arbeitet vom Prinzip her genau wie die mysqlbackup.sh. Die verwendeten Parameter kann man in den man-Pages nachlesen.
Nun sind die Dateien auf zwei Servern gespeichert. Einmal lokal im Verzeichnis /var/backups/webserver und einmal auf einem FTP-Server. Was aber wenn die lokale Platte ausfällt und gleichzeitig der FTP-Server ausfallen, z.B. wenn beide Server im gleichen Rechenzentrum stehen und das Rechenzentrum einen schwerwiegenden Defekt hat?
Dafür gibt es noch die Möglichkeit die gesicherten Daten mittels rsync auf einen dritten Server zu kopieren:
Alles anzeigen
Generell kann man auch alle drei Skripte in eine Datei fassen. Um aber die Dateien von den Datenbanken besser zu trennen und auch die Replizierung extra zu halten, habe ich das in drei Dateien gesplittet. So ist es auch einfach möglich das Backup mittels cronjobs zu automatisieren und unterschiedliche Ausführungszeiten festzulegen. So wird bei mir die Datenbank täglich gesichert, die Dateien wöchentlich und die Replizierung per rsync ebenfalls wöchentlich.
lg
Hier stelle ich euch insgesamt drei Skripte vor die ich selbst benutze um automatisierte Backups von Datenbanken und Filesystem zu erstellen und diese dann auf einem anderen Server zu replizieren.
Zuerst das Skript für die MySQL-Datenbanken:
Shell-Script
- #!/bin/sh
- BACKUPDIR="/var/backups/webserver/mysql";
- DBFILTER="(information_schema|dev|tmp)";
- MYSQLDUMP="$(which mysqldump) --opt";
- DIRNAME=`date +%Y-%m`;
- FTP_PATH="/mysql";
- MYSQL=$(which mysql);
- TAR=$(which tar);
- GZIP=$(which gzip);
- NICE=$(which nice);
- EGREP=$(which egrep);
- NCFTPPUT=$(which ncftpput);
- MKDIR=$(which mkdir);
- mkdir -p "$BACKUPDIR/$DIRNAME";
- DBS=$($MYSQL -Bse "show databases");
- for db in $DBS
- do
- if !(echo $db | $EGREP $DBFILTER > /dev/null);
- then
- FILENAME="$db-`date +%Y_%m_%d_%H_%M_%S`.sql.gz";
- $MKDIR $BACKUPDIR/$db
- $MKDIR $BACKUPDIR/$db/$DIRNAME
- $NICE -n 20 $MYSQLDUMP $db | $NICE -n 20 $GZIP -c > "$BACKUPDIR/$db/$DIRNAME/$FILENAME";
- if ( [ "$NCFTPPUT" ] );
- then
- $NCFTPPUT -V -m -f /root/.backup.ftp "$FTP_PATH/$DIRNAME/" "$BACKUPDIR/$db/$DIRNAME/$FILENAME";
- fi
- fi
- done
Nun kommt das Skript um die Dateien zu sichern:
Shell-Script
- #!/bin/sh
- BACKUPDIR="/var/backups/webserver/files";
- FILEFILTER="(tmp)";
- FILEDIR="/home/www";
- DIRNAME=`date +%Y-%m`;
- FTP_PATH="/files";
- TAR=$(which tar);
- NICE=$(which nice);
- EGREP=$(which egrep);
- NCFTPPUT=$(which ncftpput);
- mkdir -p "$BACKUPDIR/$DIRNAME";
- FILES=$(ls "$FILEDIR");
- for dir in $FILES
- do
- if !(echo $dir | $EGREP $FILEFILTER > /dev/null);
- then
- FILENAME="$dir-`date +%Y_%m_%d_%H_%M_%S`.tar.gz";
- cd $FILEDIR;
- mkdir $BACKUPDIR/$dir
- mkdir $BACKUPDIR/$dir/$DIRNAME
- $TAR cvzpf $BACKUPDIR/$dir/$DIRNAME/$FILENAME $dir --same-owner --exclude=tmp/* --exclude=logs/* --exclude=php-fcgi/* > /dev/null
- if ( [ "$NCFTPPUT" ] );
- then
- $NCFTPPUT -V -m -f /root/.backup.ftp "$FTP_PATH/$DIRNAME/" "$BACKUPDIR/$dir/$DIRNAME/$FILENAME";
- fi
- fi
- done
Nun sind die Dateien auf zwei Servern gespeichert. Einmal lokal im Verzeichnis /var/backups/webserver und einmal auf einem FTP-Server. Was aber wenn die lokale Platte ausfällt und gleichzeitig der FTP-Server ausfallen, z.B. wenn beide Server im gleichen Rechenzentrum stehen und das Rechenzentrum einen schwerwiegenden Defekt hat?
Dafür gibt es noch die Möglichkeit die gesicherten Daten mittels rsync auf einen dritten Server zu kopieren:
Shell-Script
- #!/bin/sh
- BACKUPDIR=/var/backups/webserver
- TARGETUSER=remotebackup
- TARGETDIR=/home/remotebackup/backup_`date +'%Y-%m-%d_%H%M%S'`
- EXCLUDES=/root/rsync-excludes.conf
- BACKUPSERVER=SERVER
- if ( nmap $BACKUPSERVER -p 22 | grep "open" -q ) ; then
- rsync -avz --numeric-ids -e ssh --delete --delete-excluded --stats --exclude-from="$EXCLUDES" $BACKUPDIR $TARGETUSER@$BACKUPSERVER:$TARGETDIR
- else
- echo $BACKUPSERVER > /dev/null;
- fi
lg
[tabmenu]
[tab='Werbung in eigener Sache']
Du suchst einen Instant Messenger dessen Verbindung voll verschlüsselt ist? Weiterhin soll er mit anderen Instant Massenging Protokollen verknüpfbar sein? Außerdem möchtest du weltweit erreichbar sein (ähnlich icq und msn)? - Dann schick mir Post und erhalte ein unverbindliches, auf alle Fälle kostenloses, Angebot:
[Blockierte Grafik: http://easy-scripting.net/icon/vCollection/pmEmptyS.png]
[tab='Vorstellung']
NurPech
[tab='meine Tutorials']
[subtab='C#']
[subtab='PHP']
[/tabmenu]
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von [Blockierte Grafik: http://i.creativecommons.org/l/by-nc-nd/3.0/80x15.png] verwendet werden
[tab='Werbung in eigener Sache']
Du suchst einen Instant Messenger dessen Verbindung voll verschlüsselt ist? Weiterhin soll er mit anderen Instant Massenging Protokollen verknüpfbar sein? Außerdem möchtest du weltweit erreichbar sein (ähnlich icq und msn)? - Dann schick mir Post und erhalte ein unverbindliches, auf alle Fälle kostenloses, Angebot:
[Blockierte Grafik: http://easy-scripting.net/icon/vCollection/pmEmptyS.png]
[tab='Vorstellung']
NurPech
[tab='meine Tutorials']
[subtab='C#']
[subtab='PHP']
[/tabmenu]
Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von [Blockierte Grafik: http://i.creativecommons.org/l/by-nc-nd/3.0/80x15.png] verwendet werden