Блог Леопарда

Все возможно, невозможное делается дольше

Элементарный Bash скрипт для резервного копирования данных

Сделаем немного автоматизировать рутиную работу по подготовке бэкапов.

В данном случае, мы не будем использовать мощные программы, или даже целые системы для резервного копирования данных, ограничимся самым доступным что у нас есть. А именно — Bash скриптом.

Что должен выполнять наш скрипт?

Бэкапить веб проект, а именно:
— Делать резервную копию базы MySQL.
— Делать резервную копию файлов.
— Структурировать это.

И так, вот наш скрипт:

  1.  
  2. #!/bin/bash
  3. PROJNAME= #Имя проекта
  4. CHARSET= #Кодировка базы данных (utf8)
  5. DBNAME= #Имя базы данных для резервного копирования
  6. DBFILENAME= #Имя дампа базы данных
  7. ARFILENAME= #Имя архива с файлами
  8. HOST= #Хост MySQL
  9. USER= #Имя пользователя базы данных
  10. PASSWD= #Пароль от базы данных
  11. DATADIR= #Путь к каталогу где будут храниться резервные копии
  12. SRCFILES= #Путь к каталогу файлов для архивирования
  13. PREFIX=`date +%F` #Префикс по дате для структурирования резервных копий
  14.  
  15. #start backup
  16. echo "[--------------------------------[`date +%F--%H-%M`]——————————–]"
  17. echo "[----------][`date +%F--%H-%M`] Run the backup script…"
  18. mkdir $DATADIR/$PREFIX 2> /dev/null
  19. echo "[++--------][`date +%F--%H-%M`] Generate a database backup…"
  20. #MySQL dump
  21. mysqldump –user=$USER –host=$HOST –password=$PASSWD –default-character-set=$CHARSET $DBNAME > $DATADIR/$PREFIX/$DBFILENAME-`date +%F–%H-%M`.sql
  22. if [[ $? -gt 0 ]];then
  23. echo "[++--------][`date +%F--%H-%M`] Aborted. Generate database backup failed."
  24. exit 1
  25. fi
  26. echo "[++++------][`date +%F--%H-%M`] Backup database [$DBNAME] – successfull."
  27. echo "[++++++----][`date +%F--%H-%M`] Copy the source code project [$PROJNAME]…"
  28. #Src dump
  29. tar -czpf $DATADIR/$PREFIX/$ARFILENAME-`date +%F–%H-%M`.tar.gz $SRCFILES 2> /dev/null
  30. if [[ $? -gt 0 ]];then
  31. echo "[++++++----][`date +%F--%H-%M`] Aborted. Copying the source code failed."
  32. exit 1
  33. fi
  34. echo "[++++++++--][`date +%F--%H-%M`] Copy the source code project [$PROJNAME] successfull."
  35. echo "[+++++++++-][`date +%F--%H-%M`] Stat datadir space (USED): `du -h $DATADIR | tail -n1`"
  36. echo "[+++++++++-][`date +%F--%H-%M`] Free HDD space: `df -h /home|tail -n1|awk ‘{print $4}’`"
  37. echo "[++++++++++][`date +%F--%H-%M`] All operations completed successfully!"
  38. exit 0
  39.  

Запускать можно парой способов:

— Простой запуск: ./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. test@serv:~$ sudo sh backup.sh
  3. [——————————–[2009-02-1412-28]——————————–]
  4. [———-][2009-02-1412-28] Run the backup script…
  5. [++——–][2009-02-1412-28] Generate a database backup…
  6. [++++——][2009-02-1412-29] Backup database [images] – successfull.
  7. [++++++—-][2009-02-1412-29] Copy the source code project [itmages]
  8. [++++++++–][2009-02-1412-29] Copy the source code project [itmages] – successfull.
  9. [+++++++++-][2009-02-1412-29] Stat datadir space (USED): 1,3G /home/test/backup
  10. [+++++++++-][2009-02-1412-29] Free HDD space: 49G
  11. [++++++++++][2009-02-1412-29] All operations completed successfully!
  12. test@serv:~$
  13.  

В итоге наши бэкапы складываются в каталог который вы указали, + резервные копии лежат в каталогах именованых по дате.

via Habr

Комментарии закрыты.