Сервер: резервное копирование и выгрузка в Dropbox
Первым делом всегда-всегда-всегда нужно заботиться о резервной копии. Вариантов огромное множество, но лично я написал для себя простой и понятный скрипт для ежесуточного запаковывания данных с любого сервера, в том числе и shared-хостинга.
На следующий день все БД, сайты и системные директории будут скопированы и аккуратно разложены по разным файлам — это очень удобно. Также, при архивировании можно указывать условия. Например, я пропускаю все сайты от modx-test.com, по регулярному выражению ^s[0-9].
Обратите внимание на удаление старых бэкапов. По умолчанию я это отключил, нужно активировать самостоятельно, после проверки.
Если удалите что-нибудь нужное (как я, пока писал скрипт) — это не мои проблемы.
Получается вот такая картина:
Данная инструкция является очень вольным переводом этой статьи.
1. Качаем нужную версию для сервера.
2. Распаковываем
Пока не добавите — он так и будет выдавать эту ссылку. После добавления перезапускаем сервис (ctrl+c для прекращения работы) и мы должны увидеть "Client successfully linked, Welcome!"
4. Все, ваши файлы уже начинают синхронизироваться.
5. Устанавливаем Dropbox как службу. Для этого, от рута выполняем
Очень полезная ссылка по работе с консольным Dropbox.
#!/bin/bash
USER=mysqlroot
PASSWORD=mysqlrootpass
BACKUP=/home/bezumkin/Backup
OLD=7 # Сколько дней хранить бэкапы
# Создаем директорию для сегодняшнего бэкапа
DIR=$BACKUP/`date '+%Y-%m-%d'`
mkdir $DIR
cd $DIR
# Сохраняем базы данных
for i in `mysql -u $USER -p$PASSWORD -e'show databases;' | grep -v information_schema | grep -v Database`;
do
# Не обрабатываем служебные БД и все БД сайтов modx-test.com, у них имена типа s1234.
if [[ "$i" != "mysql" && "$i" != "performance_schema" && ! "$i" =~ ^s[0-9] ]]
then mysqldump --skip-lock-tables -u$USER -p$PASSWORD $i | bzip2 -c > www-$i.sql.bz2;
fi
done
# Сохраняем системные директории
tar -cjf sys-etc.tar.bz2 /etc/
tar -cjf sys-log.tar.bz2 /var/log/
tar -cjf sys-root.tar.bz2 /root/
# Сохраняем сайты
for i in `ls /var/www/`;
do
# Обрабатываем все, кроме сайтов modx-test.com
if [[ ! "$i" =~ ^s[0-9] ]]
then tar -cjf www-$i.tar.bz2 /var/www/$i --exclude=core/cache/*;
fi
done
# Чистим старые логи и бэкапы
find /var/log -type f \( -name "*.gz" -o -name "*.1*" \) -exec rm '{}' \;
# Если эта команда верно показывает старые директории после бэкапа - расскомментируйте следующую
find $BACKUP/* -maxdepth 0 -ctime $OLD -exec echo '{}' \;
# Эта команда удаляет старые резервные копии, и я ее закомментировал на всякий случай.
#find $BACKUP/* -maxdepth 0 -ctime $OLD -exec rm -r '{}' \;Этот скрипт нужно сохранить в файл, и добавить в cron.На следующий день все БД, сайты и системные директории будут скопированы и аккуратно разложены по разным файлам — это очень удобно. Также, при архивировании можно указывать условия. Например, я пропускаю все сайты от modx-test.com, по регулярному выражению ^s[0-9].
Обратите внимание на удаление старых бэкапов. По умолчанию я это отключил, нужно активировать самостоятельно, после проверки.
Если удалите что-нибудь нужное (как я, пока писал скрипт) — это не мои проблемы.
Получается вот такая картина:
root@bezumkin:~/Backup/2012-10-10# ls ./ -lsh
total 1.3G
668K -rw-r--r-- 1 root root 663K Oct 10 10:01 sys-etc.tar.bz2
152K -rw-r--r-- 1 root root 147K Oct 10 10:07 sys-log.tar.bz2
7.5M -rw-r--r-- 1 root root 7.5M Oct 10 10:07 sys-root.tar.bz2
160K -rw-r--r-- 1 root root 154K Oct 10 10:05 www-***.sql.bz2
59M -rw-r--r-- 1 root root 59M Oct 10 10:08 www-***.tar.bz2
192K -rw-r--r-- 1 root root 187K Oct 10 10:05 www-***.sql.bz2
48M -rw-r--r-- 1 root root 48M Oct 10 10:09 www-***.tar.bz2
и так далее...
Для выгрузки бэкапов я использую Dropbox, который самостоятельно мониторит директорию с бэкапами и синхронизирует данные с домашним сервером.Dropbox
Данная инструкция является очень вольным переводом этой статьи.
1. Качаем нужную версию для сервера.
wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86" или
wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86_64"Если не знаете, что у вас за ОС, выполните команду uname -aУ меня вот такой вывод: Linux bezumkin 3.1.0-1.2-xen #1 SMP Wed Dec 7 19:01:22 MSK 2011 i686 GNU/Linuxi686 — это 32 битная ОС.2. Распаковываем
tar -xzvf dropbox.tar.gz3. Запускаем~/.dropbox-dist/dropboxdВ первый раз он выведет ссылку на сервис, которую вам надо открыть у себя на компе и добавить этот сервер в число компьютеров аккаунта.Пока не добавите — он так и будет выдавать эту ссылку. После добавления перезапускаем сервис (ctrl+c для прекращения работы) и мы должны увидеть "Client successfully linked, Welcome!"
4. Все, ваши файлы уже начинают синхронизироваться.
5. Устанавливаем Dropbox как службу. Для этого, от рута выполняем
sudo wget -O /etc/init.d/dropbox "https://gist.github.com/bezumkin/6712351/raw/108fc8af551cb4fdf7cdd08b891a45f405d283dc/dropbox" && sudo chmod +x /etc/init.d/dropboxЗатем меняем в /etc/init.d/dropbox юзера для запуска (там где написано «user1 user2»), сохраняем и делаемsudo update-rc.d dropbox defaults6. Запускаем sudo service dropbox startУ Dropbox есть консольная утилита для работы, dropbox.py нужно ее скачать и сделать исполняемой:wget http://www.dropbox.com/download?dl=packages/dropbox.py -O ~/.dropbox/dropbox.py && chmod +x ~/.dropbox/dropbox.py~/.dropbox/dropbox.py help
Note: use dropbox help <command> to view usage for a specific command.
status get current status of the dropboxd
help provide help
puburl get public url of a file in your dropbox
stop stop dropboxd
running return whether dropbox is running
start start dropboxd
filestatus get current sync status of one or more files
ls list directory contents with current sync status
autostart automatically start dropbox at login
exclude ignores/excludes a directory from syncingС ее помощью, можно настроить синхронизацию более гибко (нам же нужна только директория с бэкапами?). Для этого есть параметр exclude.~/.dropbox/dropbox.py help exclude
dropbox exclude [list]
dropbox exclude add [DIRECTORY] [DIRECTORY] ...
dropbox exclude remove [DIRECTORY] [DIRECTORY] ...
"list" prints a list of directories currently excluded from syncing.
"add" adds one or more directories to the exclusion list, then resynchronizes Dropbox.
"remove" removes one or more directories from the exclusion list, then resynchronizes Dropbox.
With no arguments, executes "list".
Any specified path must be within Dropbox.Ну и понятно, что в скрипте резервного копирования нужно поменять BACKUP на директорию внутри Dropbox.Очень полезная ссылка по работе с консольным Dropbox.
Комментарии: 58
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Packages, как мне кажется, лучше оставлять — там ведь могут лежать и уникальные пакеты, которых нет в репозитории.
Для более конкретных цифр полная бэкап сайта весил ~100 Мб, после исключения трёх директорий ~40Мб.
Лично я руками чищу такие старые пакеты, периодически.
ПашокСделал так для любителей тупого копипаста.
Оно еще проще чем мой скрипт? Быстрее ставится/настраивается?
Зачем мне какое-то незнакомое приложение, если я могу простым скриптом решить свои задачи?
Изучать дольше, чем писать свой скрипт заново.
Можно, конечно, вызывать mysqldump на удаленных серверах и т.п. Но это уже навороты.
У меня самописных бекапилок тоже было не мало под каждый проект. В результате пришел к этому скрипту и больше ничего не изобретаю давно. ;)
а вот за то что поделились своим способом спасибо )
Нужно добавить ключ P при архивации. И использовать его при распаковке.
В результате архивы сайтов при распаковке избавляются от вложенности "/var/www/" и распаковываются сразу в папку со своим именем.
Комментарий мне пришлось изменить, так как нужно использовать тег code для оформления частей скриптов или запросов. Удобнее читать.
mysqldump --skip-lock-tables -u$USER -p$PASSWORD $i | bzip2 -c > www-$i.sql.bz2;
fi
--add-drop-table
then mysqldump --skip-lock-tables -u$USER -p$PASSWORD --add-drop-table $i | bzip2 -c > www-$i.sql.bz2;
Я всегда add-drop-table делаю, так удобно.
Василий, а не подскажите, как удалить dropbox или как заменить аккаунт dropbox?
Точно не помню, проще будет погуглить.
library.linode.com/securing-your-server#sph_creating-a-firewall
порт 17500 должен вообще быть наглухо заблокирован.
Если да, пожалуйста, подскажите как изменить скрипт.
Дело в том, что архивы, созданные скриптом почему-то не открываются:
«Архив поврежден или имеет неизвестный формат», пробовал WinRAR, 7-zip и TotalCommander.
С бекапами sql все в норме.
на
Но вот процесс восстановления у меня как-то через зад всегда проходит.
Можешь рассказать как по фэншую развернуть бэкап, чтобы быстро и правильно?
Появилась не понятная проблема, когда надо восстановить сайт из рез.копии выплывает белый экран.
То есть берем бд, заливаем, все хорошо. Берем архив с файлами, достаем от туда сайт, ставим в нужную директорию, меняем конфиг файлы, назначаем чмоды и белый экран, что в админке, что на фронте…
Если к этой же бд (из рез. копии) залить файлы из директории, без архивации, то все работает, если архивировать в zip, то так же все работает, а вот с tar.bz2 не понятная проблема.
В чем может быть дело, куда копать?
Сайт не работал демонстрировал белый экран, но как только я с рабочего сайта перекинул в папку core/xpdo/cache все файлы — все заработало.
Василий, в чем может быть проблема, может при бэкапе не нужно чистить кэш xpdo?
Во всех инструкциях пишут чистить только /core/cache/ — про xpdo речи нет.
А то, что директории cache/* пропускается — это моя ошибка, наверное =) Хотел пропустить только /core/cache и не подумал про другие.
raw.github.com/gist/2347727/108fc8af551cb4fdf7cdd08b891a45f405d283dc/dropbox
эта 404 выдает.
Пишет:
Я тоже обновил файлик, не знаю, что случилось.
Кому интересно, вот инструкция: http://help.yandex.ru/disk/cli-clients.xml
bash: ./backup: /bin/bash^M: bad interpreter: No such file or Directory
причем файл кидал и запускал с разных мест и эффект тот же…
Кто то сталкивался с такой проблемой?
и в статусе (sudo service dropbox) пишет что сервис от имени такого то пользователя не запущен.
Как она решается? В Google смотрел и пока ничего толкового не нашел…
Советуют в файле /etc/init.d/dropbxox в строке DEAMON=.dropbox-dist/dropbox заменить на DEAMON=.dropbox-dist/dropboxd
пробовал и ничего не вышло из этого