2009-08-18 72 views
3

我使用rsync备份我的服务器上的文件,使用mysqldump备份我的数据库。这是我的担心:确保mysqldump的数据完整性<-> rsync

我的数据库上的mysqldump大约需要30秒。我有一张名为“照片”的表格,用于存储有关用户上传的图像的信息,包括文件的路径。我担心在完成mysqldump所需的30秒内上传或删除照片时会发生什么情况。如果发生这种情况,然后我要恢复rsync'd文件和mysqldump数据,那么我可以查看包含指向已删除照片的行的数据库,或者查看成功上传照片的行。

如何确保mysqldump与rsync完全匹配?

由于提前, 布赖恩

回答

1

使用LOCK TABLES从你备份的表阻止任何写操作。然后解锁他们,一旦你的mysqldump完成。

+1

将表锁定在mysqldump的持续时间内是不够的 - 您还需要在rsync运行时保持锁定状态。否则,如果例如rsync跟在转储之后,文件可能在转储声明应该存在的磁盘上被删除;但这些文件不会在rsync中结束。 – 2009-08-18 05:35:32

+0

因此 - 如果表被锁定并且用户上载文件,那么一旦表被解锁,用于创建记录的INSERT查询将继续进行?如果查询需要等待30秒以上,那么这很糟糕吗? – Brian 2009-08-18 16:04:10

0

您可以使用MD5生成mysqldump(在服务器上)和rsync传输(本地),然后比较两个哈希以确保它们匹配。 另一种方法是将mysqldump设置为受版本控制的文件(使用git或svn或您最喜欢的vcs)。例如,使用git的好处在于,您可以轻松设置一些提交后挂接以将更改推送到远程服务器,而上传只是版本之间的差异,而不是整个转储。这样你可以考虑减少备份时间。

1

我认为答案很简单,只需在完成mysqldump之后运行rsync就可以了:)这种方式在最坏的情况下会有一些新的文件不在数据库转储中,但不会有不一致的数据库条目。