2011-12-09 20 views
1

基本上,我試圖創建一個接口,告訴管理員「嘿,我們運行了這個查詢,我們不太確定,所以如果它破壞了東西,請點擊這裏撤消它「。檢測目標寫入字段,以便它們可以備份並可能還原

我能想到的最簡單的方法是以某種方式找出已識別的「風險」查詢寫入的表和單元格,並將這些數據與一些簿記數據一起存儲在「備份」表中,以便如果必要的領域可以重新填充其原始內容。

我該如何確定哪些字段被特定的(可能很複雜的)mysql命令覆蓋?

編輯:成功完成但做不想要的事情的「風險」,而不是拋出錯誤或失敗並使系統處於不一致狀態。

+1

使用事務,關閉自動提交,'開始.... end',沒有錯誤,然後提交 – ajreal

+0

除非我誤會,trasactions可能不會有很大幫助。此管理員將查看已運行且幾天或幾周前成功的命令,並選擇在必要時 – Mala

+0

天或一週前將它們回滾?我擔心沒有好的解決方案,因爲如果在修補之前備份副本,那麼數據將在修補程序後增長,但該快照無法趕上最新的更改。所以,我的觀點是沒有簡單的撤銷 – ajreal

回答

0

我建議以下幾點:
- AFTER UPDATE觸發器添加到您想要監視
每個表 - 創建的每一個表的副本(例如:[yourtable] _backup)要監視
- 中所有AFTER UPDATE觸發器,添加代碼:INSERT INTO yourtable_backup VALUES(OLD.field1,OLD.field2 ...,OLD.fieldN)

工作原理:AFTER UPDATE觸發器檢測到表的更新,並備份舊值進入備份表

重要提示:您需要使用INNODB表觸發器的工作格式。觸發器不能與MyISAM表一起使用。

您可以將時間戳字段添加到備份表以瞭解每行何時插入。

文檔:http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html

相關問題