2009-08-18 79 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就可以了:)這種方式在最壞的情況下會有一些新的文件不在數據庫轉儲中,但不會有不一致的數據庫條目。