[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Suche nach einem backup script



Niels Jende wrote:
Hallo zusammen,

ich suche gerade ein simples, kleines backup script mit welchem ich die wichtigsten Files, configs & Dirs eines debian servers sichern kann. Ziel soll sein, dass nach Ausfall des Servers der neue ganz arg flott wieder da ist.
Der Server läuft als reiner MySQL Server und das generierte File soll dann auf einen anderen Server kopiert werden (scp???).

Hat vielleicht einer von Euch so sin Script zur Hand?

Das wäre ganz arg supi

Nix besonderes aber tut was es soll (ist aus einer Sammlung von Skripten die backups machen via scp, nfs, imapsync ...)
Kannst es ja als Vorlage verwenden und noch etwas abwandeln ...
Es erzeugt automatisch eine Liste der installierten Pakete in /etc/apt/pkg.list.

Ich hoffe ich habe alle Zeilenumbrüche des Mailprogramms ausgebügelt - prüf es aber lieber noch mal nach


#!/bin/bash
# unset vars are errors
#set -u
# terminate at first error
#set -e
# verbose
#set -x

# a spaceseppareted list of dirs to back up
declare BACKDIRLIST="/etc";

# the temporary directory
declare -r TEMPDIR="/tmp";

# progs
declare -r BASENAME="/usr/bin/basename";
declare -r SCP="/usr/bin/scp -p";
declare SCPUP="user1@host1.tld:/destination/dir/";
declare -r TAR="/bin/tar";
declare TARFILE="";

declare DATESTR=`date '+%u'`;

declare -i VERBOSE=0;
declare PROGVERBOSE="";

declare -i MYSQLBACKUPDO=0;
declare MYSQLHOST="localhost";
declare MYSQLUSER="root"
declare MYSQLPASSWORD="pass"

declare -i RUNSSHBACKUP=1

declare EXEC_BEFORE="";
declare EXEC_AFTER="";

declare -r CFGDIR="/etc/backup"
declare -r CFGFILE="${CFGDIR}/backup.cfg"

[ -r $CFGFILE ] && . $CFGFILE



# functions
function dsphelp () {
    echo "usage: "`$BASENAME $0`" [-t|-w] -h -m -v";
    echo -e "\t-t:\tadd a timestamp to the name";
    echo -e "\t-w:\tadd weekday as number to the name (default)";
    echo -e "\t-m:\tinclude a mysqldump in the backup";
    echo -e "\t-v:\tverbose output";
    echo -e "\t-d:\tdebug";
    echo -e "\t-h:\tdisplay help";
}

function domysqldump () {
    mysqldump --all-databases --all --complete-insert --add-drop-table \
        -f --allow-keywords -C -Q \
        --host=$MYSQLHOST \
        --password=$MYSQLPASSWORD \
        --user=$MYSQLUSER > /tmp/mysqldump.sql
    BACKDIRLIST=$BACKDIRLIST" /tmp/mysqldump.sql";
}

# parse args
while test $# -gt 0; do
    case "$1" in
    -v)
        VERBOSE=1;
        PROGVERBOSE="-v";
        ;;
    -d)
        VERBOSE=1;
        PROGVERBOSE="-v";
        set -v;
        ;;
    -h)
        dsphelp
        exit 0;
        ;;
    -t)
        DATESTR=`date '+%Y%m%d%H%M'`;
        ;;
    -m)
        MYSQLBACKUPDO=1
        #domysqldump
        ;;
    *)
        echo "unknown param $1";
        dsphelp
        exit 1;
        ;;
    esac
    shift;
done


# disabled if [ $RUNSSHBACKUP -le 0 ]; then
    [ $VERBOSE -ge 1 ] && \
echo "disabled using config var: RUNSSHBACKUP"; exit 0;
fi


#############################################
# start #####################################
#############################################

if [ $MYSQLBACKUPDO -ge 1 ]; then
    domysqldump
fi

if [ -n "$EXEC_BEFORE" -a -r "$EXEC_BEFORE" ]; then
    [ $VERBOSE -ge 1 ] && echo "sourcing $EXEC_BEFORE";
    . "$EXEC_BEFORE"
fi


dpkg --get-selections > /etc/apt/pkg.list

TARFILE=$HOSTNAME"."$OSTYPE"."$HOSTTYPE"."$DATESTR".tgz";
rm -f $TEMPDIR"/"$TARFILE;

$TAR cz $PROGVERBOSE -P -Sp --numeric-owner \
   -f $TEMPDIR"/"$TARFILE  $BACKDIRLIST

if [ -f $TEMPDIR"/"$TARFILE ]; then
    SCPOPT="-q";
    [ $VERBOSE -ge 1 ] && SCPOPT="";
    for f in $SCPUP; do
        $SCP $SCPOPT $TEMPDIR"/"$TARFILE $f
    done
fi


if [ -n "$EXEC_AFTER" -a -r "$EXEC_AFTER" ]; then
    [ $VERBOSE -ge 1 ] && echo "sourcing $EXEC_AFTER";
    . "$EXEC_AFTER"
fi


rm -f $TEMPDIR"/"$TARFILE;
rm -f /tmp/mysqldump.sql;

exit 0;





#### ENDE des scripts


erzeuge in /etc/backup eine Datei
backup.cfg
und setze darin
BACKDIRLIST="/etc";
SCPUP="user1@host1.tld:/destination/dir/";

wenn du ein mysql-backup via mysqldump machen willst:
MYSQLBACKUPDO=1;
MYSQLHOST="localhost";
MYSQLUSER="root"
MYSQLPASSWORD="pass"

chmod 600 /etc/backup/backup.cfg ist dann natürlich Pflicht

wenn du die mysql-daten selber sichern willst (INNODB) und es verkraften kannst das die DB für kurze Zeit down ist, dann setze
EXEC_BEFORE="/etc/backup/mysqlstop.sh"
EXEC_AFTER="/etc/backup/mysqlstart.sh"
BACKDIRLIST="/etc /var/lib/mysql";


wobei
/etc/backup/mysqlstop.sh
/etc/init.d/mysql stop
enthalten sollte
und
/etc/backup/mysqlstart.sh
/etc/init.d/mysql start



Viel Spaß
Klaus

Danke und Gruß
Niels

P.S.: Auf den Servern läuft ein debian Etch


--
Klaus Zerwes
http://zero-sys.net


Reply to: