Один из моих клиентов работает с MySQL в системе Windows Server 2008. Их регулярное резервное копирование выполняется с помощью StorageCraft ShadowCopy, который использует службу VSS для резервного копирования открытых файлов.
Некоторые исследования показывают, что MySQL не полностью поддерживает VSS и что таблицы необходимо заблокировать перед теневой операцией, а затем разблокировать. Есть сообщение на http://forum.storagecraft.com/Community/forums/p/548/2702.aspx который указывает шаги, которые необходимо выполнить, однако у пользователя возникли некоторые трудности при их выполнении, и никакого последующего решения не было опубликовано. В частности, им удалось написать пакетный файл для блокировки базы данных, однако, как только пакетный файл возвращается из MySQL, он разрывает соединение и, таким образом, снимает блокировку.
Я ищу способ отправить команду MySQL FLUSH TABLES WITH READ LOCK
, затем выполните резервное копирование и отправьте UNLOCK TABLES
когда резервное копирование будет завершено.
В качестве альтернативы я могу исключить папку хранения данных MySQL из резервной копии и запланировать mysqldump
резервное копирование в папку, которая затем будет скопирована VSS.
Могу я дать несколько рекомендаций?
Поскольку инструкция MySQL «system» или «!» Работает только под Linux, вы застряли с остановкой вашей службы, сделайте снимок вашего vss и запустите службу.
Системная команда позволит сделать снимок vss из mysql, чтобы вы не потеряли блокировки. Я считаю, что он используется для резервного копирования LVM Snapshot.
Поздний ответ, но я думаю, что нашел способ. По крайней мере, когда я восстановил свою копию, созданную таким образом, он не жаловался на то, что последовательности журналов InnoDB находятся в будущем, и не обвинял меня в неправильном выключении сервера - хотя он действительно думал, что произошел сбой, и восстановил его с помощью двоичных журналов. YMMV, проверьте свои резервные копии, прежде чем полагаться на них.
РЕДАКТИРОВАТЬ: Также не уверен, насколько это будет полезно для ShadowProtect, но, возможно, посмотрите, сможете ли вы запустить процесс резервного копирования из командной строки и запустить его как запланированное задание. Это определенно поможет, если вы хотите использовать VSS изначально.
Вот командный файл, который я использую, он называется flush_lock_vss.bat
- Приводы M и L предназначены для журналов данных и двоичных журналов соответственно:
@echo off
echo FLUSH TABLES WITH READ LOCK;
vssadmin create shadow /for=m: >&2
vssadmin create shadow /for=l: >&2
echo UNLOCK TABLES;
echo \q
Подключите ввод этого в mysql
процесс - запускать конечно от имени администратора:
C:\where\you\are> flush_lock_vss | C:\path\to\mysql-install\bin\mysql.exe -u username --password=TotallySecretPwd!
Вы увидите вывод для команд vssadmin, но FLUSH
и UNLOCK
команды будут отправлены в ваш экземпляр MySQL.