Это, вероятно, частый вопрос, но я сейчас не могу найти действительно точное совпадение.
Ответ: НЕТ - вы не можете использовать инструменты копирования на уровне файловой системысоздать резервную копию базы данных MySQL, если процесс mysqld не остановлен. В среде Docker можно ожидать, что контейнер остановится, если остановится процесс mysqld.
Даже если не выполняется никаких запросов, механизм InnoDB, вероятно, выполняет записи в фоновом режиме, чтобы сбросить страницы из памяти в табличное пространство. , очистить откат транзакций или завершить некоторые отложенные слияния индексов.
Если вы попытаетесь использовать rsync
или cp
или любые другие инструменты уровня файловой системы для копирования файлов InnoDB, вы будете только поврежденыфайлы, которые не могут быть восстановлены.
Некоторые люди используют моментальные снимки LVM, чтобы получить атомарный снимок всей файловой системы за одно мгновение, и это можно использовать для быстрого резервного копирования.
Другим полезным инструментом является Percona XtraBackup, который копирует файлы табличного пространства InnoDB, а также постоянно копирует журнал транзакций InnoDB. Только с обоими из них в синхронизации может быть восстановлена резервная копия. Прочитайте документацию здесь: https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
На моей текущей работе мы используем Percona XtraBackup для создания ночных резервных копий для тысяч экземпляров MySQL. Мы запускаем Percona Server (не MariaDB) в модулях Docker, а Percona XtraBackup запускается как другой контейнер в модуле. Он работает очень хорошо, и это бесплатное программное обеспечение с открытым исходным кодом.