Моя шпаргалка :)

Мануалы и настройки => Настройки *nix (почта, web, система etc) => Тема начата: George от Окт. 14, 2026, 02:36

Название: Резервное копирование MariaDB в Docker и извлечение дампа из контейнера
Отправлено: George от Окт. 14, 2026, 02:36
Резервное копирование 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]--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

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

Рекомендуемый порядок:

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

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

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