Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-daily-backup-scripts-for-mysql-databases-and-wordpress-phpbb-dokuwiki-sites

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-daily-backup-scripts-for-mysql-databases-and-wordpress-phpbb-dokuwiki-sites [26.03.2016 23:18] – создано Алексей Максимовunix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-daily-backup-scripts-for-mysql-databases-and-wordpress-phpbb-dokuwiki-sites [06.04.2016 16:07] (текущий) – [Очистка старых резервных копий] Алексей Максимов
Строка 1: Строка 1:
 ===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 12. Настройка скриптов резервного копирования сайтов и баз данных MySQL ===== ===== Настройка веб-сервера на базе стека LEMP в Ubuntu Server 14.04 LTS. Часть 12. Настройка скриптов резервного копирования сайтов и баз данных MySQL =====
  
 +В это части мы рассмотрим пример настройки простых скриптов для выполнения регулярного резервного копирования корневых папок сайтов и баз данных MySQL на [[:unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04|веб-сервер на стеке LEMP]]. За основу взят [[https://gist.github.com/chrishough/4522386|набор bash-скриптов с GitHub]] со своими переработками. Исходим из условия, что предварительно на нашем веб-сервере создан [[:unix-linux:linux-cli-tools:linux-how-to-add-and-format-partition-on-new-disk-with-parted-and-add-it-to-fstab|дополнительный выделенный диск]] под резервное копирование с точкой монтирования **/mnt/backup**
 +
 +\\
 +==== Резервное копирование баз данных MySQL ====
 +
 +[[:unix-linux:ubuntu:ubuntu-14-04-lts-trusty-tahr:how-to-install-lemp-web-server-on-ubuntu-14-04:setup-mysql-for-wordpress-and-phpbb|В одной из прошлых частей]] мы рассмотрели пример того, как сохранить в защищённом виде учётные данные для автоматического подключения к **mysql** от имени **root**-пользователя, поэтому в нижеописанных примерах мы не будем в явном виде указывать эти учётные данные. 
 +
 +Для начала нам нужно будет освежить в памяти список баз MySQL, которые мы будем подвергать резервному копированию. Отталкиваемся от того условия, что нас интересует бэкап не всех баз, а лишь некоторых (продуктивных), так как вполне возможно, что в нашем экземпляре MySQL будет ещё и ряд тестовых баз.
 +
 +Переходим в режим суперпользователя, подключаемся к MySQL и запрашиваем список всех баз:
 +
 +<code>sudo su -
 +mysql
 +mysql >  show databases;</code>
 +
 +Вывод будет примерно таким:
 +
 +<code>
 ++---------------------+
 +| Database            |
 ++---------------------+
 +| information_schema  |
 +| blog-db             |
 +| forum-db            |
 +| testsite-db         |
 +| #mysql50#lost+found |
 +| lost+found          |
 +| mysql               |
 +| performance_schema  |
 ++---------------------+
 +7 rows in set (0.00 sec)
 +</code>
 +
 +
 +Определившись со списком баз, которые мы будем подвергать резервному копированию, переходим к настройке.
 +
 +Создаём каталог для сохранения резервных копий БД и сразу ограничиваем к нему доступ:
 +
 +<code>sudo mkdir -p /mnt/backup/daily/databases/
 +sudo chmod 700 /mnt/backup/daily/databases/</code>
 +
 +Создаём скрипт резервного копирования:
 +
 +<code>sudo nano /usr/local/sbin/backup-databases.sh</code>
 +
 +Наполняем его содержимым:
 +
 +<file bash backup-databases.sh>
 +#!/bin/bash
 +#
 +# Verify directory structure exists prior to running this job
 +#
 +BackUpDIR="/mnt/backup/daily/databases/";
 +TimeStamp=$(date +"%Y.%m.%d-%H:%M:%S");
 +
 +# DBs list in format "db1 db2 db3 db4"
 +#
 +DBList="blog-db forum-db";
 +
 +for DB in $DBList; 
 +do
 +  mysqldump $DB > $BackUpDIR$DB.$TimeStamp.sql;
 +  xz  $BackUpDIR$DB.$TimeStamp.sql
 +done
 +</file>
 +
 +Делаем скрипт исполняемым и ограничиваем к нему доступ:
 +
 +<code>sudo chmod 700 /usr/local/sbin/backup-databases.sh</code>
 +
 +Пробуем выполнить скрипт, запутсив его вручную от имени суперпользователя:
 +
 +<code>sudo su -
 +/usr/local/sbin/backup-databases.sh</code>
 +
 +Скрипт должен отработать без ошибок. После окончания его работы проверим содержимое каталога сохранения резервных копий:
 +
 +<code>sudo ls -la /mnt/backup/daily/databases/
 +
 +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:31:37.sql.xz
 +-rw-r--r-- 1 root root  375700 Apr  4 11:32 forum-db.2016.04.04-11:31:37.sql.xz</code>
 +
 +
 +Добавляем задание резервного копирования в планировщик **cron**
 +
 +<code>sudo nano /etc/cron.d/backup-databases</code>
 +
 +Содержимое файла задания на ежедневное выполнение в 00:30:
 +
 +<file bash backup-databases>
 +# Daily mysql databases backup 
 +30 00 * * * root /usr/local/sbin/backup-mysql-databases.sh
 +</file>
 +
 +\\
 +==== Резервное копирование файлов веб-сайтов ====
 +
 +Создаём каталог для сохранения резервных копий файлов сайтов:
 +
 +<code>sudo mkdir -p /mnt/backup/daily/websites/
 +sudo chmod 700 /mnt/backup/daily/websites/</code>
 +
 +Создаём скрипт:
 +
 +<code>sudo nano /usr/local/sbin/backup-websites.sh</code> 
 +
 +Наполняем его содержимым:
 +
 +<file bash backup-websites.sh>
 +#!/bin/bash
 +#
 +# Verify directory structure exists prior to running this job
 +#
 +BackUpDIR="/mnt/backup/daily/websites/";
 +SrvDir="/var/www/html/";
 +#
 +# Format of SiteList="sitefolder1 sitefolder2 sitefolder3"
 +SiteList="root blog forum wiki";
 +TimeStamp=$(date +"%Y.%m.%d-%H:%M:%S");
 +
 +for Site in $SiteList; 
 +do
 +  tar -cJf "$BackUpDIR$Site.website.$TimeStamp.tar.xz" -P $SrvDir$Site;
 +done
 +</file>
 +
 +Делаем скрипт исполняемым и ограничиваем к нему доступ:
 +
 +<code>sudo chmod 700 /usr/local/sbin/backup-websites.sh</code>
 +
 +
 +Пробуем выполнить скрипт с правами суперпользователя:
 +
 +<code>sudo su -
 +/usr/local/sbin/backup-websites.sh</code>
 +
 +Скрипт должен отработать без ошибок. После окончания его работы проверим содержимое каталога для сохранения резервных копий:
 +
 +<code>sudo ls -la /mnt/backup/daily/websites/
 +
 +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:54:23.tar.xz
 +-rw-r--r-- 1 root root   4320420 Apr  4 13:05 forum.website.2016.04.04-12:54:23.tar.xz
 +-rw-r--r-- 1 root root       380 Apr  4 12:54 root.website.2016.04.04-12:54:23.tar.xz
 +-rw-r--r-- 1 root root  12538776 Apr  4 13:06 wiki.website.2016.04.04-12:54:23.tar.xz</code>
 +
 +
 +Добавляем задание резервного копирования в планировщик **cron**:
 +
 +<code>sudo nano /etc/cron.d/backup-websites</code>
 +
 +Содержимое файла задания на ежедневное выполнение в 01:00:
 +
 +<file bash backup-websites>
 +# Daily websites root folders backup 
 +00 01 * * * root /usr/local/sbin/backup-websites.sh
 +</file>
 +
 +\\
 +==== Очистка старых резервных копий ====
 +
 +Создаём скрипт очистки:
 +
 +<code>sudo nano /usr/local/sbin/backup-cleanup.sh</code>
 +
 +Наполняем скрипт содержимым:
 +
 +<file bash backup-cleanup.sh>
 +#!/bin/bash 
 +#
 +BackUpDIR="/mnt/backup/daily/";
 +SubDIRs="databases websites";
 +
 +for SubDIR in $SubDIRs; 
 +do
 +
 + if [ $(find $BackUpDIR$SubDIR/ -name '*.xz' -mtime -6 | wc -l) -eq 0 ]; then
 +   # no fresh backups for last 6 days
 +   continue
 + else
 +   # delete backups greater than 7 days old 
 +   find $BackUpDIR$SubDIR/ -name '*.xz' -mtime +7 -delete
 + fi
 +
 +done
 +</file>
 +
 +Скрипт выполняет поиск и удаление всех файлов резервных копий старше 7 дней. При этом если создание новых бэкапов перестало работать и нет файлов свежее 6 последних дней, то удаление бэкапов отменяется. 
 +
 +Делаем скрипт исполняемым и ограничиваем к нему доступ:
 +
 +<code>sudo chmod 700 /usr/local/sbin/backup-cleanup.sh</code>
 +
 +Пробуем выполнить скрипт с правами суперпользователя:
 +
 +<code>sudo su -
 +/usr/local/sbin/backup-cleanup.sh</code>
 +
 +Скрипт должен отработать без явных ошибок.
 +
 +
 +Добавляем задание резервного копирования в **cron**:
 +
 +<code>sudo nano /etc/cron.d/backup-cleanup</code>
 +
 +
 +Содержимое файла задания на ежедневное выполнение в 02:00:
 +
 +<file bash backup-cleanup.sh>
 +# Daily remove backups greater than 7 days old 
 +00 02 * * * root /usr/local/sbin/backup-cleanup.sh
 +</file>
 +
 +----
 +
 +{{:user:blogroot.png?50&nolink |}} Автор первичной редакции:\\ [[user:blogroot|Алексей Максимов]] \\ Время публикации: 06.04.2016 14:07
 +
 +{{tag>Linux Ubuntu "Ubuntu Server" "Ubuntu 14.04" "14.04 LTS" "web server" Backup MySQL mysqldump Cron Bash Script Cleanup}}
 +
 +~~DISCUSSION~~
unix-linux/ubuntu/ubuntu-14-04-lts-trusty-tahr/how-to-install-lemp-web-server-on-ubuntu-14-04/setup-daily-backup-scripts-for-mysql-databases-and-wordpress-phpbb-dokuwiki-sites.1459023502.txt.gz · Последнее изменение: 26.03.2016 23:18 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki