web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-daily-backup-scripts-for-mysql-databases-and-wordpress-phpbb-dokuwiki-sites
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-daily-backup-scripts-for-mysql-databases-and-wordpress-phpbb-dokuwiki-sites [05.09.2025 12:08] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1 | web-server-nginx:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-daily-backup-scripts-for-mysql-databases-and-wordpress-phpbb-dokuwiki-sites [05.09.2025 12:08] (текущий) – ↷ Операцией перемещения обновлены ссылки Алексей Максимов | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | ===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 12. Настройка скриптов резервного копирования сайтов и баз данных MySQL ===== | ||
| + | В это части мы рассмотрим пример настройки простых скриптов для выполнения регулярного резервного копирования корневых папок сайтов и баз данных MySQL на [[web-server-nginx: | ||
| + | |||
| + | \\ | ||
| + | ==== Резервное копирование баз данных MySQL ==== | ||
| + | |||
| + | [[web-server-nginx: | ||
| + | |||
| + | Для начала нам нужно будет освежить в памяти список баз MySQL, которые мы будем подвергать резервному копированию. Отталкиваемся от того условия, | ||
| + | |||
| + | Переходим в режим суперпользователя, | ||
| + | |||
| + | < | ||
| + | mysql | ||
| + | mysql > show databases;</ | ||
| + | |||
| + | Вывод будет примерно таким: | ||
| + | |||
| + | < | ||
| + | +---------------------+ | ||
| + | | Database | ||
| + | +---------------------+ | ||
| + | | information_schema | ||
| + | | blog-db | ||
| + | | forum-db | ||
| + | | testsite-db | ||
| + | | # | ||
| + | | lost+found | ||
| + | | mysql | | ||
| + | | performance_schema | ||
| + | +---------------------+ | ||
| + | 7 rows in set (0.00 sec) | ||
| + | </ | ||
| + | |||
| + | |||
| + | Определившись со списком баз, которые мы будем подвергать резервному копированию, | ||
| + | |||
| + | Создаём каталог для сохранения резервных копий БД и сразу ограничиваем к нему доступ: | ||
| + | |||
| + | < | ||
| + | sudo chmod 700 / | ||
| + | |||
| + | Создаём скрипт резервного копирования: | ||
| + | |||
| + | < | ||
| + | |||
| + | Наполняем его содержимым: | ||
| + | |||
| + | <file bash backup-databases.sh> | ||
| + | #!/bin/bash | ||
| + | # | ||
| + | # Verify directory structure exists prior to running this job | ||
| + | # | ||
| + | BackUpDIR="/ | ||
| + | TimeStamp=$(date +" | ||
| + | |||
| + | # DBs list in format "db1 db2 db3 db4" | ||
| + | # | ||
| + | DBList=" | ||
| + | |||
| + | for DB in $DBList; | ||
| + | do | ||
| + | mysqldump $DB > $BackUpDIR$DB.$TimeStamp.sql; | ||
| + | xz $BackUpDIR$DB.$TimeStamp.sql | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | Делаем скрипт исполняемым и ограничиваем к нему доступ: | ||
| + | |||
| + | < | ||
| + | |||
| + | Пробуем выполнить скрипт, | ||
| + | |||
| + | < | ||
| + | / | ||
| + | |||
| + | Скрипт должен отработать без ошибок. После окончания его работы проверим содержимое каталога сохранения резервных копий: | ||
| + | |||
| + | < | ||
| + | |||
| + | drwx------ 2 root root 4096 Apr 4 11:32 . | ||
| + | drwx------ 3 root root 4096 Apr 4 11:10 .. | ||
| + | -rw-r--r-- 1 root root 4994140 Apr 4 11:31 blog-db.2016.04.04-11: | ||
| + | -rw-r--r-- 1 root root 375700 Apr 4 11:32 forum-db.2016.04.04-11: | ||
| + | |||
| + | |||
| + | Добавляем задание резервного копирования в планировщик **cron** | ||
| + | |||
| + | < | ||
| + | |||
| + | Содержимое файла задания на ежедневное выполнение в 00:30: | ||
| + | |||
| + | <file bash backup-databases> | ||
| + | # Daily mysql databases backup | ||
| + | 30 00 * * * root / | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | ==== Резервное копирование файлов веб-сайтов ==== | ||
| + | |||
| + | Создаём каталог для сохранения резервных копий файлов сайтов: | ||
| + | |||
| + | < | ||
| + | sudo chmod 700 / | ||
| + | |||
| + | Создаём скрипт: | ||
| + | |||
| + | < | ||
| + | |||
| + | Наполняем его содержимым: | ||
| + | |||
| + | <file bash backup-websites.sh> | ||
| + | #!/bin/bash | ||
| + | # | ||
| + | # Verify directory structure exists prior to running this job | ||
| + | # | ||
| + | BackUpDIR="/ | ||
| + | SrvDir="/ | ||
| + | # | ||
| + | # Format of SiteList=" | ||
| + | SiteList=" | ||
| + | TimeStamp=$(date +" | ||
| + | |||
| + | for Site in $SiteList; | ||
| + | do | ||
| + | tar -cJf " | ||
| + | done | ||
| + | </ | ||
| + | |||
| + | Делаем скрипт исполняемым и ограничиваем к нему доступ: | ||
| + | |||
| + | < | ||
| + | |||
| + | |||
| + | Пробуем выполнить скрипт с правами суперпользователя: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | |||
| + | Скрипт должен отработать без ошибок. После окончания его работы проверим содержимое каталога для сохранения резервных копий: | ||
| + | |||
| + | < | ||
| + | |||
| + | drwx------ 2 root root 4096 Apr 4 13:05 . | ||
| + | drwx------ 4 root root 4096 Apr 4 12:29 .. | ||
| + | -rw-r--r-- 1 root root 99416096 Apr 4 13:04 blog.website.2016.04.04-12: | ||
| + | -rw-r--r-- 1 root root | ||
| + | -rw-r--r-- 1 root root 380 Apr 4 12:54 root.website.2016.04.04-12: | ||
| + | -rw-r--r-- 1 root root 12538776 Apr 4 13:06 wiki.website.2016.04.04-12: | ||
| + | |||
| + | |||
| + | Добавляем задание резервного копирования в планировщик **cron**: | ||
| + | |||
| + | < | ||
| + | |||
| + | Содержимое файла задания на ежедневное выполнение в 01:00: | ||
| + | |||
| + | <file bash backup-websites> | ||
| + | # Daily websites root folders backup | ||
| + | 00 01 * * * root / | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | ==== Очистка старых резервных копий ==== | ||
| + | |||
| + | Создаём скрипт очистки: | ||
| + | |||
| + | < | ||
| + | |||
| + | Наполняем скрипт содержимым: | ||
| + | |||
| + | <file bash backup-cleanup.sh> | ||
| + | # | ||
| + | # | ||
| + | BackUpDIR="/ | ||
| + | SubDIRs=" | ||
| + | |||
| + | for SubDIR in $SubDIRs; | ||
| + | do | ||
| + | |||
| + | if [ $(find $BackUpDIR$SubDIR/ | ||
| + | # no fresh backups for last 6 days | ||
| + | | ||
| + | else | ||
| + | # delete backups greater than 7 days old | ||
| + | find $BackUpDIR$SubDIR/ | ||
| + | fi | ||
| + | |||
| + | done | ||
| + | </ | ||
| + | |||
| + | Скрипт выполняет поиск и удаление всех файлов резервных копий старше 7 дней. При этом если создание новых бэкапов перестало работать и нет файлов свежее 6 последних дней, то удаление бэкапов отменяется. | ||
| + | |||
| + | Делаем скрипт исполняемым и ограничиваем к нему доступ: | ||
| + | |||
| + | < | ||
| + | |||
| + | Пробуем выполнить скрипт с правами суперпользователя: | ||
| + | |||
| + | < | ||
| + | / | ||
| + | |||
| + | Скрипт должен отработать без явных ошибок. | ||
| + | |||
| + | |||
| + | Добавляем задание резервного копирования в **cron**: | ||
| + | |||
| + | < | ||
| + | |||
| + | |||
| + | Содержимое файла задания на ежедневное выполнение в 02:00: | ||
| + | |||
| + | <file bash backup-cleanup.sh> | ||
| + | # Daily remove backups greater than 7 days old | ||
| + | 00 02 * * * root / | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | {{: | ||
| + | |||
| + | {{tag> | ||
| + | |||
| + | ~~DISCUSSION~~ | ||