我的一个客户端正在Windows 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进行备份。
请给我一些建议好吗?
发布于 2012-02-15 12:08:59
作为MySQL指令的“系统”或"!“只在linux下工作,您只能停止您的服务,获取您的vss快照并启动服务。
系统命令允许从mysql内部获取vss快照,这样您就不会丢失锁。我相信它是用于LVM快照备份。
发布于 2019-10-21 04:46:39
迟了回答,但我想我找到了办法。至少,当我以这种方式恢复复制时,它没有抱怨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实例。
https://serverfault.com/questions/206784
复制相似问题