Елементарний Bash скрипт для резервного копіювання даних
Привіт хабралюди, зараз я розповім якомога трохи автоматизувати рутину роботу з підготовки бекапів.
У даному випадку, ми не будемо використовувати потужні програми, або навіть цілі системи для резервного копіювання даних, обмежимося найдоступнішим, що у нас є. А саме – 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 /hometail -n1awk ''`" 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 Після успішного завершення скрипту, ми побачимо наступне:
$ 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:
У результаті наші бекапи складаються в каталог, який ви вказали, + резервні копії лежать у каталогах іменованих за датою.
п.с. дякую opkdx за хінт при написанні.
Хардкорна конфа за С++. Ми запрошуємо лише профі.