Простой бэкап файлов сайтов и баз данных на баше
Вопрос бэкапов актуален всегда, особенно когда администрируешь свой сервер сам — бэкапить приходиться самому. Раньше я спасался либо возможностями панелек, типо ISPmanager (но он на php 5.5 без танцов с бубном не устанавливается), либо гуглил скрипты бэкапа в интернете (они в свою очередь то криво работают, то очень перемудрены). Надоело! Написал свой простенький скрипт бэкапа. Заодно поднатаскал знания Bash :)
Скрипт простой, как пробка. По умолчанию бэкапы складыватся в папку /backup/daily/текущая_дата/: в папке mysql — бэкапы mysql баз данных, а в папке home — tar-архивы папок сайтов.
Настраиваем
- указываем параметры подключения к базе данных. Нужен юзер, у которого есть доступ ко всем базам данных.
- указываем путь, куда буду складываться бэкапы
- указываем папку, в которой лежат папки с сайтами (обычно это /home/ или /var/www/)
- указываем сколько дней хранить бэкапы. По умолчанию: 5
Код скрипта для бэкапа:
#!/bin/bash ################################################# # Created by olegpro.ru # Author: Oleg Maksimenko # Date: 04.01.2015 19:33 ################################################# # {{{ config mysql_host="localhost" mysql_user="root" mysql_pass="password" dir_backup="/backup/daily/" dir_sites="/var/www/" date_folder=`date +%Y-%m-%d` days_keep_backup=5 # }}} # {{{ remove old backups find ${dir_backup} -maxdepth 1 -ctime +$[${days_keep_backup}-1] -exec rm -rf {} \; >/dev/null 2>&1 # }}} # {{{ create folder backup if ! [ -d ${dir_backup}${date_folder}/ ]; then mkdir -p ${dir_backup}${date_folder}/ chmod 700 ${dir_backup}${date_folder}/ fi # }}} # {{{ mysql dump if ! [ -d ${dir_backup}${date_folder}/mysql/ ]; then mkdir ${dir_backup}${date_folder}/mysql/ fi for db_name in `mysql -u${mysql_user} -p${mysql_pass} -h${mysql_host} -e "show databases;" | tr -d "| " | grep -Ev "(Database|information_schema|performance_schema)"` do if [[ ${db_name} != "information_schema" ]] && [[ ${db_name} != _* ]] ; then echo "Dumping database: ${db_name}" mysqldump -u${mysql_user} -p${mysql_pass} -h${mysql_host} --events ${db_name} > ${dir_backup}${date_folder}/mysql/${db_name}.sql fi done # }}} # {{{ files sites backup if ! [ -d ${dir_backup}${date_folder}/home/ ]; then mkdir ${dir_backup}${date_folder}/home/ fi cd ${dir_sites} for site_folder in `ls ${dir_sites} | grep -Ev "*.(html|php)"` do echo "Dumping site: ${site_folder}" tar cpfP ${dir_backup}${date_folder}/home/${site_folder}.tar ${site_folder}/ --exclude "logs" "bitrix/updates" --exclude "bitrix/backup" --exclude "bitrix/cache" --exclude "bitrix/managed_cache" --exclude "bitrix/stack_cache" --exclude "bitrix/html_pages" --exclude "upload/tmp" --exclude "upload/resize_cache" done # }}} # {{{ etc folder backup if ! [ -d ${dir_backup}${date_folder}/etc/ ]; then mkdir ${dir_backup}${date_folder}/etc/ fi echo "Dumping /etc/" tar cpfP ${dir_backup}${date_folder}/etc/etc.tar /etc/ # }}}
Запуск
Осталось только сохранить скрипт на сервере и добавить задачу в крон для регулярного запуска.
Ещё
Кстати, можно наши бэкапы отправлять и в облако, например в Dropbox. Хорошие ребята даже bash-скрипт написали dropbox_uploader.sh.
3 комментария
+
mr.Bro, информативно.
Люто плюсую, постоянно юзаю: