Cronjob Backup Script

Deutschsprachiger Support für CMS Made Simple
Post Reply
nockenfell
Power Poster
Power Poster
Posts: 751
Joined: Fri Sep 12, 2008 2:34 pm

Cronjob Backup Script

Post by nockenfell »

Je nach Hostinganbieter, gibt es die Möglichkeit Scripts per Cronjob laufen zu lassen. Für Backups setze ich dieses Script hier ein:

http://www.camma.ch/2009/06/28/bash-script-zum-erstellen-eines-file-und-mysql-backup-mit-ftp-upload/

Es ermöglicht das Backup der MySQL DB, der Files und speichert diese danach auf einen FTP Server. Bei mir zuhause steht eine Synology-Box die dafür bestens geeignet ist.

Code: Select all

#!/bin/sh
# Website + MySQL backup script
# Full backup day - Sun (rest of the day do incremental backup)
# Copyright (c) 2005-2006 nixCraft <http://www.cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# Modified June 2009 by BlatterTech Informatik www.blattertech.ch
#
# Restore Database Backup
# gunzip mybackup.sql.gzip
# mysql -u USER -p dbname < mybackup.sql
#
# Restore Files
# You need to restore the last full backup first ($FULLBACKUP day)
# followed by each of the subsequent incremental backups to the
# present day in the correct order.
#
# ---------------------------------------------------------------------

### Backp Name ###
BACKUPSET="Backup of Website xy"
SHORTNAME="websitexy"

### System Setup ###
DIRS="/home/path/to/files /home/path/to/other/files"
BACKUP=/tmp/backup.$$
NOW=$(date +"%Y%m%d")
SCRIPTPATH=`dirname $0`
INCFILE="$SCRIPTPATH/$SHORTNAME-tar-inc-backup.dat"
DAY=$(date +"%u")
# 1=Mon, 2=Tue, 3=Wed, ..
FULLBACKUP="2"

### MySQL Setup ###
MUSER="mysqluser"
MPASS="mysqlpassword"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"

### FTP server Setup ###
FTPD="/path/on/ftpserver"
FTPU="ftpuser"
FTPP="ftppassword"
FTPS="your.ftpserver.com"
NCFTP="$(which ncftpput)"

### Other stuff ###
EMAILID="your@email.com"

### Start Backup for file system ###
[ ! -d $BACKUP ] && mkdir -p $BACKUP || :

### See if we want to make a full backup ###
if [ ! -f $INCFILE ]; then
  FTPD="$FTPD/full"
  FILE="$SHORTNAME-files-full-$NOW.tar.gz"
  tar  -g $INCFILE  -zcvf $BACKUP/$FILE $DIRS
elif [ "$DAY" == "$FULLBACKUP" ]; then
  FTPD="$FTPD/full"
  FILE="$SHORTNAME-files-full-$NOW.tar.gz"
  tar -zcvf $BACKUP/$FILE $DIRS
else
  FTPD="$FTPD/incremental"
  i=$(date +"%Hh%Mm%Ss")
  FILE="$SHORTNAME-files-i-$NOW-$i.tar.gz"
  tar -g $INCFILE -zcvf $BACKUP/$FILE $DIRS
fi

### Start MySQL Backup ###
# Get all databases name
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
 FILE=$BACKUP/$SHORTNAME-mysql-$db.$NOW-$(date +"%T").sql.gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db |  $GZIP -9 > $FILE
# FILE=$BACKUP/$SHORTNAME-mysql-$db.$NOW-$(date +"%T").sql.bz2
# $MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db |  bzip2 -cq9  > $FILE
done

### Make md5 Sum ###
$(which md5sum) -b $BACKUP/* >$BACKUP/backup$NOW-$i.md5

### Dump backup using FTP ###
#Start FTP backup using ncftp
#If ncftp not aviable, use ftp:
#ftp -inv $FTPS <<END_SCRIPT
#quote USER $FTPU
#quote PASS $FTPP
ncftp -u"$FTPU" -p"$FTPP" $FTPS<<EOF

mkdir $FTPD
mkdir $FTPD/$NOW
cd $FTPD/$NOW
lcd $BACKUP
mput *
quit
EOF

### Find out if ftp backup failed or not ###
if [ "$?" == "0" ]; then
 rm -f $BACKUP/*
else
 T=/tmp/backup.fail
 echo "Date: $(date)">$T
 echo "Hostname: $(hostname)" >>$T
 echo "Backup Set: $BACKUPSET"
 echo "Backup failed" >>$T
 mail  -s "BACKUP FAILED" "$EMAILID" <$T
 rm -f $T
fi
Folgende Parameter müssen angepasst werden:

BACKUPSET
SHORTNAME
DIRS
FULLBACKUP
MUSER
MPASS
MHOST"
FTPD
FTPU
FTPP
FTPS
EMAILID

Das Script wird im Cronjob mit "sh /pfad/zum/script/backup.sh" eingetragen. Von den Dateien wird jede Woche am FULLBACKUP Tag ein Vollbackup gemacht. Dazwischen werden incrementelle Backups erstellt. Damit bleibt die Datenmenge im Rahmen. Was dem Script noch fehlt ist ein automatisches Löschen der alten Backups. Alles kann man allerdings ja auch nicht haben. Wenn einer von euch das noch programmiert, wäre das Script komplett.
[this message is written with 100% recycled bits]
Post Reply

Return to “German - Deutsch”