Bash скрипт для резервного копирования данных
В данном случае, мы не будем использовать мощные программы, или даже целые системы для резервного копирования данных, ограничимся самым доступным что у нас есть. А именно — Bash скриптом.
Что должен выполнять наш скрипт?
Бэкапить веб проект, а именно:
— Делать резервную копию базы MySQL.
— Делать резервную копию файлов.
— Структурировать это.
И так, вот наш скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #!/bin/bash PROJNAME= #Имя проекта CHARSET= #Кодировка базы данных (utf8) DBNAME= #Имя базы данных для резервного копирования DBFILENAME= #Имя дампа базы данных ARFILENAME= #Имя архива с файлами HOST= #Хост MySQL USER= #Имя пользователя базы данных PASSWD= #Пароль от базы данных DATADIR= #Путь к каталогу где будут храниться резервные копии SRCFILES= #Путь к каталогу файлов для архивирования PREFIX=`date +%F` #Префикс по дате для структурирования резервных копий #start backup echo "[--------------------------------[`date +%F--%H-%M`]--------------------------------]" echo "[----------][`date +%F--%H-%M`] Run the backup script..." mkdir $DATADIR/$PREFIX 2> /dev/null echo "[++--------][`date +%F--%H-%M`] Generate a database backup..." #MySQL dump mysqldump --user=$USER --host=$HOST --password=$PASSWD --default-character-set=$CHARSET $DBNAME > $DATADIR/$PREFIX/$DBFILENAME-`date +%F--%H-%M`.sql if [[ $? -gt 0 ]];then echo "[++--------][`date +%F--%H-%M`] Aborted. Generate database backup failed." exit 1 fi echo "[++++------][`date +%F--%H-%M`] Backup database [$DBNAME] - successfull." echo "[++++++----][`date +%F--%H-%M`] Copy the source code project [$PROJNAME]..." #Src dump tar -czpf $DATADIR/$PREFIX/$ARFILENAME-`date +%F--%H-%M`.tar.gz $SRCFILES 2> /dev/null if [[ $? -gt 0 ]];then echo "[++++++----][`date +%F--%H-%M`] Aborted. Copying the source code failed." exit 1 fi echo "[++++++++--][`date +%F--%H-%M`] Copy the source code project [$PROJNAME] successfull." echo "[+++++++++-][`date +%F--%H-%M`] Stat datadir space (USED): `du -h $DATADIR | tail -n1`" echo "[+++++++++-][`date +%F--%H-%M`] Free HDD space: `df -h /home|tail -n1|awk '{print $4}'`" echo "[++++++++++][`date +%F--%H-%M`] All operations completed successfully!" exit 0 |
Запускать можно парой способов:
— Простой запуск: ./backup.sh
— Запуск + запись в лог: ./backup.sh | tee backup.log
— а еще его можно в cron запихать: 00 20 * * 7 root sh /home/bond/backup.sh | tee /home/bond/backup/backup.log
После успешного завершения скрипта, мы увидим следующее:
1 2 3 4 5 6 7 8 9 10 11 | bond@serv:~$ sudo sh backup.sh [--------------------------------[2009-02-14--12-28]--------------------------------] [----------][2009-02-14--12-28] Run the backup script... [++--------][2009-02-14--12-28] Generate a database backup... [++++------][2009-02-14--12-29] Backup database [images] - successfull. [++++++----][2009-02-14--12-29] Copy the source code project [itmages]... [++++++++--][2009-02-14--12-29] Copy the source code project [itmages] - successfull. [+++++++++-][2009-02-14--12-29] Stat datadir space (USED): 1,3G /home/bond/backup [+++++++++-][2009-02-14--12-29] Free HDD space: 49G [++++++++++][2009-02-14--12-29] All operations completed successfully! bond@serv:~$ |
В итоге наши бэкапы складываются в каталог который вы указали, + резервные копии лежат в каталогах именованых по дате.
GNU/Linux Ubuntu Funs