Резервное копирование MariaDB в Docker и извлечение дампа из контейнераИнструкция подходит для MariaDB, работающей в Docker-контейнере. В качестве примера используются контейнер [tt]mariadb-galera[/tt] и хост [tt]web-01[/tt].
Исходные данные:Контейнер: mariadb-galera
Образ: mariadb:10.11
Каталог данных: /srv/docker/mariadb/data
Каталог бэкапов: /root/galera-backup
1. Создание полного дампа внутри контейнераПодключаемся к контейнеру:
docker exec -it mariadb-galera shВыполняем резервное копирование всех баз данных:
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. Извлечение дампа из контейнера на хостВыходим из контейнера:
exitСоздаём каталог резервных копий на хосте:
mkdir -p /root/galera-backup
chmod 700 /root/galera-backup
Копируем файл из контейнера на хост:
docker cp mariadb-galera:/tmp/galera-all-databases.sql
/root/galera-backup/web-01-all-databases.sql
Команда [tt]docker cp[/tt] копирует файл из контейнера на хост. Останавливать контейнер для этого не требуется.
3. Сжатие и проверка резервной копииСжимаем файл:
gzip /root/galera-backup/web-01-all-databases.sql
Проверяем целостность архива:
gzip -t /root/galera-backup/web-01-all-databases.sql.gz
echo "Код проверки: $?"
Код проверки [tt]0[/tt] означает, что архив прошёл проверку целостности gzip.
Вычисляем контрольную сумму:
sha256sum /root/galera-backup/web-01-all-databases.sql.gz
Сохраняем значение SHA-256 отдельно от резервной копии. Оно понадобится для последующей проверки неизменности файла.
4. Как скопировать дамп обратно в контейнерПри необходимости возвращаем архив в контейнер:
docker cp /root/galera-backup/web-01-all-databases.sql.gz
mariadb-galera:/tmp/galera-all-databases.sql.gz
Распаковываем его внутри контейнера:
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, секреты доступа и другие необходимые компоненты окружения.