Для кластеров баз данных MySQL и PostgreSQL доступны логические бэкапы. В отличие от физических бэкапов, при их создании не выполняется снимок всей системы. Вместо этого формируются дампы баз данных, которые сохраняются в S3-бакет.
Бэкапы сохраняются в виде SQL-дампа. Перед загрузкой в бакет они архивируются. Точный размер копии заранее определить невозможно — он зависит от структуры и объема данных базы.
Сейчас логические бэкапы находятся в стадии бета-тестирования. Не используйте их как единственный способ резервного копирования важных данных.
На время тестирования создание и хранение бэкапов не тарифицируется. После завершения бета-тестирования стоимость хранения составит 6 ₽ за 1 ГБ в месяц.
Особенности логических бэкапов
- При включении логических бэкапов автоматически создается S3-бакет с доступом только на чтение.
- Для кластера одновременно могут использоваться физические и логические бэкапы.
- В логических бэкапах не сохраняются пользователи и привилегии кластера.
- Трафик бакета учитывается в бесплатном лимите S3-трафика. При его превышении дополнительная тарификация не применяется.
- При удалении кластера S3-бакет с резервными копиями сохраняется. Дампы баз данных остаются в бакете, поэтому вы сможете создать новый кластер и восстановить данные из сохраненного дампа.
- Логические бэкапы доступны только в BGP-сетях.
Автоматическое резервное копирование
Логические бэкапы можно включить на этапе создания кластера.

При включении логических резервных копий на этапе создания кластера:
-
резервные копии создаются ежедневно;
-
одновременно хранится одна копия.
Изменить параметры резервного копирования можно позже.
Также логические бэкапы можно включить для уже существующего кластера. Для этого:
-
Перейдите в раздел «Бэкапы».
-
Нажмите кнопку «Настроить расписание» в строке «Логические бэкапы».

В открывшемся окне включите автоматическое создание бэкапов и укажите:
-
периодичность — ежедневно, еженедельно или ежемесячно;
-
количество одновременно хранимых копий.
После этого нажмите «Сохранить».

Если для кластера ранее не создавались логические бэкапы, будет автоматически создан S3-бакет. Он отобразится в разделе «Хранилище S3» с пометкой «Бэкапы БД».

Ручное резервное копирование
При необходимости вы можете создать резервную копию вручную. Для этого:
-
Перейдите в раздел «Бэкапы».
-
Нажмите кнопку «Создать бэкап».
-
В открывшемся меню при необходимости укажите комментарий к бэкапу.
-
Нажмите кнопку «Создать».

Если автоматическое резервное копирование включено, ручная копия будет сохранена в тот же S3-бакет. Если автоматическое резервное копирование отключено, при создании ручной копии автоматически создается новый S3-бакет.
Восстановление данных из резервной копии
На время бета-тестирования восстановление из резервной копии через панель управления недоступно. Вы можете восстановить данные вручную. Для этого скачайте SQL-дамп из S3-бакета.
SQL-дампы находятся в S3-бакете, который создаётся для хранения резервных копий. Подключиться к бакету можно с помощью S3-клиентов или через панель управления, перейдя в раздел «Объекты» выбранного бакета.

Из дампа можно развернуть базу локально или восстановить данные в кластере DBaaS. Для восстановления в облачную базу данных дамп необходимо предварительно отредактировать.
Распакуйте скачанный дамп:
gzip -dk имя_дампа.sql.gz
После выполнения команды исходный архив сохранится. При необходимости вы сможете снова распаковать его и получить исходную версию дампа.
Затем отредактируйте дамп с помощью команды, указав имя файла дампа вместо имя_дампа.sql:
sed -E ' /^SET /d; /^\/\*![0-9]+ SET /d; /rocksdb_/d; /^\/\*![0-9]+ PREPARE s FROM @/d; /^\/\*![0-9]+ EXECUTE s \*\//d; /^\/\*![0-9]+ DEALLOCATE PREPARE s \*\//d ' имя_дампа.sql > backup_clean.sql
В результате будет создан очищенный дамп backup_clean.sql, который можно использовать для восстановления.
На время восстановления предоставьте все привилегии пользователю, от имени которого будет загружен дамп.
Перед импортом необходимо очистить базу данных. Подключитесь к базе через командную строку и выполните:
SET FOREIGN_KEY_CHECKS=0;
Затем выполните запрос, указав имя базы данных:
SELECT CONCAT('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema='имя_базы';
Скопируйте полученные команды DROP TABLE и выполните их, чтобы удалить существующие таблицы.
После этого снова включите проверку внешних ключей:
SET FOREIGN_KEY_CHECKS=1;
Затем выйдите из интерактивной оболочки MySQL (Ctrl+D).
Если для кластера настроена репликация, на время восстановления установите параметр pxc_strict_mode в значение PERMISSIVE или DISABLED.
Для восстановления базы используйте команду подключения, добавив перенаправление из файла дампа. Команда будет выглядеть примерно так:
mysql -u gen_user -p'pdn?Uu1337oUeOp' \
-h f767dae90b23251eee5474.twc1.net \
-P 3306 \
-D default_db \
--ssl-mode=VERIFY_IDENTITY \
--ssl-ca=$HOME/.cloud-certs/root.crt \
< backup_clean.sql
После выполнения команды данные из дампа будут импортированы в базу.
Управление резервными копиями
Все резервные копии отображаются в разделе «Бэкапы». Чтобы открыть список копий, нажмите на кнопку с их количеством.
Нажав на меню с тремя точками рядом с бэкапом, вы можете изменить его комментарий или удалить резервную копию.

Отключение логических бэкапов
Чтобы отключить создание логических бэкапов:
-
Перейдите во вкладку «Бэкапы».
-
Нажмите кнопку «Настроить расписание» в строке «Логические бэкапы».
-
В открывшемся окне переведите переключатель в состояние «Выключено».
После этого новые резервные копии создаваться не будут.
Уже созданные бэкапы в S3-бакете продолжат тарифицироваться. Во время бета-тестирования тарификация не применяется, но после его завершения удалённый бакет будет тарифицироваться.
Чтобы прекратить списания, удалите ненужные резервные копии вручную или удалите S3-бакет с бэкапами целиком.