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: