MariaDB — методы резервного копирования

Помощь персонального менеджера, оперативность сдачи отчетности, соответствие законодательству РФ

Что это такое бэкап сайта?

Суть бэкапа сайта сводится к копированию баз данных, файлов сайта, почты, FTP-аккаунтов и множества других параметров хостинга. Проще говоря, мы сохраняем весь сайт и его настройки в отдельном месте и, при необходимости, можем вернуть сайт к той версии, которую сохранили. При этом может осуществляться копирование данных на текущий и бэкапный (дополнительный) сервер, располагающийся отдельно от серверов провайдера либо в другом дата-центре. Оно производится на случай, если что-то случится с сервером на котором хранится сайт.

ответа

Лучший ответ

(Laravel Backup) от Spatie.

Этот пакет предоставляет вам команду (php artisan backup:run ) . что не совсем то, что вам нужно.

Но вы можете создать в админке кнопку со ссылкой на маршрут. и оттуда (либо из маршрута, либо из контроллера) вы можете вызвать эту команду с помощью

Artisan::call(‘backup:run’);

Что вызовет резервное копирование.

2 Shobi 9 Ноя 2018 в 08:49

Вот для этого хороший пакет. Вы можете выполнить команду artisan одним нажатием кнопки или автоматизировать способ, что намного лучше.

nakov 9 Ноя 2018 в 08:44

Введение

В качестве примера я рассмотрю серверы с установленными там продуктами bitrix, работающими в bitrixenv. Особенностью будет то, что bitrix до сих пор использует не самую свежую версию mysql от percona — Percona Server for MySQL 5.7. Тем не менее, проблем с этим нет никаких. Версия будет поддерживаться минимум до октября 2023 года.

Для полных и инкрементных бэкапов я рассмотрю утилиту Percona XtraBackup, которая позволяет делать архивы баз данных на лету без блокировок таблиц. В моей статье будет использоваться версия 2.4, так как именно она поддерживает mysql 5.7. Это максимально доступная версия в репозиториях, которые устанавливает окружение bitrixenv.

Примеры в этой статье будут актуальны практически для всех версий Mysql и XtraBackup, так как в подходах и командах отличий почти нет. Важно знать, что последняя версия XtraBackup на момент написания статьи была 8.0 и она поддерживает популярный форк mysql — MariaDB только до версии 10.2 включительно, да и то с оговорками. Для более поздних версий mariadb рекомендуется использовать mariabackup. Это форк XtraBackup, который в использовании практически ничем не отличается от оригинала.

Сегодня я рассмотрю инкрементные бэкапы mysql только с помощью XtraBackup, а так же полные бэкапы в том числе с помощью mysqldump. MariaDB и Mariabackup рассматривать не буду. Принципиальных отличий между ними нет. Там все то же самое.

Читайте также:  Запуск Python и python-скрипт на компьютере

Проблемы

Итак, какие проблемы есть в коде выше?

1. Связь, сцепление (Coupling)

Прежде всего, приведенный выше код связывает контроллер с моделью Post.

Как правило, тесная связь означает, что одно изменение в одном модуле может привести к изменениям в других модулях, поэтому, прежде чем делать какие-либо изменения, разработчик должен понять всю систему.

Тесно связанные приложения не являются гибкими и в большинстве случаев стоимость изменений намного выше, чем стоимость разработки.

Только представьте себе, как трудно будет перенести ваше приложение из MySQL в другую систему управления базами данных, если такие зависимости есть в каждом отдельном контроллере.

С заменой базы данных в проекте на столько редкий кейс, что я его ни разу за 20 лет не встречал. Лучше привести пример с сервисом кеша или логирования. Кеш может быть в редисе, в файлах, в памяти. Логирование может быть в файлы, в слаке, в грейлоге и т.п.

прим. автора блога

2. Жестко закодированный запрос к базе данных

Post::all() отлично работает, когда в нашей базе данных есть только 10 или 20 записей. Но что произойдет, когда компания станет популярной и будет публиковать десятки постов каждый день? В очень короткое время у нас будут сотни или даже тысячи сообщений в блогах, и это замедлит работу нашего приложения.

Чтобы избежать этого, нам придется переписать код и использовать что-то вроде этого:

Post::take($x)->skip($y)->get();

Выглядит просто, но помните ли вы, что модели многоразовые? Если мы уже использовали жестко запрограммированный Post::all()запрос в нескольких местах, все они должны быть переписаны вручную. Это всего лишь простой пример, а в реальном проекте все может быть гораздо сложнее. Конечно, это нарушает DRY (не повторяйся) принцип.

3. Жирные контроллеры

Как я уже упоминал выше, в реальных проектах мы почти не пользуемся Post::all(). На самом деле, скорее всего, код выглядит примерно так же, как следующий фрагмент кода:

if ($somethingHappened) { $posts = Post::recent() ->orderBy(‘created_at’, ‘desc’) ->take($x) ->skip($y) ->blah()->blah()->blah() ->get(); } else { $posts = Post::whereNothingHappened(1) ->orderBy(‘created_at’, ‘desc’) ->take($x) ->skip($y) ->bleh()->bleh()->bleh() ->get(); }

Это раздувает наши контроллеры, и снова нам придется повторять весь этот код в разных местах, чтобы получить список сообщений.

4. Тестируемость

Хорошие программисты пишут тесты, и большинство из них имеют привычку спрашивать себя: “как это проверить?”.

Эта статья не о тестировании, поэтому я не хочу погружаться слишком глубоко, но код, который я показал выше, нелегко проверить. На самом деле это можно сделать, включив такие вещи, как Mock, но, с моей точки зрения, всегда лучше избегать дополнительной сложности.

И это действительно возможно.

Шаг 2

Создание spfile для новой базы данных. Этот шаг предполагает, что вы используете spfile, если нет, то скопируйте существующий. Для создания, выполните в sqlplus:

create pfile=’init_новый_’ from spfile;

Этой командой вы создадите новый pfile в директории $ORACLE_HOME/dbs.

Только что созданный pfile необходимо отредактировать. Если клонированная база данных имеет новое имя, то его требуется сменить, так же как и некоторые пути. Просмотрите созданный файл и внесите необходимые изменения. Обратите внимание на параметры памяти, например, если вы клонируете промышленную базу на сервер разработки, уступающий по параметрам, то необходимо уменьшит соответствующие параметры, например, объем используемой оперативной памяти.

Восстановление данных из резервной копии

Восстановление пользователя и всех его данных

Чтобы восстановить данные пользователя из резервной копии, перейдите в ИнструментыРезервные копии → выберите копию → кнопка Подробнее → выберите пользователя → кнопка ВосстановитьOK. Когда данные будут восстановлены, в интерфейсе ISPmanager появится сообщение «Восстановление из резервной копии успешно завершено».

Читайте также:  Как найти и исправить неработающие символические ссылки в Linux

Обратите внимание!

Существующие файлы не перезаписываются. Перед восстановлением БД пользователей, удалите с сервера одноимённую БД. Если этого не сделать, то ISPmanager дополнит существующую БД, а не восстановит её полностью из резервной копии.

Восстановление удалённого пользователя

Удалённого пользователя можно восстановить из резервной копии под другим именем. Для этого перейдите в в ИнструментыРезервные копии → выберите копию → кнопка Подробнее → выберите пользователя → кнопка Восстановить как → укажите Имя пользователя, которому будут восстановлены данные из резервной копии или Создайте с новым именемOk. В этом случае ISPmanager не будет восстанавливать совпадающие сущности. Также пользователю будут не доступны резервные копии, созданные под старым именем.

Обратите внимание!

Если восстановить удалённого пользователя из ранней резервной копии, то данные резервных копий, сделанных поздней, будут ему не доступны.

Например, пользователь был удалён 10 марта, а его резервные копии есть за январь и за февраль. После восстановления пользователя из резервной копии за 15 января, он не увидит резервные копии, сделанные позднее этой даты. То есть резервные копии с 15 января до 10 марта будут ему недоступны.

Восстановление отдельных файлов

Чтобы восстановить отдельные файлы из резервной копии пользователя:

  1. Войдите под учётной записью пользователя: Учётные записиПользователи → выберите пользователя → кнопка Войти.
  2. Откройте резервную копию пользователя: ИнструментыРезервные копии → выберите копию → кнопка Данные.
  3. Выберите тип данных — Базы данных, Почта, Файлы.
  4. Выберите нужные файлы.
  5. Нажмите кнопку Восстановить для восстановления файлов из резервной копии.

Когда данные будут восстановлены, в интерфейсе ISPmanager появится сообщение «Восстановление из резервной копии успешно завершено».

Сохранение резервных копий на компьютер пользователя

Созданные резервные копии приложений хранятся на сервере провайдера сервиса (в «облаке»). Но при желании эти резервные копии можно в любой момент выгрузить (сохранить) на компьютер пользователя. Как это делается, рассказано в статье по ссылке.

Результат сохранения (файл выгрузки) может быть использован:

  • для перехода в локальную версию приложения, то есть, для работы с выгруженными данными в том же приложении, установленном на компьютере пользователя (см. статью по ссылке);
  • в качестве файла данных при создании нового приложения в сервисе (см. статью по ссылке).

См. также:

Как создать резервную копию сайта

Сформировать копию можно автоматически, используя инструменты хостинга, или через FTP-клиент.

Через панель управления Timeweb

В Timeweb есть встроенный инструмент создания резервных копий. Чтобы воспользоваться им:

  1. Перейдите в Панель управления.
  2. Найдите раздел "Резервные копии".
  3. Нажмите "Создать резервную копию".
  4. Готовые бэкапы будут доступны в этом же разделе.

Через FTP-клиент и phpMyadmin

Установите FTP-клиент (например, Filezilla — он бесплатный). Настройте его на работу со своим сайтом — в Community уже была статья с подробным описанием настройки Filezilla. Скачайте все файлы вашего сайта с сервера провайдера.

Учтите, что заражение сайта чаще всего происходит именно по FTP-протоколу. Поэтому устанавливайте клиент на хорошо защищенном от вирусов компьютере.

Читайте также:  Mandriva linux — легендарный дистрибутив, который оставил след

Копию базы данных делают через phpMyadmin. Для этого:

  1. Откройте панель управления Timeweb, раздел "Базы данных".
  2. Найдите нужную базу данных и перейдите по ссылке phpMyadmin напротив нее.
  3. Пролистайте страницу с таблицами до конца и нажмите "Отметить все".
  4. Вы увидите выпадающий список "С отмеченными:". Вам сейчас нужен пункт "Экспорт".
  5. Дамп базы сохранится в формате SQL на вашем компьютере.

Другие инструменты

Другие варианты резервного копирования:

  • XtraBackup — эта опция предназначена для баз данных XtraDB / InnoDB и работает с любым механизмом хранения. Узнайте больше об этом инструменте на официальном сайте Percona.

  • Снимки — некоторые файловые системы позволяют делать снимки. Процесс состоит из очистки таблиц с блокировкой чтения, монтирования снимка, разблокировки таблиц, копирования снимка, а затем размонтирования снимка.

  • LVM — этот популярный метод использует Perl-скрипт. Он получает блокировку чтения для каждой таблицы и сбрасывает кэши на диск. Затем он получает снимок и разблокирует таблицы. Обратитесь к официальному сайту mylvmbackup для получения дополнительной информации.

  • TokuBackup — это решение, предоставляемое Percona, обеспечивает горячее резервное копирование с учетом проблем и ограничений параметров резервного копирования InnoDB. Он создает транзакционную звуковую копию файлов, в то время как приложения продолжают манипулировать ими. Обратитесь к веб-сайту Percona за дополнительной информацией.

XtraBackup — эта опция предназначена для баз данных XtraDB / InnoDB и работает с любым механизмом хранения. Узнайте больше об этом инструменте на официальном сайте Percona.

Снимки — некоторые файловые системы позволяют делать снимки. Процесс состоит из очистки таблиц с блокировкой чтения, монтирования снимка, разблокировки таблиц, копирования снимка, а затем размонтирования снимка.

LVM — этот популярный метод использует Perl-скрипт. Он получает блокировку чтения для каждой таблицы и сбрасывает кэши на диск. Затем он получает снимок и разблокирует таблицы. Обратитесь к официальному сайту mylvmbackup для получения дополнительной информации.

TokuBackup — это решение, предоставляемое Percona, обеспечивает горячее резервное копирование с учетом проблем и ограничений параметров резервного копирования InnoDB. Он создает транзакционную звуковую копию файлов, в то время как приложения продолжают манипулировать ими. Обратитесь к веб-сайту Percona за дополнительной информацией.

INNODB Соображения

InnoDB использует пул буферов для повышения производительности. В резервной копии настройте InnoDB, чтобы избежать копирования всей таблицы в пул буферов, поскольку логические резервные копии обычно выполняют полное сканирование таблицы.

Параллелизм внутри стандартных задач Backup Database и Check Database Integrity и интерпретация результата их выполнения

Задачи «Создание резервной копии» и «Проверка целостности базы данных» работают в общем случае со списком баз данных. Будут ли они работать последовательно с каждой базой данных или возникнет множество параллельных задач обслуживания каждой базы? Выполним двойной клик по задаче, в открывшемся диалоге нажмем кнопку «View T-SQL». Мы видим, что в скрипте, который генерируется и исполняется сервером SQL, инструкции создания резервных копий BACKUP DATABASE разделены инструкциями GO, а значит, эти процессы создания резервных копий будут выполняться параллельно. Результат относится не к пакетам, а к заданию в целом. Если возникла ошибка в задании хотя бы с одной базой – в целом задание будет считаться выполненным ошибочно, если ошибок нет – в целом задание считается выполненным успешно.

Параллелизм внутри стандартных задач