最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL誤刪后使用binlog恢復(fù)數(shù)據(jù)的實現(xiàn)方法

 更新時間:2024年05月23日 11:27:53   作者:紀(jì)佰倫  
這篇文章主要介紹了MySQL誤刪后使用binlog恢復(fù)數(shù)據(jù)的實現(xiàn)方法,使用 binlog 恢復(fù)數(shù)據(jù)的預(yù)期效果是將誤刪的數(shù)據(jù)還原到誤刪之前的狀態(tài),以減少或消除數(shù)據(jù)丟失的影響,文中有相關(guān)的代碼示例和圖文介紹,需要的朋友可以參考下

1 預(yù)期效果

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

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

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

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

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

  • 其他更改操作:如果誤刪操作之后進(jìn)行了其他更改操作,恢復(fù)過程可能會導(dǎo)致這些操作被重新執(zhí)行,可能會引起數(shù)據(jù)不一致或沖突。因此,在執(zhí)行恢復(fù)操作之前,應(yīng)仔細(xì)分析 binlog 文件,并選擇適當(dāng)?shù)牟僮饔涗涍M(jìn)行恢復(fù)。

  • 數(shù)據(jù)庫狀態(tài)和依賴項:誤刪操作可能依賴于特定的數(shù)據(jù)庫狀態(tài)或外部數(shù)據(jù)。在執(zhí)行恢復(fù)操作之前,應(yīng)確保數(shù)據(jù)庫的環(huán)境和依賴項與誤刪操作發(fā)生時相同,以確?;謴?fù)的數(shù)據(jù)能夠正確關(guān)聯(lián)和使用。

  • 恢復(fù)操作的正確性:正確解析和執(zhí)行 binlog 中的操作記錄是關(guān)鍵。在執(zhí)行恢復(fù)操作之前,應(yīng)仔細(xì)驗證和測試恢復(fù)過程,確保操作記錄的準(zhǔn)確性和正確性。

2 實現(xiàn)原理

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

下面是使用 binlog 恢復(fù)數(shù)據(jù)的一般原理:

  1. 確認(rèn)誤刪的時間點:首先,需要確定誤刪操作發(fā)生的時間點。這將幫助你確定要恢復(fù)的數(shù)據(jù)范圍,以便從 binlog 中提取相應(yīng)的操作記錄。

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

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

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

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

需要注意的是,使用 binlog 恢復(fù)數(shù)據(jù)存在一些限制和風(fēng)險,包括:

  • 誤刪操作之后的其他修改:如果誤刪操作之后的時間段內(nèi)進(jìn)行了其他更改操作,這些操作也將被重新執(zhí)行,可能會導(dǎo)致數(shù)據(jù)不一致或沖突。在恢復(fù)數(shù)據(jù)之前,應(yīng)仔細(xì)分析 binlog 文件,確保只恢復(fù)必要的操作。

  • 依賴外部數(shù)據(jù)和狀態(tài):如果誤刪操作涉及到外部數(shù)據(jù)或依賴于特定的數(shù)據(jù)庫狀態(tài),恢復(fù)過程可能會受到影響。在執(zhí)行恢復(fù)操作之前,確保數(shù)據(jù)庫的環(huán)境和依賴項與誤刪操作發(fā)生時相同。

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

3 實際操作

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

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

  1. log_bin 變量被設(shè)置為 ON,表示二進(jìn)制日志功能已經(jīng)啟用。

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

  3. log_bin_index 顯示二進(jìn)制日志索引文件的路徑。

  4. 其他一些與二進(jìn)制日志相關(guān)的配置項的值。

    sql_log_bin 是 MySQL 中一個非常有用的系統(tǒng)變量,它控制當(dāng)前會話是否將執(zhí)行的 SQL 語句記錄到二進(jìn)制日志中。

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

3.2 查看binlog文件

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

可以看到已經(jīng)有很多l(xiāng)og文件了

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

3.3 模擬數(shù)據(jù)庫

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

假設(shè)我們的數(shù)據(jù)庫是7天一備份,然后binlog的過期時間是大于7天的,那么通過備份的數(shù)據(jù)庫+binlog文件就能夠恢復(fù)數(shù)據(jù)庫到達(dá)7天內(nèi)的任意一個時間點的狀態(tài)。,下面是一個模擬備份的行為

之后我們進(jìn)行一些操作,模擬正常數(shù)據(jù)庫操作

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

經(jīng)過這些操作之后!

3.4 恢復(fù)操作實戰(zhàn)

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

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

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

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

之后通過打開這個output.txt文件可能有部分亂碼(亂碼自己解決,如果實在解決不了只能猜了。),比如找到這一部分,意思就是將王五改成王五的操作,他們的執(zhí)行行數(shù)在1109

另一種辦法就是在mysql中使用show binlog events in 'LAPTOP-595LBSCH-bin.000092';來查看binlog中的日志,

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

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

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

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

此時打開數(shù)據(jù)庫就會發(fā)現(xiàn),數(shù)據(jù)庫已經(jīng)成功恢復(fù)到了刪表之前的狀態(tài)了。

以上就是MySQL誤刪后使用binlog恢復(fù)數(shù)據(jù)的實現(xiàn)方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL binlog恢復(fù)數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 在MySQL中為何不建議使用utf8

    在MySQL中為何不建議使用utf8

    這篇文章主要介紹了在MySQL中為何不建議使用utf8,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Mysql 5.7.20壓縮版下載和安裝簡易教程

    Mysql 5.7.20壓縮版下載和安裝簡易教程

    這篇文章主要介紹了Mysql 5.7.20壓縮版下載和安裝簡易教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • InnoDB引擎中的事務(wù)詳解

    InnoDB引擎中的事務(wù)詳解

    這篇文章主要介紹了InnoDB引擎中的事務(wù)詳解,事務(wù)Transaction是訪問和更新數(shù)據(jù)庫的程序執(zhí)行單元;事務(wù)中可能包含一個或多個sql語句,這些語句要么都執(zhí)行,要么都不執(zhí)行,需要的朋友可以參考下
    2023-09-09
  • mysql導(dǎo)出查詢結(jié)果到csv的實現(xiàn)方法

    mysql導(dǎo)出查詢結(jié)果到csv的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猰ysql導(dǎo)出查詢結(jié)果到csv的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 關(guān)于數(shù)據(jù)庫連接池Druid使用說明

    關(guān)于數(shù)據(jù)庫連接池Druid使用說明

    這篇文章主要介紹了關(guān)于數(shù)據(jù)庫連接池Druid使用說明,涉及Druid 參數(shù)和運行原理等等相關(guān)內(nèi)容,小編覺得挺不錯的,在這里給大家分享一下。
    2017-10-10
  • MySQL?聚合函數(shù)、分組、聯(lián)合查詢詳解

    MySQL?聚合函數(shù)、分組、聯(lián)合查詢詳解

    本文介紹了MySQL中的聚合函數(shù)、分組查詢和聯(lián)合查詢,并通過多個示例題目進(jìn)行鞏固,聚合函數(shù)用于計算匯總統(tǒng)計值,分組查詢用于將數(shù)據(jù)分成組并應(yīng)用聚合函數(shù),聯(lián)合查詢用于從多個表中組合數(shù)據(jù),通過實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 如何解決mysql無法關(guān)閉的問題

    如何解決mysql無法關(guān)閉的問題

    在本篇文章里小編給大家整理的是一篇關(guān)于解決mysql無法關(guān)閉的問題的相關(guān)內(nèi)容,需要的朋友們可以參考下。
    2020-08-08
  • MySQL group by和order by如何一起使用

    MySQL group by和order by如何一起使用

    這篇文章主要介紹了MySQL group by和order by如何一起使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • CentOS6.7 mysql5.6.33修改數(shù)據(jù)文件位置的方法

    CentOS6.7 mysql5.6.33修改數(shù)據(jù)文件位置的方法

    mysql存放的數(shù)據(jù)文件,分區(qū)容量較小,目前已經(jīng)滿,導(dǎo)致mysql連接不上,怎么解決呢?下面小編給大家分享CentOS6.7 mysql5.6.33修改數(shù)據(jù)文件位置的方法,一起看看吧
    2017-06-06
  • 解決Windows10下mysql5.5數(shù)據(jù)庫命令行中文亂碼問題

    解決Windows10下mysql5.5數(shù)據(jù)庫命令行中文亂碼問題

    重置系統(tǒng)后,很久之前安裝的MySQL數(shù)據(jù)庫出現(xiàn)了控制臺查詢中文亂碼問題,時間太久早已經(jīng)不記得怎么設(shè)置了。下面通過本文給大家分享Windows10下解決MySQL5.5數(shù)據(jù)庫命令行中文亂碼問題,一起看看吧
    2017-07-07

最新評論

荥阳市| 铜梁县| 宝兴县| 康保县| 永昌县| 长白| 突泉县| 黄石市| 卢湾区| 石柱| 封开县| 靖江市| 乐至县| 石棉县| 斗六市| 凤山市| 旬邑县| 会宁县| 兴义市| 武宁县| 富锦市| 宁南县| 准格尔旗| 长汀县| 宜良县| 茌平县| 株洲市| 陆川县| 枝江市| 阳谷县| 漳平市| 长海县| 乡城县| 赤水市| 旅游| 黄骅市| 广饶县| 西畴县| 武义县| 奎屯市| 临猗县|