Архив заметок

Бэкап MySQL+FS+CRON+FTP. Обновление.

Просмотров: 4094Комментарии: 0
FreeBSDMySQL

Когда-то была запилена статья про резервное копирование бд, некоторых папок на фтп. Помогал этому добру планировщик.

Предыдущая статейка актуальная. В новой публикации я немного извратился с уровнем компрессии. Писать много не буду, не зачем. Выкладываю код скриптов на обозрение. Если будет желание, поделитесь своими наработками.

Итак:

mysqlbackup.sh
#!/bin/sh
MUSER="root"
MPASS="пароль"
MHOST="localhost"
FTPD="папка"
FTPU="пользователь"
FTPP="пароль"
FTPS="адрес ftp сервера"
TAR="$(which tar)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
FTP="$(which ftp)"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
DEST="./db_backup"
MBD="$DEST"
HOST="$(hostname)"
NOW="$(date +"%Y%m%d")"
# DO NOT BACKUP these databases, delemiter SPACE
IGN="information_schema mysql performance_schema"
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do

    skipdb=-1
    if [ "$IGN" != "" ]; then
        for i in $IGN
        do
            [ "$db" == "$i" ] && skipdb=1 || :
            [ "$db" == "$i" ] && skipdb=1 || :
        done
    fi

    if [ "$skipdb" == "-1" ] ; then
        MBD="$DEST/$db"
        [ ! -d $MBD ] && mkdir -p $MBD || :
        FILE="$MBD/$NOW.sql.gz"
            $MYSQLDUMP --opt -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
        FNUM="$(find $MBD/* | wc -l)"
        if [ $FNUM -ge 0 ] ; then
            find $MBD/* -type f -mtime 20 -exec rm -rf {} \;
        fi
    fi

done
ARCHIVE=$DEST
$TAR -cJf - $ARCHIVE | xz -9 -c - > mysql-$NOW.tar.gz
cd $DEST
DUMPFILE=mysql-$NOW.tar.gz
$FTP -n $FTPS <<END_SCRIPT
quote USER $FTPU
quote PASS $FTPP
prompt off
binary
cd $FTPD
quote PASV
mput $DUMPFILE
quit
END_SCRIPT
rm -rf $ARCHIVE $DUMPFILE

И папки:

backup-fs.sh
#!/bin/sh
FTPD="папка на фтп"
FTPU="пользователь"
FTPP="пароль"
FTPS="адрес фтп"
TAR="$(which tar)"
GZIP="$(which gzip)"
FTP="$(which ftp)"
FILE="/etc /usr/local/etc /usr/local/www/apache24/data"
NAME=$(date +"%d%m%y")
$TAR -cJPf - ${FILE} | xz -7 -c - > server-fs-$NAME.tar.xz
DUMPFILE=server-fs-$NAME.tar.xz
$FTP -n $FTPS <<END_SCRIPT
quote USER $FTPU
quote PASS $FTPP
prompt off
binary
cd $FTPD
quote PASV
mput $DUMPFILE
quit
END_SCRIPT
rm -rf $DUMPFILE

Ну и cron:

# crontab -l
0       2       *       *       *       /bin/sh    /root/backup-mysql.sh
0       3       *       *       *       /bin/sh    /root/backup-fs.sh

Вы можете войти под своим логином или зарегистрироваться на сайте.