MySQL通過日志恢復(fù)數(shù)據(jù)的操作步驟
試驗(yàn)環(huán)境:Windows Server2012 r2、MySql-8.0.27-winx64。
1、先檢查MySQL有沒有開啟binlog日志
通過下面的SQL命令查看MySQL是否開啟日志以及日志文件的位置:
show variables like '%log_bin%'
執(zhí)行結(jié)果如下圖所示:
圖中,log_bin的值為“ON”表示MySQL開啟了binlog日志功能;log_bin_basename表示日志文件的位置及文件名。 如果log_bin的值為“OFF”,那么意味著我們無(wú)法通過日志恢復(fù)被刪除的數(shù)據(jù),下面的步驟也就不用繼續(xù)啦。
2、查找刪除操作對(duì)應(yīng)的日志文件
由上圖可以看出,日志文件放在MySQL安裝目錄的data目錄下,且文件名為binlog。通過windows資源管理器打開MySQL的data目錄,如下圖所示:
由圖中我們可以看到兩個(gè)名為binlog的文件,通過修改日期可以區(qū)分哪一個(gè)是我們要找的文件,這里假設(shè)我們的刪除操作包含在日志文件binlog.000025中。
3、查看被刪除數(shù)據(jù)的日志位置
通過下面的SQL命令查看對(duì)應(yīng)的日志文件:
SHOW BINLOG EVENTS IN 'binlog.000025'
從查詢結(jié)果中找到刪除命令的開始位置(pos):
如上圖所示,Pos=598431915對(duì)應(yīng)了刪除命令,但數(shù)據(jù)庫(kù)執(zhí)行刪除操作時(shí),都是以事務(wù)的形式開始的,所以需要將開始位置設(shè)定為Pos=598431671。繼續(xù)向下查找,可以找到最后一條刪除命令的位置Pos=613559555。
4、導(dǎo)出刪除操作對(duì)應(yīng)的SQL數(shù)據(jù)
打開windows命令行工具,將目錄切換到MySQL安裝目錄的bin目錄下,執(zhí)行下面的命令:
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v --start-position=598431671 --stop-position=613559555 --database=【你的數(shù)據(jù)庫(kù)名稱】 ..\data\binlog.000025 > restore.sql
命令執(zhí)行完成后,就會(huì)將被刪除的數(shù)據(jù)信息導(dǎo)出到名為“restore.sql”的文件中,打開該文件,就可以看到被刪除數(shù)據(jù)的具體信息,如下圖所示:
顯然,這不是我們想要的。不要著急,文件中前面這一堆是日志的頭部信息,我們可以通過查找關(guān)鍵字“flags: STMT_END_F”的方式,直接定位到我們想要的數(shù)據(jù),如下圖所示:
現(xiàn)在我們看到了,文件中“### DELETE FROM”開始的代碼塊記錄了刪除的數(shù)據(jù),WHERE之后的每一行記錄了所刪除數(shù)據(jù)對(duì)應(yīng)字段(@k表示第k個(gè)字段)的值,我們就可以據(jù)此寫出對(duì)應(yīng)的INSERT語(yǔ)句來(lái)恢復(fù)數(shù)據(jù)。假設(shè)表名為table_deleted,則上圖中對(duì)應(yīng)的用于恢復(fù)數(shù)據(jù)的SQL語(yǔ)句就可以寫成:
INSERT INTO table_deleted VALUES(527182,15134443,0,0,'2024-12-18 11:19:18', NULL);
如果文件中記錄了多條刪除記錄,我們就需要逐一寫出對(duì)應(yīng)的INSERT語(yǔ)句。
5、執(zhí)行SQL,恢復(fù)被刪除的數(shù)據(jù)
執(zhí)行這些INSERT語(yǔ)句,就可以完成數(shù)據(jù)恢復(fù)了。
以上就是MySQL通過日志恢復(fù)數(shù)據(jù)的操作步驟的詳細(xì)內(nèi)容,更多關(guān)于MySQL日志恢復(fù)數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- MySQL通過binlog實(shí)現(xiàn)恢復(fù)數(shù)據(jù)
- Python MySQL如何通過Binlog獲取變更記錄恢復(fù)數(shù)據(jù)
- MySQL通過ibd文件恢復(fù)數(shù)據(jù)的操作過程
- MySQL開啟配置binlog及通過binlog恢復(fù)數(shù)據(jù)步驟詳析
- mysql binlog如何恢復(fù)數(shù)據(jù)到某一時(shí)刻
- MySQL誤刪后使用binlog恢復(fù)數(shù)據(jù)的實(shí)現(xiàn)方法
- mysql數(shù)據(jù)損壞,如何通過ibd和frm文件批量恢復(fù)數(shù)據(jù)庫(kù)數(shù)據(jù)
- Mysql如何通過ibd文件恢復(fù)數(shù)據(jù)
- mysql如何根據(jù).frm和.ibd文件恢復(fù)數(shù)據(jù)表
- 一步步教你如何使用mysql?binlog恢復(fù)數(shù)據(jù)
- MySql恢復(fù)數(shù)據(jù)方法梳理講解
- Mysql通過ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟
- MySQL數(shù)據(jù)庫(kù)通過Binlog恢復(fù)數(shù)據(jù)的詳細(xì)步驟
- Mysql如何通過binlog日志恢復(fù)數(shù)據(jù)詳解
- mysql5.7使用binlog 恢復(fù)數(shù)據(jù)的方法
- MySQL通過binlog恢復(fù)數(shù)據(jù)
- mysql8.0無(wú)備份通過idb文件恢復(fù)數(shù)據(jù)的方法、idb文件修復(fù)和tablespace?id不一致處理
相關(guān)文章
MySQL通過函數(shù)存儲(chǔ)過程批量插入數(shù)據(jù)
這篇文章主要給大家介紹了關(guān)于MySQL通過函數(shù)存儲(chǔ)過程批量插入數(shù)據(jù),以及MySQL通過函數(shù)批量插入數(shù)據(jù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01MySql判斷漢字、日期、數(shù)字的具體函數(shù)
這篇文章主要大家詳細(xì)介紹了MySql判斷漢字、日期、數(shù)字的具體函數(shù),感興趣的小伙伴們可以參考一下2016-05-05MySQL常用類型轉(zhuǎn)換函數(shù)總結(jié)(推薦)
這篇文章主要介紹了MySQL常用類型轉(zhuǎn)換函數(shù)總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04mysql學(xué)習(xí)筆記之基礎(chǔ)知識(shí)
本文是MySQL學(xué)習(xí)筆記系列文章的第一篇,給大家簡(jiǎn)單講解下MySQL的一些檢查操作命令,希望大家能夠喜歡2017-02-02centos7.4系統(tǒng)中yum源安裝mysql 5.6
本文給大家介紹的是如何在centos7.4系統(tǒng)中通過yum源安裝MySQL 5.6數(shù)據(jù)庫(kù),CentOS7默認(rèn)數(shù)據(jù)庫(kù)是mariadb, 但是 好多用的都是mysql ,但是CentOS7的yum源中默認(rèn)好像是沒有mysql的,今天我們就來(lái)看看具體如何操作2018-09-09將MySQL從MyISAM轉(zhuǎn)換成InnoDB錯(cuò)誤和解決辦法
原來(lái)自己用的是為了裝的, 所以在設(shè)置database usage(如下圖1)的時(shí)候按照discuz官方的建議,選的都是Non-Transactional Database Only(只支持MyISAM數(shù)據(jù)引擎的非事務(wù)數(shù)據(jù)庫(kù)),用MyISAM數(shù)據(jù)庫(kù),還沒涉及到需要InnoDB,因此打算直接不加載INNODB引擎。2011-09-09MySQL常見內(nèi)存不足啟動(dòng)失敗的完美解決方法
這篇文章主要介紹了MySQL常見內(nèi)存不足啟動(dòng)失敗的完美解決方法,需要的朋友可以參考下2018-03-03