Бекап вашего сайта на локальный компьютер

+30
3.12K
Наверно нет особой необходимости напоминать каждый раз, что бекап своего проекта должен делаться ежедневно!
Но как показала практика, не все воспринимают это как должное, а некоторые думают, что их такая напасть, как потеря проекта некогда не коснется. Но мне кажется, никто не хочет заводить себе лишние седины. И от того, как вы относитесь к своему детищу, зависит ваша счастливая жизнь и хорошее настроение пользователей. Но не буду разводить воду, перейду сразу к практике



Для того, чтобы сохранять каждый день автоматически на свой компьютер бекапы с вашего сервера, нужно сделать несколько шагов. Хочу заметить, что для успешного авто-бекапа, у вас должен быть минимум VPS и доступ к SSH.

1. Бекап вашего проекта. Нужно создать простенький скрипт, который будет ежедневно бекапить ваши проекты. У кого это уже сделано, могут этот пункт пропустить и перейти сразу к шагу 2.

Для тех кто не знает как это сделать приведу небольшой скриптик, который будет делать бекапы.
Итак, создаем на вашем сервере файл backup.sh[/b,]обязательно в unix формате. И вставляем туда этот код

  1. #!/bin/sh
  2. MYSQLU=пользователь базы данных
  3. MYSQLP=пароль от этой базы
  4. MYSQLD=путь куда будет сохранятся бекапа БД, например /var/backup/mysql/ естественно по этому пути надо создать папку и расшарить 755
  5. FILEW=здесь указать какие файлы бекапить, например /var/www/имя_пользователя/data/www в данном случае это все домены
  6. FILED=здесь указываем путь куда будет складываться бекап, например /var/backup/file/
  7. echo "Backup DataBase:"
  8. databases=(`echo 'show databases;' | mysql -u${MYSQLU} -p${MYSQLP} | grep -v ^Database$ | grep -v ^information_schema$ | grep -v ^mysql$ | grep -v ^performance_schema$`)
  9. for d in "${databases[@]}"; do
  10. if [[ $d != *'temp'* && $d != *'tmp'* && $d != *'test'* && $d != *'file'* && $d != *'default'* ]]
  11. then
  12. if [ -d ${MYSQLD}${d} ]
  13. then
  14. echo " " > /dev/null
  15. else
  16. mkdir -p ${MYSQLD}${d}
  17. fi
  18. FILES=${MYSQLD}${d}"/"${d}"-"`date "+%Y-%m-%d-%H-%M"`".gz"
  19. mysqldump -u${MYSQLU} -p${MYSQLP} ${d} | gzip -c > ${FILES}
  20. echo " "${d}" ("`du -sh ${FILES} | awk '{ print $1}'`")"
  21. fi
  22. done
  23. echo "Backup Files:"
  24. for d in $( ls ${FILEW}); do
  25. if [[ $d != *'temp'* && $d != *'tmp'* && $d != *'test'* && $d != *'file'* && $d != *'ftp'* && $d != *'default'* ]]
  26. then
  27. if [ -d ${FILED}${d} ]
  28. then
  29. echo " " > /dev/null
  30. else
  31. mkdir -p ${FILED}${d}
  32. fi
  33. FILES=${FILED}${d}"/"${d}"-"`date "+%Y-%m-%d-%H-%M"`".tar.gz"
  34. tar cpfz ${FILES} ${FILEW}${d} > /dev/null 2>&1
  35. echo " "${d}" ("`du -sh ${FILES} | awk '{ print $1}'`")"
  36. fi
  37. done
Как видите скрипт совсем простенький, комментариями подписано, что и где вам нужно подставить свои значения.
Это самый простой код который бекапит БД и файлы по крону, как установите в cron так и будет работать.

Далее сохраняем этот файлик к себе на сервер, например можно сюда. /usr/local/bin/backup.sh
Осталось в cron прописать команду на исполнения скрипта раз в сутки. /bin/bash /usr/local/bin/backup.sh >/dev/null 2>&1
Теперь запустите крон и проверьте, работает ли, создаются ли папки в том месте, где вы прописали скрипту. Хочу заметить, что если сайт большой, крон бекапить файлы может некоторое время и в папке файлы не сразу появятся. Если, что-то не работает, проверьте пути, пропишите правильную команду крон для своего сервера. И посмотрите ваш интерпретатор, возможно #!/bin/sh нужно удалить из скрипта.

МИнусы этого скрипта: Он не ограничевает бекапы, тоесть будет каждый день складывать бекапы на сервере не удаляя старые. Если проекты большие. Возможна нехватка места на сервере. Или придется раз в неделю удалять старые бекапы в ручную.

Итак, бекап мы настроили, переходим к шагу 2.

2. Бекап сайта на свой локальный компьютер.

Для того, чтобы нам осуществить задуманное, нам придется обратиться к BitTorrent Sync, система автоматической синхронизации по протоколу P2P.

Если зайдем на оф. сайт, то увидим небольшую аннотация.

Компания BitTorrent Inc предлагает использовать peer-to-peer (P2P) protocol для синхронизации файлов. Этот протокол является очень эффективным для передачи больших файлов между несколькими устройствами, и очень похож на мощный протокол, используемый такими приложениями, как BitTorrent и μTorrent. В котором данные делятся на куски от каждого из устройств, а программное обеспечение выбирает оптимальный алгоритм для максимальной скорости загрузки.


Чтож, нам это подходит. Для этого нам понадобится установить на сервер приложение BtSync и еще одно windows приложение на ваш компьютер. Начнем с сервера. Для этого нам понадобиться доступ по SSH.

В первую очередь, нам нужно создать директорию на нашем сервере.

  1. mkdir /usr/local/btsync
переходим в наш каталог

  1. cd /usr/local/btsync
Скачиваем и распаковываем файл

  1. wget http://btsync.s3-website-us-east-1.amazonaws.com/btsync_i386.tar.gz
  1. tar -xzvf btsync_i386.tar.gz
  1. rm -f btsync_i386.tar.gz
Теперь запустим это чудо.

  1. /usr/local/btsync/btsync
Теперь набираем в адресной строке адрес_вашего_сервера:8888/ и увидим примерно следущее

Иллюстрация

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

И не забудьте в настройках выбрать русский язык.
Иллюстрация

Теперь, в настройках, если вы пользуетесь скриптом бекапа приведенным выше, выставите 2 папки file и MyqSl и система начнет индексацию файлов.

Иллюстрация


Не забудьте сгенерировать ключ, так как он будет нужен нам для windows приложения.

Для компьютера скачиваем программу тут www.bittorrent.com/intl/ru/sync/downloads На диске D например создайте папки в которые будет загружаться бекап, вводим сгенерированный секретный ключ на сервере в режиме чтения, и нажимаем ок. Все теперь все ваши бекапы автоматически будут скачивать с сервера все бекапы на домашний компьютер.

Иллюстрация

Ну вот и все, теперь бекапы будут каждый день с сервера загружаться в компьютер. Конечно, я мог какую-то мелоч пропустить, так как я ставил в декабре это все у себя и статью эту я публиковал на другом форуме, но основные моменты все прописаны. На самом деле нечего сложного.

Если написано, не очень красиво, простите, ночь, устал.
-1
Reborn Reborn 8 лет назад #
Версия ос ???
0
artscripts artscripts 8 лет назад #
у меня Centos 6, на нем и тестил.
-1
Reborn Reborn 8 лет назад #
Как бе то это делается отдельно , db и fs впринципе.
0
artscripts artscripts 8 лет назад #
Зачем отдельно, если один скрипт, может выполнить и то и другое? Экономия ресурсов?
-1
Reborn Reborn 8 лет назад #
Экономия дискового пространства, т к сайты весят поболее бд. Хотя можно настроить и на отдельные папки
0
Reborn Reborn 8 лет назад #
перепост это конечно круто, перейдем к практике:
Утилита mysqldump и шпаргалка по параметрам
db_mydb.sh
Код PHP:
  1. #!/bin/sh
  2. MUSER="бд юзер" #root пользователь MySQL
  3. MPASS="бд пасс" #пароль пользователя root MySQL
  4. DPATCH="/xxx/xxx/db/db_name.$(date +%H-%M_%d.%m.%y).sql" #Указываем директорию и имя файла куда будем выводить дамп значения
  5. #%H-час %M-минута %d-день %m-месяц %y-год
  6. DBGZIP="/xxx/xxx/db/my_db_name.$(date +%H-%M_%d.%m.%y).tar.gz" #Указываем имя и местоположения нашего архива с дампом
  7. FTPU="xxx" #Имя пользователя FTP
  8. FTPP="xxx" #Пароль пользователя FTP
  9. FTPS="ip xx.xx.xx.xx" #Сервер FTP например ftp.example.com или 192.168.1.1
  10. FTPF="/db" #Директория FTP например /home/backup
  11. mysqldump -u$MUSER -p$MPASS dbuser > $DPATCH
  12. tar czfP $DBGZIP $DPATCH # сжимаем наш дамп
  13. rm -rf $DPATCH # удаляем дамп с расширением SQL
  14. ncftpput -m -u$FTPU -p$FTPP $FTPS $FTPF $DBGZIP # Загружаем архив на удаленный FTP сервер
  15. rm -rf $DBGZIP # удаляем дамп с расширением gz
Это мы сделали бекап бд.

Далее бекап файлов:
Код PHP:
  1. #!/bin/sh
  2. DPATCH="/www" #Указываем директорию и имя файла куда будем выводить дамп значения
  3. #%H-час %M-минута %d-день %m-месяц %y-год
  4. DBGZIP="/var/backups/db/sites.$(date +%H-%M_%d.%m.%y).tar.gz" #Указываем имя и местоположения нашего архива с дампом
  5. FTPU="xxx" #Имя пользователя FTP
  6. FTPP="xxx" #Пароль пользователя FTP
  7. FTPS="xx.xx.xx.xx" #Сервер FTP например ftp.example.com или 192.168.1.1
  8. FTPF="/db" #Директория FTP например /home/backup
  9. tar czfP $DBGZIP $DPATCH # сжимаем наш дамп
  10. ncftpput -m -u$FTPU -p$FTPP $FTPS $FTPF $DBGZIP # Загружаем архив на удаленный FTP сервер
  11. FROM="From: My-Backup-Script " # От кого сообщение
  12. TO="To: [email protected] " # Кому сообщение
  13. SUBJECT="Subject: Backup complite" # Тема сообщения
  14. BODY="Backup complite $(date +%H-%M_%d.%m.%y) file upload to $FTPS" # Сообщаем что архив загружен на FTP
  15. BODY1="Thank you" # Ну и без оживления машины не обошлось, добавил от себя, хотя можно было сделать это переводом строки
  16. BODY2="Wait new message" #
  17. echo $FROM >> message.tmp # Передаем значения в message.tmp
  18. echo $TO >> message.tmp
  19. echo $SUBJECT >> message.tmp
  20. echo $BODY >> message.tmp
  21. echo $BODY1 >> message.tmp
  22. echo $BODY2 >> message.tmp
  23. /usr/sbin/sendmail -t < message.tmp # Отправляем message.tmp через sendmail
  24. rm -rf $DBGZIP # удаляем дамп с расширением gz
Далее установить ncftp
Код PHP:
  1. apt-get install ncftp
И выполнить по крону 2 эти задачи
+1
artscripts artscripts 8 лет назад #
Консольный клиент тоже как вариант кстати, но к сожалению, я им пользоваться не пробовал. За пример спасибо.
-1
Reborn Reborn 8 лет назад #
Удобная штука, пользую больше года, раз в день бекап бд и раз в неделю все сайты.
0
AndroS AndroS 8 лет назад #
Сделал все согласно инструкции - файлы с сайтами создаются, но пустые targz-ки, а дампы бд не появляются в папке :(
0
artscripts artscripts 8 лет назад #
Скрипт Полностью рабочий, при выполнении крона выдает ошибку какую-нибудь? Если БД большое или файлов много, tar не сразу заполняется. все зависит от мощностей ваших серверов. Моет стоит подождать немного.
0
artscripts artscripts 8 лет назад #
Да и еще кстати я не помню должен быть слеш / на конце путя или нет, попробуйте поставить или убрать. Так как я на работе, мне сейчас не проверить, как должно быть правильно. И тогда архивы нормально будут создаваться. Попробуйте поставить или убрать / в конце путей.
0
fortunato fortunato 8 лет назад #
а можно скачать и поставить для 64 битной системы Debian?
ссылку тут брать?
http://www.bittorrent.com/intl/ru/sync/downloads
0
fortunato fortunato 8 лет назад #
а так очень круто! попробовал, отлично...давно искал чтото подобное
яндекс.диск ни как не хотел десятки гигабайт синхронизировать...а тут все ок
0
fortunato fortunato 8 лет назад #
блин не идет синхронизация в логах ошибка
UPnP: Could not map UPnP Port on this pass, retrying.
вроде как маршрутизатор мой не поддерживает

и еще у вас старая версия же скачивается
есть более новая (1,9.1 у вас 1.6.2 вроде), и тут мануал есть по установке через репозиторий
http://forum.bittorrent.com/topic/18974-debian-and-ubuntu-server-unofficial-packages-for-bittorrent-sync/
0
fortunato fortunato 8 лет назад #
так и не могу побороть эту долбанную ошибку
UPnP: Could not map UPnP Port on this pass, retrying.

нарыл еще интересные обзоры и faq
http://vasilisc.com/btsync
http://voipinforu.wordpress.com/2013/11/18/bittorrent-sync-faq/
0
fortunato fortunato 8 лет назад #
Разобрался...все дело было в локальном роутере у меня, поставил другой с прошивкой OpenWRT все отлично работает!
0
artscripts artscripts 8 лет назад #
Извиняюсь, давно не был у компьютера, не смог ответить, главное, что разобрались с проблемой. Желаю приятных бекапов :)

Еще от автора

Выезжающие боксы Facebook +Twitter +Вконтакте
Данная модификация шаблона (по другому наверное и не назвать) добавляет два выезжающих бокса Facebook и Twitter и Вконтакте.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.