Сделаем немного автоматизировать рутиную работу по подготовке бэкапов.
В данном случае, мы не будем использовать мощные программы, или даже целые системы для резервного копирования данных, ограничимся самым доступным что у нас есть. А именно — Bash скриптом.
Что должен выполнять наш скрипт?
Бэкапить веб проект, а именно:
— Делать резервную копию базы MySQL.
— Делать резервную копию файлов.
— Структурировать это.
И так, вот наш скрипт:
-
-
#!/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
После успешного завершения скрипта, мы увидим следующее:
-
-
test@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/test/backup
-
[+++++++++-][2009-02-14–12-29] Free HDD space: 49G
-
[++++++++++][2009-02-14–12-29] All operations completed successfully!
-
test@serv:~$
-
В итоге наши бэкапы складываются в каталог который вы указали, + резервные копии лежат в каталогах именованых по дате.
via Habr