技術分享 MySQL資料誤刪除的總結

2022-09-14 03:36:07 字數 1855 閱讀 9470

恢復方式:使用binlog,利用flashback工具恢復,flashback的原理是修改binlog拿到原庫里回放,這個方案的前提是binlog_format=row 並且binlog_row_image=full

單個事務的處理:

1.insert 對應的 write_row event 改成delete_row event

2.delete 對應的 delete_row event 改成write_row event

3.update binlog中記錄了修改前和修改後的值,對掉位置就可以了

多個事務的處理注意調整事務的順序,說完事後處理,下面說下事前預防:

1.將sql_safe_updates設定為on,這樣delete和update中無where子句的語句就會報錯,生產如果要執行整表刪除可以用truncate或者where 1=1。

2.上線,必須做sql審計,至少也要在測試環境完成驗證。

恢復方式:全量備份+binlog恢復,這裡無法使用flashback工具,原因是drop table、truncate table 即使用的是binlog_format=row但在binlog中記錄還是statement格式

恢復的技巧:因為使用mysqlbinlog無法指定表恢復,可以將全量恢復出的臨時庫做為主庫的備庫,然後指定表恢復,可以加快恢復速度。恢復方式:使用延遲複製的備庫,5.6以後的功能通過change master to master_delay=n,n的單位是秒。

change master to master_delay=n
減少誤操作的建議,賬號分離:

1.業務賬號,預設只給select update insert許可權,delete許可權需要按表申請,ddl通過運維平台完成,如有自動建表的需求,可以指定分create table的許可權。

2.開發同事和dba只給唯讀許可權,變更操作通過運維平台完成,如果需要更高許可權,再單獨申請。

3.刪除表的時候遵循修先改表名再刪除的方式操作,表名統一命名字首,並放到指定的臨時庫里,刪除操作由平台自動統一完成。

這個就只能靠我們的ha了,如果系統層面誤操作,把我們的集群主機乾掉了,那就得靠我們的跨機房ha了。

以上是對誤刪除資料恢復的總結,作為dba我們也要時刻關注業務,雖然被誤刪除的資料一定是要找回來的,但是恢復業務不一定要恢復全部資料。

舉個例子,我們誤操作的是一張日誌表只寫不讀那就不影響業務,給我們恢復的時間就比較寬裕,不恢復那是肯定不行滴!又或者是我們進行了drop table,交易要寫這張表,幾乎不讀,那先恢復個表結構。這些要日常積累業務知識,並迅速與開發確認,確保自己做出的決策能恢復業務且不影響業務完整性。

每次誤操作都是血的教訓,在沒有想清楚sql執行的結果之前,先不要敲下回車鍵哦!資料是公司的生命線,我們做為資料庫管理員,要守好公司的生命線。

最後,作為dba技術原理要精通,庫對應的業務也要了解哦,這樣遇到問題的時候我們才能找到更全面更合理的解決方案。

enjoy mysql

mysql 誤刪除資料恢復

第一步 保證mysql已經開啟binlog 值必須為on 開啟binlog方法 第二步 檢視binlog存放日誌檔案目錄 第三步 檢視binlog row image 值必須為full 修改 binlog row image 第四步 檢視binlog模式 必須為行級模式row 修改模式方法 第五步 ...

恢復誤刪除的資料

scn 系統改變號 它的英文全拼為 system change number 它是資料庫中非常重要的乙個資料結構。scn提供了oracle的內部時鐘機制,可被看作邏輯時鐘,這對於恢復操作是至關重要的 注釋 oracle 僅根據 scn 執行恢復。它定義了資料庫在某個確切時刻提交的版本。在事物提交時,...

mysql誤刪 mysql資料庫誤刪除後怎麼辦?

在日常運維工作中,對於資料庫的備份是至關重要的!資料庫對於 的重要性使得我們對 mysql 資料庫的管理不容有失!然而是人總難免會犯錯誤,說不定哪天大腦短路了,誤操作把資料庫給刪除了,怎麼辦?下面,就 mysql 資料庫誤刪除後的恢復方案進行說明。一 工作場景 mysql資料庫每晚12 00自動完全...