mysql誤刪后使用binlog恢復數據

1 預期效果

使用 binlog 恢復數據的預期效果是將誤刪的數據還原到誤刪之前的狀態,以減少或消除數據丟失的影響。通過正確解析和執行 binlog 中的操作記錄,可以重新執行誤刪操作之后的插入、更新或刪除操作,從而恢復被誤刪的數據。

  1. 數據恢復:通過恢復誤刪操作之后的操作記錄,可以將誤刪的數據重新插入到數據庫中,還原到誤刪之前的狀態。這意味著恢復后的數據庫將包含被誤刪的數據,以及誤刪之后的其他操作。

  2. 數據一致性:如果只選擇了誤刪操作之后的操作記錄進行恢復,而忽略了其他更改操作,可以確保恢復后的數據保持一致性。這意味著只有被誤刪的數據會恢復,而其他更改操作不會被重新執行。

  3. 最小化數據丟失:使用 binlog 恢復數據可以最小化數據丟失的影響。通過恢復誤刪操作之后的操作記錄,可以盡可能地還原被誤刪的數據,而無需依賴數據庫備份或其他手段。

需要注意的是,預期效果可能受到以下因素的影響:

  • 其他更改操作:如果誤刪操作之后進行了其他更改操作,恢復過程可能會導致這些操作被重新執行,可能會引起數據不一致或沖突。因此,在執行恢復操作之前,應仔細分析 binlog 文件,并選擇適當的操作記錄進行恢復。

  • 數據庫狀態和依賴項:誤刪操作可能依賴于特定的數據庫狀態或外部數據。在執行恢復操作之前,應確保數據庫的環境和依賴項與誤刪操作發生時相同,以確保恢復的數據能夠正確關聯和使用。

  • 恢復操作的正確性:正確解析和執行 binlog 中的操作記錄是關鍵。在執行恢復操作之前,應仔細驗證和測試恢復過程,確保操作記錄的準確性和正確性。

2實現原理

binlog記錄了數據庫中的所有更改操作,以便在需要時進行數據恢復、主從復制和數據審計等操作。通過解析和分析binlog,可以還原數據庫中的數據更改歷史,并進行相應的操作,例如數據恢復或主從復制等

下面是使用 binlog 恢復數據的一般原理:

  1. 確認誤刪的時間點:首先,需要確定誤刪操作發生的時間點。這將幫助你確定要恢復的數據范圍,以便從 binlog 中提取相應的操作記錄。

  2. 導出 binlog 文件:找到包含誤刪操作的 binlog 文件。這通常是通過查看 MySQL 數據庫的配置文件(如 my.cnf 或 my.ini)中的 binlog 相關配置參數來確定。將該 binlog 文件復制到安全的位置,以便進行恢復操作。

  3. 解析 binlog 文件:使用?mysqlbinlog?工具來解析 binlog 文件,并將其轉換為可讀的 SQL 語句。例如,可以執行以下命令:mysqlbinlog binlog-file > output.sq? ? ? ? ? ? ? 其中?binlog-file?是實際的 binlog 文件名,output.sql?是輸出的 SQL 文件,包含了所有的操作記錄。

  4. 過濾和恢復操作:在生成的 SQL 文件中,可以根據誤刪操作發生的時間點,選擇需要恢復的操作記錄。可以手動編輯 SQL 文件,刪除不需要的操作記錄,只保留誤刪操作之后的操作語句。確保只包含了需要恢復數據的操作。

  5. 執行恢復操作:使用數據庫客戶端連接到 MySQL 數據庫,并執行編輯后的 SQL 文件,將其中的操作語句逐個重新執行。這將重新執行誤刪操作之后的操作,從而還原到誤刪前的數據狀態。

需要注意的是,使用 binlog 恢復數據存在一些限制和風險,包括:

  • 誤刪操作之后的其他修改:如果誤刪操作之后的時間段內進行了其他更改操作,這些操作也將被重新執行,可能會導致數據不一致或沖突。在恢復數據之前,應仔細分析 binlog 文件,確保只恢復必要的操作。

  • 依賴外部數據和狀態:如果誤刪操作涉及到外部數據或依賴于特定的數據庫狀態,恢復過程可能會受到影響。在執行恢復操作之前,確保數據庫的環境和依賴項與誤刪操作發生時相同。

  • 數據庫備份和恢復策略:為避免數據丟失和誤刪除的影響,建議實施定期的數據庫備份和恢復策略,并測試和驗證備份的可用性和完整性。

3實際操作

3.1 查看自己的binlog日志是否打開

在黑窗口中輸入命令查看show variables like 'log_bin%' ;? ,一般都是默認打開的

  1. log_bin 變量被設置為 ON,表示二進制日志功能已經啟用。

  2. log_bin_basename 顯示二進制日志文件的路徑和文件名前綴。

  3. log_bin_index 顯示二進制日志索引文件的路徑。

  4. 其他一些與二進制日志相關的配置項的值。

    sql_log_bin 是 MySQL 中一個非常有用的系統變量,它控制當前會話是否將執行的 SQL 語句記錄到二進制日志中。

    可以通過SET sql_log_bin = 1;修改成ON

3.2 查看binlog文件

通過上一步查詢的log_bin_basename得到的路徑打開存儲binlog文件的文件夾

可以看到已經有很多log文件了

(這里我們是要測試binlog恢復數據的使用,所以就日志文件都放到一個全新binlog文件中方便查詢使用,如果是實際恢復數據的話,就要一個一個的在這些binlog文件中找自己要的那部分文件了。)

3.3 模擬數據庫

在數據庫中進行 flush logs?命令可以新創一個binlog文件,接下來的操作也就會放到新的文件中了。此時再進入到上面這個文件夾中就會看到又多了一個文件叫做LAPTOP-595LBSCH-bin.000092

假設我們的數據庫是7天一備份,然后binlog的過期時間是大于7天的,那么通過備份的數據庫+binlog文件就能夠恢復數據庫到達7天內的任意一個時間點的狀態。,下面是一個模擬備份的行為

之后我們進行一些操作,模擬正常數據庫操作

?
?
?
添加一條數據:
INSERT INTO `user` (`id`, `name`) VALUES (6, '老六');
將小二改成張三豐:
UPDATE `user` SET `name` = '張三豐' WHERE `id` = 1;
將王五改成王偉:
UPDATE `user` SET `name` = '王偉' WHERE `name` = '王五';
刪除整個表:
DROP TABLE `user`;???

經過這些操作之后!

3.4 恢復操作實戰

現在的處境就是整個表都被刪除了,我們想要實現將數據庫改成王五剛被改成王偉的數據庫的模樣

我們要做的就是將上次備份的數據庫恢復,然后從上次備份的時間點 - > 到王五剛被改成王偉的時間點? ?中的binlog操作都找到

3.41、我們在binlog所在的文件夾位置打開黑窗口,然后運行,(注意LAPTOP-595LBSCH-bin.000092是因為測試時候知道剛才的操作一定就在這個文件中,如果不知道就需要逐個打開多個binlog文件然后自己找你想要的那個時間點,)

mysqlbinlog -v --set-charset=utf8mb4 LAPTOP-595LBSCH-bin.000092 > output.txt

之后通過打開這個output.txt文件可能有部分亂碼(亂碼自己解決,如果實在解決不了只能猜了。),比如找到這一部分,意思就是將王五改成王五的操作,他們的執行行數在1109另一種辦法就是在mysql中使用show binlog events in 'LAPTOP-595LBSCH-bin.000092';來查看binlog中的日志,

我們可以看到有4個數據,有寫入數據,刪除更新數據等,還有最后一個是drop table。

經過這些我們已經得到了想要的信息,數據庫上次備份后的binlog開始時間應該是317也就是備份后的第一條ddl語句的begin時間,然后我們想要恢復到的時間是1109日志文件的名字叫做LAPTOP-595LBSCH-bin.000092也就是更新王五那步操作的commit行,之后就是將這個時間段內binlog記錄的操作都輸入到備份的數據庫中

下面這部操作是在不登陸mysql的黑窗口運行的,?| mysql -uroot -p<數據庫密碼>的意思就是將前面步驟操作的結果輸入到后面的命令中

mysqlbinlog --no-defaults --start-position=317 --stop-position=1109 LAPTOP-595LBSCH-bin.000092 | mysql -uroot -p<數據庫密碼>

此時打開數據庫就會發現,數據庫已經成功恢復到了刪表之前的狀態了。

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

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

相關文章

Cocos Creator 編輯器的數據綁定詳解

Cocos Creator 是一款由 Cocos 平臺推出的游戲開發工具&#xff0c;它集成了圖形化編輯器、腳本引擎和資源管理器等功能&#xff0c;方便開發者快速地創建游戲。其中&#xff0c;數據綁定是 Cocos Creator 編輯器中非常重要的一個功能&#xff0c;它可以幫助開發者實現頁面元素…

三生隨記——山洞之謎

第一章&#xff1a;初識山洞 在遠離人煙的深山之中&#xff0c;隱藏著一個鮮為人知的山洞。這個山洞名叫幽洞&#xff0c;它的名字在當地人的口中帶著一股說不出的詭異和神秘。據說&#xff0c;幽洞深不見底&#xff0c;里面充滿了未知的恐懼和危險。然而&#xff0c;對于好奇心…

Go微服務: Grpc服務注冊在Consul的示例(非Go-Micro)

概述 現在&#xff0c;我們使用consul客戶端的api來把GRPC服務實現注冊到consul上&#xff0c;非Go-Micro的形式其實&#xff0c;consul官方提供了對應的接口調用來實現&#xff0c;golang中的consul/api包對其進行了封裝我們使用consul/api來進行展示 目錄結構 gitee.com/g…

springboot+mysql在線考試系統-計算機畢業設計源碼82584

摘 要 信息化社會內需要與之針對性的信息獲取途徑&#xff0c;但是途徑的擴展基本上為人們所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人們經常能夠獲得不同類型信息&#xff0c;這也是技術最為難以攻克的課題。針對在線考試等問題&#xff0c;對如何通過計算…

Websocket助手

功能介紹 WS助手是WebSocket調試的開發工具&#xff0c;該客戶端工具可以幫助開發人員快速連接到測試/生產環境&#xff0c;它可以幫助您監視和分析 Websocket 消息&#xff0c;并在開發過程中解決問題&#xff1b;可以模擬客戶端實現與服務器的數據交互&#xff0c;并完成批量…

論文精讀:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face

HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in Hugging Face Status: Reading Author: Dongsheng Li, Kaitao Song, Weiming Lu, Xu Tan, Yongliang Shen, Yueting Zhuang Institution: 微軟亞洲研究院&#xff08;Microsoft Research Asia&#xff09;, 浙江…

uniapp 對接 微信App/支付寶App 支付

相關文檔&#xff1a;uni.requestPayment(OBJECT) | uni-app官網 示例代碼&#xff1a; import qs from qsasync aliPay(){const { provider } await uni.getProvider({ service:payment })if(provider.includes(alipay)){uni.request({url:后端接口地址,data:{ //傳參 },suc…

? 傳知代碼 ? 基于擴散模型的無載體圖像隱寫術

&#x1f49b;前情提要&#x1f49b; 本文是傳知代碼平臺中的相關前沿知識與技術的分享~ 接下來我們即將進入一個全新的空間&#xff0c;對技術有一個全新的視角~ 本文所涉及所有資源均在傳知代碼平臺可獲取 以下的內容一定會讓你對AI 賦能時代有一個顛覆性的認識哦&#x…

前端---閉包【防抖以及節流】----面試高頻!

1.什么閉包 釋放閉包 從以上看出&#xff1a;一般函數調用一次會把內部的數據進行清除--但是這種操作卻可以一起保留局部作用域的數據 // 優點:1、可以讀取函數內部的變量 2、讓這些變量始中存在局部作用域當中 2.閉包產生的兩種業務場景&#xff1a;防抖、節流 2.1防抖 舉…

QGraphicsView實現簡易地圖16『爆炸效果』

前文鏈接&#xff1a;QGraphicsView實現簡易地圖15『測量面積』 一種簡單的爆炸波擴散效果 動態演示效果&#xff1a; 靜態展示圖片&#xff1a; 核心代碼&#xff1a; #pragma once #include "../AbstractGeoItem.h" #include "DataStruct/GeoData.h"…

sysbench壓測mysql性能測試命令和報告

sysbench壓測mysql性能測試命令和報告 一、安裝sysbench工具二、創建測試數據庫三、基于sysbench構造測試表和測試數據四、數據庫性能測試1、數據庫讀寫性能測試2、數據庫讀性能測試3、數據庫刪除性能測試4、數據庫更新索引字段性能測5、數據庫更新非索引字段性能測試6、數據庫…

windows ip助手函數了解

根據手冊,winsock編程中提供的有一類函數叫ip助手函數;比如Ipconfig函數,從名字看應該是可自己編程實現類似ipconfig命令的功能; 剛看到一個示例,是MS提供的,也屬于這一類,代碼如下, #include <winsock2.h> #include <ws2tcpip.h> #include <iphlpapi…

C++ vector類

目錄 0.前言 1.vector介紹 2.vector使用 2.1 構造函數(Constructor) 2.1.1. 默認構造函數 (Default Constructor) 2.1.2 填充構造函數 (Fill Constructor) 2.1.3 范圍構造函數 (Range Constructor) 2.1.4 拷貝構造函數 (Copy Constructor) 2.2 迭代器(Iterator) 2.2.…

十、通配符和正則表達式

10.1 通配符 通配符是由shell處理的, 它只會出現在 命令的“參數”里。當shell在“參數”中遇到了通配符 時&#xff0c;shell會將其當作路徑或文件名去在磁盤上搜尋可能的匹配&#xff1a;若符合要求的匹配存在&#xff0c;則進 行代換(路徑擴展)&#xff1b;否則就將該通配…

python安裝依賴

創建 requirement.txt 文件并填充內容 flask2.0.0 pandas1.3.3 numpy1.21.2 安裝模塊 pip install -r requirement.txt

Spring boot使用集群方式、支持ssl連接redis的方法

1、需求背景 項目需要提供一個管理界面給內部人員操作用戶信息&#xff0c;需要在修改用戶信息后刪除用戶的redis緩存。用戶所在的區域不同&#xff0c;其redis服務地址也不相同&#xff0c;因此需要管理多個redis連接&#xff0c;且redis要求以集群方式并支持ssl進行連接。 2…

Qt for android 獲取USB設備列表(一)Java方式 獲取

簡介 QtActivity 作為 Qt 應用程序的入口點&#xff0c;負責啟動和配置 Qt 應用程序的信息&#xff0c; 后面我們繼承 QtActivity 做自定義控制&#xff0c;了解一下 Activity 生命周期概念&#xff0c; 因為 QtActivity 繼承自Android的activity&#xff0c;使用周期函數完成我…

java8新特性——函數式編程詳解

目錄 一 概述1.1 背景1.2 函數式編程的意義1.3 函數式編程的發展 Lambda表達式1.1 介紹1.2 使用Lambda的好處1.3 Lambda方法1.3.1 Lambda表達式結構1.3.2 Lambda表達式的特征 1.4 Lambda的使用1.4.1 定義函數式接口1.4.2 Lambda表達式實現函數式接口1.4.3 簡化Lambda表達式1.4.…

C++學習/復習4--與類相關的概念/默認成員函數/運算符重載/Date類實現案例

一、類和對象 1.本章概要 2.C中的結構體(struct與class) 升級為類 &#xff08;1&#xff09;類及成員函數的兩種定義方式 聲明與定義分離 &#xff08;2&#xff09;權限 注意1&#xff1a;struct/class在權限上的區別 &#xff08;3&#xff09;封裝 &#xff08;4&#x…