2011-04-15 67 views
0

我在同一個Linux機器上有2個MySQL數據庫。它們不是超大的,但有些桌子可容納500,000行,每月增加大約40,000行。增量MySQL

我需要做的是從一個數據庫向另一個數據庫每天寫一次部分備份。這部分備份是一個快照,除了備份之外,不會有任何新的數據寫入它。它僅包含主分區的一些表格,並且僅包含一些字段的表格。

編寫一個刪除備份數據庫的PHP腳本,然後用所需的數據重新創建一個新的快照很容易,但是我想知道是否有一種方法可以用PHP逐步完成此操作寫入新的或更改的數據。

+3

您在** ** **機器上從一個數據庫備份到另一個數據庫?什麼是備份? – halfdan 2011-04-15 12:51:48

回答

1

你的數據庫中是否有時間戳字段?使用ON UPDATE CURRENT_TIMESTAMP子句的時間戳可以讓您知道每行的修改時間。這樣,您可以輕鬆地對行WHERE時間戳大於給定值的SELECT查詢。

+0

是的..好想法,謝謝你 – user606336 2011-04-15 14:13:43

1

如果您正在檢查多條記錄上的新數據或更改數據,則該數據在機器上會很大。每條記錄必須與另一個數據庫中的記錄進行比較。將會非常緩慢而巨大的性能影響。

最好的辦法是使用專爲此任務設計的備份軟件。如果你真的想要一個PHP解決方案,我會向數據庫添加一個名爲changes的新表。它將保存表名和密鑰索引。

然後在需要備份的每個表上添加一個觸發器,該備份將使用表名和密鑰在更改表中輸入新條目。然後你的PHP腳本可以查詢這個表來查找更改和新項目,只查詢這些。

而不是使用一個單獨的表,您可以添加一個微小的int列到名爲lastAction的現有表或其他東西,並存儲0爲無變化,1爲更新和2爲新記錄。

然後,您可以只查詢所需的數據。

請記住,具有兩個數據庫的PHP解決方案永遠不可靠。您需要如下的結構:

1 Query record from old database 
2 Update/insert record in new database 
3 Mark old database record as completed. 

這很可能是您第2步完成後,你失去連接到舊數據庫,不能再設置它來完成。這將導致記錄在下次運行中被更新或添加。

另一個問題可能是第1步和第2步之間有人再次改變記錄。然後,在備份中插入較舊的值並將其標記爲已完成。而最新的更新將不再備份。