Backup проекта
Люди делятся на тех кто еще не делает
и тех, кто уже делает бэкапы
Обязательным свойством любого проекта являются резервное сохранение данных. И так, приступим. Допустим все данные у нас хранятся в БД (в моем случае mysql, но если это postgres – отличие будет в одной строчке) и существуют различные файлы загружаемые пользователями. Файлы проекта хранятся в репозитории, поэтому за их сохранность можно не беспокоиться (можно на всякий случай еще сохранять конфиг). Так же понадобится другая машина для сохранения бэкапов, более чем достаточно иметь FTP на другой машине.
UPD: Немного подчищен код и приведен к соответствию соглашениям.
Начнем с сохранения БД:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/sh # Данные для подключения к БД DBUSER="dbuser" DBNAME="dbname" DBPASS="password" # Дата, для именования файла бэкапа в формате YYYY.MM.DD DT=`date '+%Y.%m.%d'` # Временная директория для хранения файлов TEMPDIR="/tmp/backup-"$DT"/" SQLFILE="backup.sql" mkdir $TEMPDIR cd $TEMPDIR mysqldump --user=$DBUSER --password=$DBPASS $DBNAME > $SQLFILE |
Итак у нас теперь есть дамп БД и мы знаем какие пользовательские файлы необходимо сохранять. Собираем их в один архив, сжимаем его и кладем через FTP на другую машину. В итоге получается следующий скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/bin/sh # Данные для подключения к БД DBUSER="dbuser" DBNAME="dbname" DBPASS="password" # Данные для подключения по FTP FTPUSER='ftpuser' FTPHOST='ftp.svdev.ru' FTPPASS='password' # Дата, для именования файла бэкапа в формате YYYY.MM.DD DT=`date '+%Y.%m.%d'` # Временная директория для хранения файлов TEMPDIR="/tmp/backup-"$DT"/" SQLFILE="backup.sql" # Путь на FTP куда положим файл # !!! Путь от корня домашней директории FTP REMOTEDIR="backups/svdev" # Файл архива DESTFILE=$DT".tar" TARFILES=" -C /var/www/svdev/htdocs wp-config.php -C /var/www/svdev/htdocs/wp-content uploads -C "$TEMPDIR" backup.sql" mkdir $TEMPDIR cd $TEMPDIR mysqldump --user=$DBUSER --password=$DBPASS $DBNAME > $SQLFILE tar cf $DESTFILE $TARFILES gzip -9 $DESTFILE ftp -n $FTPHOST <<EOF quote USER $FTPUSER quote PASS $FTPPASS binary cd $REMOTEDIR put $DESTFILE".gz" quit EOF # Удаляем за собой все временные файлы rm -rf $TEMPDIR exit 0 |
Вот в принципе и все, осталось прописать его в крон и можно наслаждаться результатом.
Данный пример является самым простым, что хотелось бы добавить:
- вынесение алгоритма в общий шаблон, а для проекта оставить только определение констант. Таким образом при наличии нескольких проектов – подключение/отключение бэкапов будет задаваться одним симлинком
- скрипта для удаления старых бэкапов (в данной схеме это необходимо делать вручную)
Можно скачать приведенный пример: backup.tar.gz и поэксперементировать с ним в свое удовольствие.
Использованный полезный материал:
- Advanced Bash-Scripting Guide
- Shell-кодинг (азы так сказать)
Ноябрь 26th, 2009 at 12:44
Серёга, не юзай верблюда в шелле, козлёночком станешь.
Ноябрь 26th, 2009 at 23:39
Ну вроде внес изменения согласно поступившим замечаниям