2012-02-24 75 views
4

只想知道在實時數據庫上運行mysqldump有什麼風險?有沒有數據庫損壞的機會? mysqldump似乎鎖定整個數據庫。在實時數據庫上運行mysqldump

+0

'man mysqldump' – silly 2012-02-24 14:45:52

+1

本網站專門提供編程問題,而您的問題似乎更適合http://dba.stackexchange.com。你可能會在那裏得到更快的相關答案。 – 2012-02-24 14:47:23

回答

2

數據庫表使用什麼引擎?如果您使用的是事務表,則可以使用「單事務」選項進行轉儲,這會將錶轉儲爲一致狀態。如果您使用MyISAM等非事務性表格,則不應有任何數據庫損壞問題。如果您遇到種族情況,您可能會遇到不一致的數據問題。無論哪種情況,在轉儲發生時,您都會顯着減慢數據庫響應時間。最好的辦法是在運行轉儲之前,先對一個奴隸運行轉儲或等待該站點靜止。

+0

我爲這個數據庫使用MyISAM。當mysqldump正在運行時,我將用戶鎖定3/4分鐘,目前確定無誤。在這一點上,我更關心數據的完整性。 – rpat 2012-02-24 15:02:20

+0

以下是您可能遇到的問題。假設我有一個帶有「水果」表和一個「購物袋」的數據庫。我正在運行我的轉儲,我鎖定了水果桌並將其轉儲。假設之後有人向水果桌上添加新的水果,並且某人將新的水果放入他們的購物袋中(在shopping_bag表中創建一行引用新的水果行)。當購物袋被傾倒時,您現在有一排參考不存在的水果!這不一定會導致你的問題......但它可能,而且是不一致的。 – rpierce 2012-02-24 15:18:53

+0

這正是我的擔心所在。我一直在運行mysqldump。我偶爾會看到不一致的地方。我不確定他們來自哪裏。 mysqldump通過cron運行。所以我無法知道這些不一致是否由mysqldump引起。我無法經營奴隸。我認爲數據庫在轉儲過程中被鎖定。有沒有辦法做到這一點,因爲用戶無論如何都不能做任何事情,當他轉儲運行 – rpat 2012-02-24 15:33:47

0

從我的經驗來看,它是傾銷時的表鎖。如果您的數據庫處於較大的一端,並且您的流量很大,那麼您就必須恢復流量。我不認爲數據損壞會成爲一個問題,因爲它在轉儲該表的數據之前鎖定了一個表。但是,如果我對錶鎖是錯誤的,並且它是數據庫鎖,那麼在轉儲過程中基本上關閉了數據庫,但這就是隊列的用途,當轉儲完成時,它將按順序開始執行隊列因爲他們收到。

+0

我不確定鎖定部分。它需要3/4分鐘來轉儲數據庫。在這段時間阻止用戶對我來說確實沒問題。但是任何類型的數據完整性都是不可接受的。 – rpat 2012-02-24 14:58:18

相關問題