#mysql #резервное_копирование #mariadb
Ситуация такова: есть мастер-сервер MySQL (ну или MariaDB, если быть точным), есть реплика. Каждую ночь mysqld с репликой отключается на время, и папочка с БД реплики (условная /var/lib/mysql) пихается в архив с бэкапом, после чего mysqld включается обратно. Такие дела у меня с 2014 года (делалось по принципу «потом разберусь», и это «потом» должно когда-то уже наступить :). Я периодически пробую выкатывать старые бэкапы — работает. Пока работает. Так как такое копирование не является «легальной» формой создания бэкапа (это всё-таки не mysqldump и не xtrabackup какие-нибудь), у меня нет полной уверенности в его надёжности. Если кто достаточно хорошо знает, как работает MySQL/MariaDB, расскажите, есть ли какие-нибудь подводные камни, которые могут вылезти у таких бэкапов в будущем? Или, если не забывать запускать mysql_upgrade, всё будет хорошо? Или, может, есть какие-то зависимости от ОС, системных библиотек или параметров конфигурации, которые могут случайно сломать такой бэкап?
Ответы
Ответ 1
Просто копировать каталог базы нельзя. Но вы-то его копируете не просто, а остановив базу. Так как такое копирование не является «легальной» формой создания бэкапа Является раз - Cold Backups. Является два. - Making Backups Using a File System Snapshot. Копирования каталога и файлов конфигурации базы при остановленной базе является допустимым вариантом. Но, как это водится с бекапами - в любом случае полезно регулярно проверять, что вы можете восстановиться из бекапа. Для бекапа innodb таблиц указана рекомендация останавливать СУБД как clean shutdown, т.е. с указанием mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0" # выключить базу # убедиться, что она действительно выключилась # скопировать datadir и конфиги # запустить базу вновь Восстанавливать из физического бекапа разумеется надо на ту же major-версию, что и использовалась перед снятие бекапа и не ниже такой же минорной. Так как для major обновления версии базы существуют отдельные инструкции. Хотя и весьма близкие по смыслу инструкции, но не надо совмещать апгрейд системы и восстановление после аварии.Ответ 2
Если вы останавливаете БД с репликой, то, при прочих равных, вы получаете целостную копию базы. Никаких проблем быть не должно. Проблемы могут быть если вы думаете, что остановили БД с репликой, а на самом деле что-то пошло не так и реплика всё ещё работает. Стоит проверять что в самом деле никакой процесс MySQL не занимает файлы БД перед копированием. Такая ситуация может возникнуть потому что скрипты, выключающие БД, ждут выключения лишь фиксированное время. Если за это время MySQL не выключится, то скрипты завершатся с ошибкой. Если эту ошибку не проверять в скрипте (например, через set -e), то ваша программа будет копировать файлы БД, которые изменяются по ходу дела. Естественно, в такой копии БД может быть всё, что угодно.
Комментариев нет:
Отправить комментарий