《MySQL——恢復數據-誤刪行、表、庫》

目錄

    • 誤刪行
    • 事前預防誤刪行數據方法
    • 誤刪表/庫
    • 延遲復制備庫
    • 事前預防誤刪庫/表方法

傳統的架構不能預防誤刪數據,因為主庫的一個drop table命令,會通過binlog傳給所有從庫和級聯從庫,進而導致整個集群的實例都會執行這個命令。

MySQL相關的誤刪除數據分類:

1、使用delete語句誤刪數據行

2、使用drop table 或者 truncate table 語句誤刪數據表

3、使用drop database語句誤刪數據庫

4、使用rm命令誤刪整個MySQL實例

誤刪行

若使用delete語句誤刪數據行,可以用Flashback工具通過閃回把數據恢復。

原理:修改binlog內容,拿回原庫重放。

前提:binlog_fromat = row 和binlog_row_image = FULL

具體措施:

1、對于insert語句,對應的binlog event 類型為WrIte_rows event,將其改為Delete_rows event

2、同理,對于delete,將Delete_rows event 改為Write_rows event

3、對于Update_rows,binlog記錄了數據行修改前和修改后的值,對調兩行位置即可

如果誤操作是多個,如:

(A)delete ...
(B)insert ...
(C)update ...

若要恢復這三個事務之前狀態,用Flashback工具解析binlog后,寫回主庫:

(reverse C)update ...
(reverse B)delete ...
(reverse A)insert ...

恢復數據的比較安全的做法是恢復出一個備庫,或者找一個從庫作為臨時庫,在這個臨時庫上執行這個操作,然后再將確認過的臨時庫的數據,恢復回主庫。

這是由于發現數據問題時間比較晚,導致會有在誤操作的基礎上的邏輯,如果單獨恢復這個幾行數據,會對數據造成二次破壞。

事前預防誤刪行數據方法

1、把sql_safe_updates參數設置為on。這樣如果忘記在delete或者update語句中寫where條件,或者where條件里沒有包含索引字段,語句執行報錯

2、代碼上線前,必須經過SQL審計

誤刪表/庫

需要刪除一個表時,delete全表很慢,需要生成回滾日志、寫redo、寫binlog,所以常常使用truncate table 或者 drop table。

直接drop表和delete每行的最大區別就是,binlog對delete有詳細的刪除行內容,可是drop表后binlog就只有一個drop語句,恢復不了數據。

使用truncate/drop誤刪除數據時的恢復方法 :使用全量備份,加增量日志。要求對線上有定期的全量備份,并且實時備份binlog。

如果中午誤刪了庫,恢復數據流程如下:

1、取最近一次全量備份,假設這個庫是一天一備,上次備份是當天0點

2、用備份恢復出一個臨時庫

3、從日志被分離,取出0點之后的日志

4、把這些日志,除了誤刪除的數據的語句外,全部應用到臨時庫
在這里插入圖片描述

加速恢復數據

1、如果臨時庫有多個數據庫,可以指定誤刪表所在的庫,這樣就避免了恢復數據時還要應用其他庫日志。

2、應用日志時,跳過誤操作的語句

不過這樣使用mysqlbinlog方法恢復數據不夠快。

mysqlbinlog恢復數據不夠快的原因:不能指定特定數據表、單線程操作

另外的加速方法

在用備份恢復出臨時實例之后,將這個臨時實例設置成線上備庫的從庫。

具體流程:

1、在start slave 之前,執行change replication filter replicate_do_table = (tbl_name),讓臨時庫只同步誤操作的表

2、可以使用并行復制技術,加速數據恢復
在這里插入圖片描述

延遲復制備庫

如果一個庫備份很大,或者誤操作的時間舉例上一個全備份的時間較長,可以搭建延遲復制的備庫縮短恢復數據恢復需要的時間。

一般的主備復制結構存在問題:如果主庫有個表被誤刪了,這個命令很快也會被發給所有從庫,進而導致所有從庫的數據表也都一起被誤刪。

可以主動加大同步延遲,通過CHANGE MASTER TO MASTER_DELAY = N 命令,指定這個備庫始終與主庫有N秒延遲。如果把N設置為3600,代表如果主庫上有數據被誤刪了,并且在1h之內發現了這個誤操作,該命令此時沒有在延遲復制的備庫執行,所以可以到備庫上stop slave,然后跳過誤操作命令,恢復數據。

事前預防誤刪庫/表方法

1、賬號分離。

只給業務開發人員DML權限,不給truncate/drop權限。

DBA團隊成員,也只使用只讀賬號,必要時使用有更新權限的賬號

2、指定操作規范,避免寫錯要刪除的表名。

在刪除數據表之前,對表進行改名操作,并觀察一段時間,若對業務無影響,則刪除

改表名時要給表名加固定的后綴如_to_be_deleted,然后刪除表的動作必須通過管理系統執行。并且管理系統只能刪除固定后綴的表。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377165.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377165.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377165.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python圖例位置_Python | 圖例位置

python圖例位置Legends are one of the key components of data visualization and plotting. Matplotlib can automatically define a position for a legend in addition to this, it allows us to locate it in our required positions. Following is the list of locations…

Freemarker中遍歷List實例

Freemarker中如何遍歷List摘要:在Freemarker應用中經常會遍歷List獲取需要的數據,并對需要的數據進行排序加工后呈現給用戶。那么在Freemarker中如何遍歷List,并對List中數據進行適當的排序呢?通過下文的介紹,相信您一…

工作總結:文件對話框的分類(C++)

原文地址:http://www.jizhuomi.com/software/173.html 文件對話框分為打開文件對話框和保存文件對話框,相信大家在Windows系統中經常見到這兩種文件對話框。例如,很多編輯軟件像記事本等都有“打開”選項,選擇“打開”后會彈出一個…

《MySQL——Innodb改進LRU算法》

Innodb改進LRU.算法,實質上將內存鏈表分成兩段。 靠近頭部的young和靠近末尾的old,取5/12段為分界。 新數據在一定時間內只能在old段的頭部,當在old段保持了一定的時間后被再次訪問才能升級到young。 實質上是分了兩段lru,這樣做的…

nfc/nfc模式_NFC的完整形式是什么?

nfc/nfc模式NFC:沒有進一步評論 (NFC: No Further Comment) NFC is an abbreviation of "No Further Comment". NFC是“沒有進一步評論”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media networking s…

dx小記(2)

1.構造一個平截臺體(Frustum) 最近距離-projMatirx.43/projMatrix.33 projMatrix。33 深度/(深度-最近距離) projMatrix。44-最近距離*(深度/(深度-最近距離)) FrustumMatrix proje…

jQuery: 整理4---創建元素和添加元素

1.創建元素&#xff1a;$("內容") const p "<p>這是一個p標簽</p>" console.log(p)console.log($(p)) 2. 添加元素 2.1 前追加子元素 1. 指定元素.prepend(內容) -> 在指定元素的內部的最前面追加內容&#xff0c;內容可以是字符串、…

Design a high performance cache for multi-threaded environment

如何設計一個支持高并發的高性能緩存庫 不 考慮并發情況下的緩存的設計大家應該都比較清楚&#xff0c;基本上就是用map/hashmap存儲鍵值&#xff0c;然后用雙向鏈表記錄一個LRU來用于緩存的清理。這篇文章 應該是講得很清楚http://timday.bitbucket.org/lru.html。但是考慮到高…

《MySQL——join語句優化tips》

目錄要不要用joinJoin驅動表選擇Multi-Range Read優化Batched Key Access &#xff08;BKA&#xff09;對NLJ進行優化BNL算法性能問題BNL轉BKA要不要用join 1、如果使用的是Index Nested-Loop Join算法&#xff0c;即可以用上被驅動表的索引&#xff0c;可以用 2、如果使用的…

scala中抽象類_Scala中的抽象類

scala中抽象類抽象類 (Abstract Class) In the Scala programming language, abstraction is achieved using abstract class. 在Scala編程語言&#xff0c; 抽象是使用抽象類來實現的。 Abstraction is the process of showing only functionality and hiding the details fr…

不能catch Fatal的exception

Clemens Vasters - Are you catching falling knives?里給了一個判斷C#的exception是不是fatal的代碼&#xff0c;可以參考參考。 public static bool IsFatal(this Exception exception) {while (exception ! null){if (exception as OutOfMemoryException ! null &&…

HDU 2824 The Euler function

篩法計算歐拉函數 #include <iostream> #include <cstdio> using namespace std; const int maxn3000005; long long phi[maxn]; int main(){int i,j,a,b;for(i1;i<maxn;i) phi[i]i;for(i2;i<maxn;i2) phi[i]/2;for(i3;i<maxn;i2)if(phi[i]i){for(ji;j<…

LinkChecker 8.1 發布,網頁鏈接檢查

LinkChecker 8.1 可對檢查時間和最大的 URL 數量進行配置&#xff1b;當使用 HTTP 請求時發送 do-not-track 頭&#xff1b;生成 XML 的 sitemap 用于搜索引擎優化&#xff1b;檢測 URL 長度和重復的頁面內容&#xff1b;修復了很多檢查的 bug。 LinkChecker 是一個網頁鏈接檢查…

c語言語言教程0基礎_C語言基礎

c語言語言教程0基礎Hey, Folks here I am back with my second article on C language. Hope you are through with my previous article C language - History, Popularity reasons, Characteristics, Basic structure etc. In this one, I will cover some fundamental conce…

《MySQL——臨時表》

內存表與臨時表區別 臨時表&#xff0c;一般是人手動創建。 內存表&#xff0c;是mysql自動創建和銷毀的。 內存表&#xff0c;指的是使用Memory引擎的表&#xff0c;建表語法&#xff1a;create table ... engine memeory 表的數據存在內存里&#xff0c;系統重啟后會被清…

android中ActionBar的幾個屬性

actionBar.setHomeButtonEnabled //小于4.0版本的默認值為true的。但是在4.0及其以上是false&#xff0c;該方法的作用&#xff1a;決定左上角的圖標是否可以點擊。沒有向左的小圖標。 true 圖標可以點擊 false 不可以點擊。 actionBar.setDisplayHomeAsUpEnabled(true) //…

drei

模擬9 T3 &#xff08;COGS上也有&#xff0c;鏈接http://218.28.19.228/cogs/problem/problem.php?pid1428&#xff09; 題目描述 輸入a&#xff0c;p&#xff0c;求最小正整數x&#xff0c;使得a^x mod p 1。 分析 神奇的歐拉定理&#xff08;對于gcd&#xff08;a&#xf…

《MySQL——group by使用tips》

1、如果對group by語句結果沒有排序要求&#xff0c;在語句后面加order by null 2、盡量讓group by 過程用上索引&#xff0c;確認方法是explain結果里沒有Using temporary 和Using filesort 3、如果group by 需要統計的數據量不大&#xff0c;盡量只使用內存臨時表&#xff…

css中變量_CSS中的變量

css中變量CSS | 變數 (CSS | Variables) CSS variables allow you to create reusable values that can be used throughout a CSS document. CSS變量允許您創建可在CSS文檔中使用的可重用值。 In CSS variable, function var() allows CSS variables to be accessed. 在CSS變…

位圖像素的顏色 攜程編程大賽hdu

位圖像素的顏色 Time Limit: 2000/1000 MS (Java/Others) MemoryLimit: 32768/32768 K (Java/Others) Total Submission(s): 0 Accepted Submission(s): 0 Problem Description 有一個在位圖上畫出矩形程序&#xff0c;一開始位圖都被初始化為白色&#xff08;RGB顏色表示…