基本上,我試圖創建一個接口,告訴管理員「嘿,我們運行了這個查詢,我們不太確定,所以如果它破壞了東西,請點擊這裏撤消它「。檢測目標寫入字段,以便它們可以備份並可能還原
我能想到的最簡單的方法是以某種方式找出已識別的「風險」查詢寫入的表和單元格,並將這些數據與一些簿記數據一起存儲在「備份」表中,以便如果必要的領域可以重新填充其原始內容。
我該如何確定哪些字段被特定的(可能很複雜的)mysql命令覆蓋?
編輯:成功完成但做不想要的事情的「風險」,而不是拋出錯誤或失敗並使系統處於不一致狀態。
基本上,我試圖創建一個接口,告訴管理員「嘿,我們運行了這個查詢,我們不太確定,所以如果它破壞了東西,請點擊這裏撤消它「。檢測目標寫入字段,以便它們可以備份並可能還原
我能想到的最簡單的方法是以某種方式找出已識別的「風險」查詢寫入的表和單元格,並將這些數據與一些簿記數據一起存儲在「備份」表中,以便如果必要的領域可以重新填充其原始內容。
我該如何確定哪些字段被特定的(可能很複雜的)mysql命令覆蓋?
編輯:成功完成但做不想要的事情的「風險」,而不是拋出錯誤或失敗並使系統處於不一致狀態。
我建議以下幾點:
- 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
使用事務,關閉自動提交,'開始.... end',沒有錯誤,然後提交 – ajreal
除非我誤會,trasactions可能不會有很大幫助。此管理員將查看已運行且幾天或幾周前成功的命令,並選擇在必要時 – Mala
天或一週前將它們回滾?我擔心沒有好的解決方案,因爲如果在修補之前備份副本,那麼數據將在修補程序後增長,但該快照無法趕上最新的更改。所以,我的觀點是沒有簡單的撤銷 – ajreal