Резервное копирование и восстановление
Содержание
Введение
Зачем
Провайдеры общего хостинга обычно не предоставляют автоматизированный способ резервного копирования вашей установки Elgg. В этой статье будет рассмотрен метод выполнения этой задачи.
В ИТ часто существует множество способов достичь одной и той же цели. Имейте это в виду. В этой статье будет объяснён один метод резервного копирования и восстановления вашей установки Elgg на провайдере общего хостинга, использующем приложение CPanel. Однако представленные здесь идеи могут быть адаптированы и для других приложений. Ниже приведены типичные ситуации, которые могут потребовать такой процедуры:
Восстановление после сбоев
Перенос вашего сайта Elgg на новый хостинг
Дублирование установки
Что
Рассматриваемые темы:
Полное резервное копирование каталогов Elgg и баз данных MySQL выполняется ежедневно (автоматически)
Резервные копии отправляются на удалённое хранилище через FTP (автоматически)
Локальные резервные копии удаляются после успешной передачи на удалённое хранилище (автоматически)
Будут храниться резервные копии за пять дней (автоматически)
Восстановление данных на новом хостинге (вручную)
Этот процесс был составлен с помощью предыдущих статей в вики-документации Elgg.
Предположения
Были сделаны следующие предположения:
Каталог программы Elgg —
/home/userx/public_htmlКаталог данных Elgg —
/home/userx/elggdataВы создали локальный каталог для резервных копий в
/home/userx/sitebackupsУ вас есть удалённый FTP-сервер для отправки файлов резервных копий
Каталог, в который вы будете сохранять удалённые резервные копии, —
/home/usery/sitebackups/Вы будете восстанавливать сайт на втором провайдере общего хостинга в каталоге
/home/usery/public_html
Важно
Обязательно замените userx, usery, http://mynewdomain.com и все пароли на значения, соответствующие вашей реальной установке!
Создание работоспособной резервной копии — автоматически
Настройка скрипта резервного копирования
Скрипт, который вы будете использовать, можно найти здесь.
Просто скопируйте скрипт в текстовый файл и назовите файл с расширением .pl. Вы можете использовать любой текстовый редактор для обновления файла.
Измените следующее, чтобы отразить структуру ваших каталогов:
# ENTER THE PATH TO THE DIRECTORY YOU WANT TO BACKUP, NO TRAILING SLASH
$directory_to_backup = '/home/userx/public_html';
$directory_to_backup2 = '/home/userx/elggdata';
# ENTER THE PATH TO THE DIRECTORY YOU WISH TO SAVE THE BACKUP FILE TO, NO TRAILING SLASH
$backup_dest_dir = '/home/userx/sitebackups';
Измените следующее, чтобы отразить параметры вашей базы данных:
# MYSQL BACKUP PARAMETERS
$dbhost = 'localhost';
$dbuser = 'userx_elgg';
$dbpwd = 'dbpassword';
# ENTER DATABASE NAME
$database_names_elgg = 'userx_elgg';
Измените следующее, чтобы отразить параметры вашего удалённого FTP-сервера:
# FTP PARAMETERS
$ftp_host = "FTP HOSTNAME/IP";
$ftp_user = "ftpuser";
$ftp_pwd = "ftppassword";
$ftp_dir = "/";
Сохраните файл с расширением .pl (для целей этой статьи мы назовём файл: elgg-ftp-backup-script.pl) и загрузите его в каталог /home/userx/sitebackups
Имейте в виду, что вы можете отключить FTP и изменить бит в скрипте, чтобы он не удалял локальный файл резервной копии, если вы не хотите использовать удалённое хранилище для ваших резервных копий.
Настройка задачи Cron для резервного копирования
Войдите в приложение CPanel и нажмите на ссылку «Cron Jobs». В выпадающем списке общих настроек выберите «Once a day» и введите следующее в поле команды: /usr/bin/perl /home/userx/sitebackups/elgg-ftp-backup-script.pl
Нажмите кнопку «Add New Cron Job». Ежедневные полные резервные копии теперь запланированы и будут передаваться на удалённое хранилище.
Настройка задачи Cron для очистки
Если вы отправляете резервные копии через FTP другому провайдере общего хостинга, использующему приложение CPanel, или вы полностью отключили FTP, вы можете настроить хранение данных следующим образом.
Войдите в приложение CPanel для вашего FTP-сайта или локально, если вы не используете FTP, и нажмите на ссылку «Cron Jobs». В выпадающем списке общих настроек выберите «Once a day» и введите следующее в поле команды: find /home/usery/sitebackups/full_* -mtime +4 -exec rm {} \;
Параметр -mtime X установит количество дней для хранения резервных копий. Все файлы старше x дней будут удалены. Нажмите кнопку «Add New Cron Job». Теперь вы настроили время хранения резервных копий.
Восстановление из резервной копии
Подготовка файлов резервной копии
Предполагается, что вы восстанавливаете свой сайт на другом провайдере общего хостинга с CPanel.
Когда скрипт создавал резервную копию файлов, исходная структура каталогов сохранялась в zip-файле. Нам нужно немного очистить. Выполните следующее:
Скачайте файл резервной копии, из которого вы хотите выполнить восстановление
Извлеките содержимое файла резервной копии
- Перейдите вглубь, и вы найдёте резервную копию вашего сайта и резервную копию SQL. Извлеките оба. Затем у вас будет:
файл дампа MySQL с расширением
.sql- другая структура каталогов со следующим содержимым:
/home/userx/public_html/home/userx/elggdata
- Переупакуйте содержимое каталога
/home/userx/public_htmlв zip-файл так, чтобы файлы находились в корне zip-файла Причина этого проста. Гораздо эффективнее загрузить один zip-файл, чем передавать по FTP содержимое каталога
/home/userx/public_htmlна ваш новый хостинг.
- Переупакуйте содержимое каталога
Переупакуйте содержимое каталога /home/userx/elggdata в zip-файл так, чтобы файлы находились в корне zip-файла
Теперь у вас должны быть следующие файлы:
файл
.sqlzip-файл с содержимым
/home/userx/public_htmlв корнеzip-файл с содержимым
/home/userx/elggdataв корне
Восстановление файлов
Это написано с предположением, что вы восстанавливаете на другой хостинг, но сохраняете исходную структуру каталогов. Выполните следующее:
Войдите в приложение CPanel на хостинге, на который вы хотите восстановить сайт, и откройте файловый менеджер.
- Перейдите в
/home/usery/public_html Загрузите zip-файл, содержащий файлы
/home/userx/public_html- Извлеките zip-файл
Теперь вы должны увидеть все файлы в
/home/usery/public_html
Удалите zip-файл
- Перейдите в
- Перейдите в
/home/usery/elggdata Загрузите zip-файл, содержащий файлы
/home/userx/elggdata- Извлеките zip-файл
Теперь вы должны увидеть все файлы в /home/usery/elggdata
Удалите zip-файл
- Перейдите в
Восстановление программы и файлов данных завершено
Восстановление базы данных MySQL
Примечание
Снова предположим, что вы восстанавливаете установку Elgg на втором провайдере общего хостинга. Каждый провайдер общего хостинга добавляет имя владельца аккаунта к базам данных, связанным с этим аккаунтом. Например, имя пользователя для нашего основного хостинга — userx, поэтому хостинг добавит userx_, чтобы получить имя базы данных userx_elgg. Когда мы восстанавливаем на втором провайдере общего хостинга, мы делаем это с именем пользователя usery, поэтому имя нашей базы данных будет usery_elgg. Провайдеры хостинга не позволяют изменять это поведение. Поэтому процесс здесь не так прост, как просто восстановление базы данных из резервной копии в аккаунт usery. Однако, сказав это, это также не слишком сложно.
Редактирование резервной копии MySQL
Откройте файл .sql, который вы извлекли из резервной копии, в вашем любимом текстовом редакторе. Закомментируйте следующие строки знаком решётки:
#CREATE DATABASE /*!32312 IF NOT EXISTS*/ `userx_elgg` /*!40100 DEFAULT CHARACTER SET latin1 */;
#USE `userx_elgg`;
Сохраните файл.
Создание новой базы данных
Выполните следующее:
- Войдите в приложение CPanel на новом хостинге и нажмите на значок «MySQL Databases»
Введите имя базы данных и нажмите кнопку «create». В нашем примере мы будем использовать
elgg, что даст нам имя базы данныхusery_elgg- Вы можете связать существующего пользователя с новой базой данных, но для создания нового пользователя вам потребуется:
Перейдите в раздел «Add New User» на странице «MySQL Databases»
Введите имя пользователя и пароль. В нашем примере мы упростим и снова используем
elgg. Это даст нам имя пользователяusery_elgg
- Свяжите нового пользователя с новой базой данных
Перейдите в раздел «Add User To Database» на странице «MySQL Databases». Добавьте пользователя
usery_elggк базе данныхusery_elggВыберите «All Privileges» и нажмите кнопку «Make Changes»
Восстановление производственной базы данных
Теперь пришло время восстановить файл резервной копии MySQL, импортировав его в нашу новую базу данных с именем «usery_elgg».
- Войдите в приложение CPanel на новом хостинге и нажмите на значок «phpMyAdmin»
Выберите базу данных
usery_elggв левом столбцеНажмите на вкладку «import» в верхней части страницы
Перейдите к резервной копии
.sqlна вашем локальном компьютере и выберите еёНажмите кнопку «Go» в правом нижнем углу страницы
Теперь вы должны увидеть сообщение о том, что операция прошла успешно
Сводим всё воедино
Восстановленная установка elgg ничего не знает о новом имени базы данных, имени пользователя базы данных, структуре каталогов и т.д. Именно это мы и собираемся исправить здесь.
Отредактируйте /public_html/elgg-config/settings.php на новом хостинг-провайдере, чтобы отразить информацию о базе данных для базы данных, которую вы только что создали.
// Database username
$CONFIG->dbuser = 'usery_elgg';
// Database password
$CONFIG->dbpass = 'dbpassword';
// Database name
$CONFIG->dbname = 'usery_elgg';
// Database server
// (For most configurations, you can leave this as 'localhost')
$CONFIG->dbhost = 'localhost';
// (For most configurations, you can leave this as 3306)
$CONFIG->dbport = 3306;
$CONFIG->wwwroot = 'http://your.website.com/'
Загрузите файл settings.php обратно на новый хостинг, перезаписав существующий файл.
Откройте инструмент phpMyAdmin на новом хостинге из CPanel. Выберите базу данных usery_elgg слева и нажмите вкладку SQL в верхней части страницы. Выполните следующие SQL-запросы к базе данных usery_elgg:
Изменение пути установки
UPDATE `elgg_config` SET `value` = REPLACE(`value`, "/home/userx/public_html/grid/", "/home/usery/public_html/grid/") WHERE `name` = "path";
Изменение каталога данных
UPDATE `elgg_config` SET `value` = REPLACE(`value`, "/home/userx/elggdata/", "/home/usery/elggdata/") WHERE `name` = "dataroot";
Изменение каталога данных filestore
UPDATE elgg_metadata set value = '/home/usery/elggdata/' WHERE name = 'filestore::dir_root';
Завершение новой установки
Запустите скрипт обновления, перейдя по следующему URL: http://mynewdomain.com/upgrade.php. Выполните этот шаг дважды подряд.
Обновите записи DNS, чтобы ваше имя хоста разрешалось в IP-адрес нового хостинга, если это постоянное перемещение.
Поздравляем!
Если вы выполнили описанные здесь шаги, у вас теперь должна быть полностью функциональная копия вашей основной установки Elgg.