Резервное копирование MariaDB в Docker и извлечение дампа из контейнера

Автор George, Окт. 14, 2026, 02:36

« назад - далее »

George

Резервное копирование MariaDB в Docker и извлечение дампа из контейнера

Инструкция подходит для MariaDB, работающей в Docker-контейнере. В качестве примера используются контейнер [tt]mariadb-galera[/tt] и хост [tt]web-01[/tt].

Исходные данные:
Код: bash
Контейнер:          mariadb-galera
Образ:              mariadb:10.11
Каталог данных:     /srv/docker/mariadb/data
Каталог бэкапов:    /root/galera-backup

1. Создание полного дампа внутри контейнера

Подключаемся к контейнеру:

Код: bash
docker exec -it mariadb-galera sh

Выполняем резервное копирование всех баз данных:

Код: bash
mariadb-dump -uroot -p 
  --all-databases 
  --quick 
  --single-transaction 
  --routines 
  --events 
  --triggers \
  > /tmp/galera-all-databases.sql

echo "Код завершения: $?"
ls -lh /tmp/galera-all-databases.sql
tail -n 5 /tmp/galera-all-databases.sql

При запросе вводим пароль пользователя root MariaDB.

Параметры:
  • [tt]--all-databases[/tt] — все базы данных, включая системные.
  • [tt]--quick[/tt] — чтение строк без загрузки всей таблицы в память.
  • [tt]--single-transaction[/tt] — согласованный снимок транзакционных таблиц InnoDB.
  • [tt]--routines[/tt] — сохранение хранимых процедур и функций.
  • [tt]--events[/tt] — сохранение событий.
  • [tt]--triggers[/tt] — сохранение триггеров.

Важно: параметр [tt]--single-transaction[/tt] не гарантирует согласованность таблиц MyISAM и других нетранзакционных движков. На время резервирования следует исключить запись и DDL-изменения.

2. Извлечение дампа из контейнера на хост

Выходим из контейнера:

Код: bash
exit

Создаём каталог резервных копий на хосте:

Код: bash
mkdir -p /root/galera-backup
chmod 700 /root/galera-backup

Копируем файл из контейнера на хост:

Код: bash
docker cp mariadb-galera:/tmp/galera-all-databases.sql 
  /root/galera-backup/web-01-all-databases.sql

Команда [tt]docker cp[/tt] копирует файл из контейнера на хост. Останавливать контейнер для этого не требуется.

3. Сжатие и проверка резервной копии

Сжимаем файл:

Код: bash
gzip /root/galera-backup/web-01-all-databases.sql

Проверяем целостность архива:

Код: bash
gzip -t /root/galera-backup/web-01-all-databases.sql.gz
echo "Код проверки: $?"

Код проверки [tt]0[/tt] означает, что архив прошёл проверку целостности gzip.

Вычисляем контрольную сумму:

Код: bash
sha256sum /root/galera-backup/web-01-all-databases.sql.gz

Сохраняем значение SHA-256 отдельно от резервной копии. Оно понадобится для последующей проверки неизменности файла.

4. Как скопировать дамп обратно в контейнер

При необходимости возвращаем архив в контейнер:

Код: bash
docker cp /root/galera-backup/web-01-all-databases.sql.gz 
  mariadb-galera:/tmp/galera-all-databases.sql.gz

Распаковываем его внутри контейнера:

Код: bash
docker exec mariadb-galera sh -c 
  'gzip -dc /tmp/galera-all-databases.sql.gz > /tmp/galera-all-databases.sql'

На этом этапе файл только подготовлен к использованию. Импортировать его без отдельного плана восстановления не следует: полный дамп содержит системные базы и может затронуть пользователей, привилегии и служебные данные MariaDB.

5. Особенности резервирования Galera

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

Рекомендуемый порядок:
  • Создать полный дамп на [tt]web-01[/tt].
  • Проверить завершение дампа, его размер и целостность архива.
  • Отдельно создать и проверить резервную копию [tt]web-02[/tt].
  • Сохранить контрольные суммы обоих архивов.
  • Перед восстановлением убедиться, что необходимые базы и последние изменения сохранены.

Не следует считать дамп одного узла гарантией сохранности всех последних изменений другого узла, пока синхронизация между ними не подтверждена.

Предупреждение: не удаляйте файлы Galera, не очищайте каталог данных и не запускайте bootstrap только ради устранения ошибки SST. Сначала должны быть проверены резервные копии и определено наиболее актуальное состояние данных.

Примечание: SQL-дамп сохраняет логическое содержимое баз, но не является побайтовой копией работающего каталога MariaDB. Для полного аварийного восстановления также необходимо учитывать конфигурацию контейнера, настройки MariaDB, секреты доступа и другие необходимые компоненты окружения.
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.