mysql 刷新二进制日志_使用binlog日志恢复MySQL数据库删除数据的方法
binlog日志簡介:
binlog 就是binary
log,二進(jìn)制日志文件,這個(gè)文件記錄了MySQL所有的DDL和DML(除了數(shù)據(jù)查詢語句)語句,以事件形式記錄,還包含語句所執(zhí)行的消耗的時(shí)間。
binlog日志包括兩類文件:
1)二進(jìn)制日志索引文件(文件名后綴為.index):用于記錄所有的二進(jìn)制文件;
2)二進(jìn)制日志文件(文件名后綴為.00000*):記錄數(shù)據(jù)庫所有的DDL和DML(除了數(shù)據(jù)查詢語句select)語句事件。
binlog日志對于mysql數(shù)據(jù)庫來說是十分重要的。在數(shù)據(jù)丟失的緊急情況下,可以嘗試用binlog日志功能進(jìn)行數(shù)據(jù)恢復(fù)操作。
正是由于binlog日志以上的特性,在實(shí)際的案件取證中也可以通過binlog日志來恢復(fù)刪除數(shù)據(jù)。
要通過binlog日志恢復(fù)mysql數(shù)據(jù)庫刪除數(shù)據(jù)的前提:binlog日志確定是開啟的。
查看binlog日志是否開啟,有以下三種方法
方法一:
打開MySQL數(shù)據(jù)庫的配置文件(windows系統(tǒng)中的配置文件為my.ini,一般在安裝目錄的根目錄下;Linux系統(tǒng)中配置文件為my.cnf,一般在/usr/local/mysql/etc/目錄下),在配置文件中查看log-bin=MySQL-bin有沒有被注釋掉(每行第一個(gè)字符為#號表示該行被注釋),若沒被注釋表示開啟,若被注釋表示沒有開啟。
方法二:
在MySQL命令行下使用show variables like
‘log_bin’;命令查看binlog日志是否開啟,Value的值為ON表示開啟,為OFF表示關(guān)閉。
方法三:在存放數(shù)據(jù)庫的文件夾中是否存在mysql-bin.000001類似的文件,有則表示binlog日志功能是開啟的。
在數(shù)據(jù)恢復(fù)過程中會用到的binlog日志操作命令
1、查看所有binlog日志列表:
在mysql命令界面輸入命令: mysql> show master logs
2、查看master狀態(tài),即最后(最新)一個(gè)binlog日志的編號名稱及其最后一個(gè)操作事件pos結(jié)束點(diǎn)(Position)值:
在mysql命令界面輸入命令: mysql> show master status
3、刷新log日志,自此刻開始產(chǎn)生一個(gè)新編號的binlog日志文件:
在mysql命令界面輸入命令:mysql> flush logs
注:每當(dāng)mysqld服務(wù)重啟時(shí),會自動執(zhí)行此命令,刷新binlog日志;在mysqldump備份數(shù)據(jù)時(shí)加 -F
選項(xiàng)也會刷新binlog日志
4、重置(清空)所有binlog日志:
在mysql命令界面輸入命令:mysql> reset master
如何讀取binlog日志中的內(nèi)容?
1、使用mysqlbinlog自帶查看命令法:
注: binlog是二進(jìn)制文件,普通文件查看器cat more vi等都無法打開,必須使用自帶的 mysqlbinlog
命令查看binlog日志與數(shù)據(jù)庫文件在同目錄中。
Mysql安裝路徑下的bin文件夾下輸入以下命令:
C:\xampp\mysql\bin>mysqlbinlog
C:\xampp\mysql\data\mysql-bin.000009
2、上面這種辦法讀取出binlog日志的全文內(nèi)容較多,不容易分辨查看pos點(diǎn)信息,這里介紹一種更為方便的查詢命令在MySQL的命令界面:
在mysql命令界面輸入:mysql> show binlog events [IN 'log_name'] [FROM
pos] [LIMIT [offset,] row_count]
選項(xiàng)解析↓
IN 'log_name':指定要查詢的binlog文件名(不指定就是第一個(gè)binlog文件)
FROM pos:指定從哪個(gè)pos起始點(diǎn)開始查起(不指定就是從整個(gè)文件首個(gè)pos點(diǎn)開始算)
LIMIT [offset,]:偏移量(不指定就是0)
row_count:查詢總條數(shù)(不指定就是所有行)
刪除數(shù)據(jù)案例及操作步驟:
下面我們通過一個(gè)實(shí)例操作來完整查看「如何通過binlog日志恢復(fù)MySQL數(shù)據(jù)庫刪除數(shù)據(jù)。
案例介紹:
現(xiàn)有MySQL數(shù)據(jù)庫,其中有名為test的數(shù)據(jù)庫,其中沒有任何的表,懷疑數(shù)據(jù)被刪除,在該電腦中還發(fā)現(xiàn)了該數(shù)據(jù)庫的備份,備份最后被修改的時(shí)間為2018-11-21
15:27:12。
目的:
查看是否有刪除的操作,如有刪除嘗試恢復(fù)出刪除的表的內(nèi)容。
思路分析:
1、判斷數(shù)據(jù)庫是否開啟了binlog日志的功能;
2、通過binlog日志查詢是否有刪除的操作;
3、若刪除了數(shù)據(jù),通過binlog日志恢復(fù)數(shù)據(jù)庫中的內(nèi)容。
下圖就是通過binlog日志實(shí)現(xiàn)增量恢復(fù)數(shù)據(jù)庫刪除數(shù)據(jù)的流程:
01.判斷數(shù)據(jù)庫是否開啟了binlog日志:
在MySQL命令行下使用show variables
like‘log_bin’;命令中l(wèi)og_bin的Value為ON,該數(shù)據(jù)庫的binlog日志是開啟的。
02.判斷數(shù)據(jù)庫是否有被刪除的操作:
1)在mysql命令界面通過show master logs;命令查看binlog日志列表,發(fā)現(xiàn)一共有8條日志。
2)在mysql命令界面通過命令show binlog events in
'mysql-bin.000008';可以查看最后兩條命令為“use ‘test‘;delete from t1,use
`test`;DROP TABLE `t1`”由此可判斷出數(shù)據(jù)庫test中t1表中的內(nèi)容被清空了,并且把表也刪除了。
03.恢復(fù)數(shù)據(jù)庫中刪除的數(shù)據(jù):
1)由于表t1被刪除了,沒有該表的數(shù)據(jù)結(jié)構(gòu)無法直接通過binlog日志來恢復(fù)刪除的數(shù)據(jù);但是我們在電腦中發(fā)現(xiàn)了該數(shù)據(jù)庫的備份,直接還原后就可以得到表t1的數(shù)據(jù)結(jié)構(gòu)。(這里不做還原的詳細(xì)解說,如果您想了解還原詳細(xì)操作步驟,可在后臺留言)。
恢復(fù)出的數(shù)據(jù)結(jié)構(gòu)
2)備份最后修改時(shí)間為2018-11-21
15:27:12,MySQL-bin.000008的創(chuàng)建時(shí)間為2018?-?11?-?20
??14:15:40,可以推斷出備份后表t1的所有操作都在該日志中。
3)在mysql命令界面使用命令show binlog events in
'mysql-bin.000008';打開最后一個(gè)日志文件,找出開始和結(jié)尾的pos點(diǎn),分別為:4和1223,如下圖:
4)提取日志文件該段落:
在mysql安裝界面的bin目錄下輸入一下命令:
mysqlbinlog C:\xampp\data\mysql-bin.000008 --start-position=4
--stop-position=1223 -r 1.sql,該命令把日志文件中的所有語句提取到了bin目錄下的1.sql中。
5)通過分析該sql文件可以發(fā)現(xiàn)其中記錄了每一條命令的執(zhí)行的時(shí)間,找到備份創(chuàng)建時(shí)間2018-11-21
15:27:12之后的所有命令另存為2.sql。如下圖:
6)另存為2.sql后,把最后兩條刪除的命令去除,直接在數(shù)據(jù)庫中運(yùn)行,就可以恢復(fù)出表中的所有數(shù)據(jù)。
注意事項(xiàng):
1、在恢復(fù)之前一定要確認(rèn)MySQL數(shù)據(jù)庫的binlog日志是開啟的;
2、若把表刪除一定要想辦法把表的數(shù)據(jù)結(jié)構(gòu)找到,這樣才能準(zhǔn)確的恢復(fù)出數(shù)據(jù);
3、binlog日志中是記錄了每條語句的執(zhí)行時(shí)間的,可以通過時(shí)間來恢復(fù);
4、在截取插入語句的時(shí)候一定要注意不要把最后一條刪除的語句截取到,不然恢復(fù)的數(shù)據(jù)又會被刪除。
以上就是使用binlog日志恢復(fù)MySQL數(shù)據(jù)庫刪除數(shù)據(jù)的方法,希望上述的問題解決思路能給大家一些參考和幫助。如對文中的操作、描述有任何疑問,或者有相關(guān)數(shù)據(jù)庫恢復(fù)案件協(xié)助支持也可以直接在微信公眾號后臺給我們留言。
總結(jié)
以上是生活随笔為你收集整理的mysql 刷新二进制日志_使用binlog日志恢复MySQL数据库删除数据的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5画分形图形,2.5 绘制透明图
- 下一篇: keytool条目_java keyto