Mysql恢復誤刪庫表數(shù)據(jù)完整場景演示
一、前提
1、如果你的數(shù)據(jù)庫有備份文件,自己還原即可。
2、如果沒有備份文件,那首先檢查下你的 binlog 是否開啟。如果未開啟,那你就不用往下看了。如果開啟了,可以往下看看。
1.1 查看位置
可以通過以下的命令查看是否開啟了 binlog 以及它的存儲路徑,mysql8.0 版本是默認開啟的。
show variables like '%log_bin%'

二、簡單場景演示
2.1 背景
此時演示的數(shù)據(jù)庫版本是 Mysql 8.0。且創(chuàng)建表、插入數(shù)據(jù)和刪除表都是在一個 binlog 里面完成的。
2.2 創(chuàng)建數(shù)據(jù)庫
確認 binlog 是開啟狀態(tài)之后,創(chuàng)建測試數(shù)據(jù)庫,在測試數(shù)據(jù)庫中創(chuàng)建測試表,并寫入數(shù)據(jù),腳本如下:
create database if EXISTS itcast; use itcast; create table tb_user( id int(11) not null, name varchar(50) not null, sex varchar(1), primary key (id) )engine=innodb default charset=utf8; insert into tb_user(id,name,sex) values(1,'Tom','1'); insert into tb_user(id,name,sex) values(2,'Trigger','0'); insert into tb_user(id,name,sex) values(3,'Dawn','1');
2.3 刪除數(shù)據(jù)庫
執(zhí)行下面的語句將數(shù)據(jù)庫刪除掉。
drop DATABASE itcast;
2.4 創(chuàng)建新文件
當需要恢復數(shù)據(jù)時,為了防止恢復數(shù)據(jù)后影響最新業(yè)務,需要執(zhí)行下面的命令產生一個新的 binlog 文件,如下,此時舊的 binlog 文件不會再有寫入操作了。
flush logs;
2.5 查看具體文件
執(zhí)行下面的命令,看下系統(tǒng)有多少個 binlog 文件
show master logs;

由于我們執(zhí)行 flush logs 命令新生了一個文件,所以我們執(zhí)行的刪除的命令應該在 binlog.000017 文件里面。
2.6 查看具體的命令行
執(zhí)行下面的命令,查看具體操作的開始和結束的位置
show binlog events in 'binlog.000017';

得到數(shù)據(jù)恢復的起始位置為 125,結束位置為 1750,
2.7 mysqlbinlog
接下來使用 mysqlbinlog 命令執(zhí)行 binlog 文件,恢復數(shù)據(jù),命令如下:
mysqlbinlog -v /var/lib/mysql/binlog.000017 --start-position=125 --stop-position=1750 | mysql -uroot -p1234
數(shù)據(jù)就被恢復成功了。
三、復雜場景演示
先通過下面的命令查看下 binlog 是否開啟,以及日志存儲的位置
show variables like '%log_bin%'

3.1 背景
1、此時演示的數(shù)據(jù)庫版本是 Mysql 8.0。
2、創(chuàng)建表、插入數(shù)據(jù)和刪除表不是在一個 binlog 里面完成的。
3、binlog 里面存儲了不止一個數(shù)據(jù)庫的日志。
3.2 現(xiàn)狀
此時我們有一個庫,里面有三張表,如下,具體什么時候創(chuàng)建的,不記得了,現(xiàn)在我們把他刪除掉,看看能不能給還原回去。




3.3 刪除數(shù)據(jù)庫
執(zhí)行下面的語句將數(shù)據(jù)庫刪除掉。
drop DATABASE itcast;
3.4 數(shù)據(jù)復原
1、執(zhí)行 flush logs 命令,使其產生一個新的 binlog 文件

2、執(zhí)行下面的命令,看下系統(tǒng)有多少個 binlog 文件。
show master logs;

3、挨個遍歷,執(zhí)行下面的命令,挨個 binlog 日志去查看
show binlog events in 'DESKTOP-B0B82CP-bin.000001'; show binlog events in 'DESKTOP-B0B82CP-bin.000002'; show binlog events in 'DESKTOP-B0B82CP-bin.000003'; show binlog events in 'DESKTOP-B0B82CP-bin.000004'; show binlog events in 'DESKTOP-B0B82CP-bin.000005'; show binlog events in 'DESKTOP-B0B82CP-bin.000006'; show binlog events in 'DESKTOP-B0B82CP-bin.000007';
1、發(fā)現(xiàn)第一個有關于 itcast 的日志位置,如下

把涉及到的這幾個 binlog 日志都拷貝到另外的文件夾里面去,因為 MySQL Server 8.0 這個目錄識別不了,真坑爹。

拷貝完成后,執(zhí)行下面的語句:
mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000003 --start-position=424 --stop-position=543 | mysql -uroot -p123456

執(zhí)行成功后,可以看到,數(shù)據(jù)庫被恢復成功了,不過現(xiàn)在只是個空庫,如下圖:

2、繼續(xù)向下搜尋有關 itcast 的 binlog 日志,如下圖,又在 binlog 里面發(fā)現(xiàn)了有關 itcast 的日志,

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=125 --stop-position=9655 | mysql -uroot -p123456
繼續(xù)找,繼續(xù)還原。

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=11607 --stop-position=12344 | mysql -uroot -p123456
繼續(xù)找,繼續(xù)還原。

mysqlbinlog -v C:/1/DESKTOP-B0B82CP-bin.000005 --start-position=14152 --stop-position=14742 | mysql -uroot -p123456
到此為止,就都找全了,數(shù)據(jù)也都恢復回來了。

總結
到此這篇關于Mysql恢復誤刪庫表數(shù)據(jù)的文章就介紹到這了,更多相關Mysql恢復誤刪庫表數(shù)據(jù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pymysql.err.DataError:(1264, ")異常的有效解決方法(最新推薦)
遇到pymysql.err.DataError錯誤時,錯誤代碼1264通常指的是MySQL數(shù)據(jù)庫中的Out of range value for column錯誤,這意味著你嘗試插入或更新的數(shù)據(jù)超過了對應數(shù)據(jù)庫列所允許的范圍,這篇文章主要介紹了pymysql.err.DataError:(1264, ")異常的有效問題,需要的朋友可以參考下2024-05-05
解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?
這篇文章主要介紹了解決ERROR?1129?(HY000):?Host?‘xxx‘?is?blocked?because?of?many問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
關于com.mysql.jdbc.Driver與com.mysql.cj.jdbc.Driver的區(qū)別
這篇文章主要介紹了關于com.mysql.jdbc.Driver與com.mysql.cj.jdbc.Driver的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
Windows Server 2003 下配置 MySQL 集群(Cluster)教程
這篇文章主要介紹了Windows Server 2003 下配置 MySQL 集群(Cluster)教程,本文先是講解了原理知識,然后給出詳細配置步驟和操作方法,需要的朋友可以參考下2015-06-06

