2009-06-09 144 views
2

我有一個測試服務器,使用來自測試數據庫的數據。當我完成測試後,它會移到實時數據庫。MySQL表修改時間戳

問題是,我有其他項目依賴於生產中的數據,所以我必須運行一個腳本,從我需要的表中抓取數據,刪除測試數據庫中的數據並從中插入數據現場數據庫。

我一直在想辦法改進這個模型。問題並不在於遷移,因爲數據只是每週更新一次或兩次(我沒有采取任何行動)。問題是隻有在需要時才進行遷移。我希望我的遷移腳本包含對活動表格和測試表格的快速檢查,並且如果需要的話,請進行移動。如果沒有更新,則腳本退出。

這樣,我可以在我的其他腳本中包含更新腳本,而不必擔心數據是否同步。

我不能使用時間戳。首先,我不能控制活着的桌子上的桌子,而且因爲看起來有點傻,所以爲了方便起見,把桌子放大。

我試着做一個「SHOW TABLE STATUS FROM livedb」,但因爲這些表都是InnoDB,所以沒有「更新時間」,再加上,看起來「創建時間」是今天上午,讓我相信數據庫每天都進行備份和重新創建。

表中是否有任何其他屬性會顯示哪個更新?也許是「最新的行日期」?

回答

2

簡而言之:讓應用程序中的開發實時更新一流。而不是依賴於數據庫引擎爲您提供必要的信息,以使您能夠作出決定(更新或不更新... 即問題),只需將其作爲您的應用程序的一部分來實現。否則,你正試圖將一個圓形釘子插入一個方孔。

不知道你的數據模型是什麼,並沒有理解所有同步模型是什麼,你有幾種選擇:

  1. 對陣活數據庫與測試數據庫的主鍵。當測試>活動ID時,進行更新。
  2. 在表中使用時間戳以確定是否需要更新
  3. 使用數據庫表的md5散列和修改日期(UTC)來確定表是否已更改。

長話短說:數據庫同步非常困難。實施特定於您的應用程序的解決方案。沒有「通用」的解決方案,理想的工作。

0

如果在表格中有自動增量,可以比較最大自動增量值以查看它們是否不同。

但是您使用的是哪個版本的mysql?

+0

問題不僅在於數據是否存在,而且數據是否匹配不幸。這真的讓我擔心它。儘管它是一個測試網站,但一些測試涉及真實世界的情況(一個是需要擁有正確數據的時間表等)。因此,數據儘可能保持最新是至關重要的,而不要讓我的褲子被抓住,並說:「哎呀,讓我運行更新程序。」該版本是5.0.76 Enterprise GPL – Anthony 2009-06-09 04:46:33

0

您可以使用預先存在的解決方案來保持數據庫同步,而不是自己滾動。我聽說過有關SQLYog的SJA的好消息(請參閱here)。我從來沒有用過它,但我對他們的其他程序印象非常深刻。