我的一位客户在 Windows Server 2008 系统上运行 MySQL。他们使用 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 备份的文件夹中。
您可以给我一些建议吗?
答案1
由于 MySQL 指令“system”或“!”仅在 Linux 下有效,因此您只能使用 stoppig 服务,获取 vss 快照并启动服务。
系统命令允许从 mysql 内部获取 vss 快照,这样您就不会丢失锁。我相信它用于 LVM 快照备份。
答案2
回答晚了,但我想我找到了办法。至少,当我恢复以这种方式制作的副本时,它没有抱怨 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 实例。