mysql 刷新二進制日志_使用binlog日志恢復MySQL數據庫刪除數據的方法

binlog日志簡介:

binlog 就是binary

log,二進制日志文件,這個文件記錄了MySQL所有的DDL和DML(除了數據查詢語句)語句,以事件形式記錄,還包含語句所執行的消耗的時間。

binlog日志包括兩類文件:

1)二進制日志索引文件(文件名后綴為.index):用于記錄所有的二進制文件;

2)二進制日志文件(文件名后綴為.00000*):記錄數據庫所有的DDL和DML(除了數據查詢語句select)語句事件。

binlog日志對于mysql數據庫來說是十分重要的。在數據丟失的緊急情況下,可以嘗試用binlog日志功能進行數據恢復操作。

正是由于binlog日志以上的特性,在實際的案件取證中也可以通過binlog日志來恢復刪除數據。

要通過binlog日志恢復mysql數據庫刪除數據的前提:binlog日志確定是開啟的。

查看binlog日志是否開啟,有以下三種方法

方法一:

打開MySQL數據庫的配置文件(windows系統中的配置文件為my.ini,一般在安裝目錄的根目錄下;Linux系統中配置文件為my.cnf,一般在/usr/local/mysql/etc/目錄下),在配置文件中查看log-bin=MySQL-bin有沒有被注釋掉(每行第一個字符為#號表示該行被注釋),若沒被注釋表示開啟,若被注釋表示沒有開啟。

a4c26d1e5885305701be709a3d33442f.png

方法二:

在MySQL命令行下使用show variables like

‘log_bin’;命令查看binlog日志是否開啟,Value的值為ON表示開啟,為OFF表示關閉。

a4c26d1e5885305701be709a3d33442f.png

方法三:在存放數據庫的文件夾中是否存在mysql-bin.000001類似的文件,有則表示binlog日志功能是開啟的。

a4c26d1e5885305701be709a3d33442f.png

在數據恢復過程中會用到的binlog日志操作命令

1、查看所有binlog日志列表:

在mysql命令界面輸入命令: mysql> show master logs

a4c26d1e5885305701be709a3d33442f.png

2、查看master狀態,即最后(最新)一個binlog日志的編號名稱及其最后一個操作事件pos結束點(Position)值:

在mysql命令界面輸入命令: mysql> show master status

a4c26d1e5885305701be709a3d33442f.png

3、刷新log日志,自此刻開始產生一個新編號的binlog日志文件:

在mysql命令界面輸入命令:mysql> flush logs

注:每當mysqld服務重啟時,會自動執行此命令,刷新binlog日志;在mysqldump備份數據時加 -F

選項也會刷新binlog日志

4、重置(清空)所有binlog日志:

在mysql命令界面輸入命令:mysql> reset master

如何讀取binlog日志中的內容?

1、使用mysqlbinlog自帶查看命令法:

注: binlog是二進制文件,普通文件查看器cat more vi等都無法打開,必須使用自帶的 mysqlbinlog

命令查看binlog日志與數據庫文件在同目錄中。

Mysql安裝路徑下的bin文件夾下輸入以下命令:

C:\xampp\mysql\bin>mysqlbinlog

C:\xampp\mysql\data\mysql-bin.000009

a4c26d1e5885305701be709a3d33442f.png

2、上面這種辦法讀取出binlog日志的全文內容較多,不容易分辨查看pos點信息,這里介紹一種更為方便的查詢命令在MySQL的命令界面:

在mysql命令界面輸入:mysql> show binlog events [IN 'log_name'] [FROM

pos] [LIMIT [offset,] row_count]

選項解析↓

IN 'log_name':指定要查詢的binlog文件名(不指定就是第一個binlog文件)

FROM pos:指定從哪個pos起始點開始查起(不指定就是從整個文件首個pos點開始算)

LIMIT [offset,]:偏移量(不指定就是0)

row_count:查詢總條數(不指定就是所有行)

刪除數據案例及操作步驟:

下面我們通過一個實例操作來完整查看「如何通過binlog日志恢復MySQL數據庫刪除數據。

案例介紹:

現有MySQL數據庫,其中有名為test的數據庫,其中沒有任何的表,懷疑數據被刪除,在該電腦中還發現了該數據庫的備份,備份最后被修改的時間為2018-11-21

15:27:12。

目的:

查看是否有刪除的操作,如有刪除嘗試恢復出刪除的表的內容。

思路分析:

1、判斷數據庫是否開啟了binlog日志的功能;

2、通過binlog日志查詢是否有刪除的操作;

3、若刪除了數據,通過binlog日志恢復數據庫中的內容。

下圖就是通過binlog日志實現增量恢復數據庫刪除數據的流程:

a4c26d1e5885305701be709a3d33442f.png

01.判斷數據庫是否開啟了binlog日志:

在MySQL命令行下使用show variables

like‘log_bin’;命令中log_bin的Value為ON,該數據庫的binlog日志是開啟的。

a4c26d1e5885305701be709a3d33442f.png

02.判斷數據庫是否有被刪除的操作:

1)在mysql命令界面通過show master logs;命令查看binlog日志列表,發現一共有8條日志。

a4c26d1e5885305701be709a3d33442f.png

2)在mysql命令界面通過命令show binlog events in

'mysql-bin.000008';可以查看最后兩條命令為“use ‘test‘;delete from t1,use

`test`;DROP TABLE `t1`”由此可判斷出數據庫test中t1表中的內容被清空了,并且把表也刪除了。

a4c26d1e5885305701be709a3d33442f.png

03.恢復數據庫中刪除的數據:

1)由于表t1被刪除了,沒有該表的數據結構無法直接通過binlog日志來恢復刪除的數據;但是我們在電腦中發現了該數據庫的備份,直接還原后就可以得到表t1的數據結構。(這里不做還原的詳細解說,如果您想了解還原詳細操作步驟,可在后臺留言)。

a4c26d1e5885305701be709a3d33442f.png

恢復出的數據結構

2)備份最后修改時間為2018-11-21

15:27:12,MySQL-bin.000008的創建時間為2018?-?11?-?20

??14:15:40,可以推斷出備份后表t1的所有操作都在該日志中。

3)在mysql命令界面使用命令show binlog events in

'mysql-bin.000008';打開最后一個日志文件,找出開始和結尾的pos點,分別為:4和1223,如下圖:

a4c26d1e5885305701be709a3d33442f.png

4)提取日志文件該段落:

在mysql安裝界面的bin目錄下輸入一下命令:

mysqlbinlog C:\xampp\data\mysql-bin.000008 --start-position=4

--stop-position=1223 -r 1.sql,該命令把日志文件中的所有語句提取到了bin目錄下的1.sql中。

a4c26d1e5885305701be709a3d33442f.png

5)通過分析該sql文件可以發現其中記錄了每一條命令的執行的時間,找到備份創建時間2018-11-21

15:27:12之后的所有命令另存為2.sql。如下圖:

a4c26d1e5885305701be709a3d33442f.png

6)另存為2.sql后,把最后兩條刪除的命令去除,直接在數據庫中運行,就可以恢復出表中的所有數據。

注意事項:

1、在恢復之前一定要確認MySQL數據庫的binlog日志是開啟的;

2、若把表刪除一定要想辦法把表的數據結構找到,這樣才能準確的恢復出數據;

3、binlog日志中是記錄了每條語句的執行時間的,可以通過時間來恢復;

4、在截取插入語句的時候一定要注意不要把最后一條刪除的語句截取到,不然恢復的數據又會被刪除。

以上就是使用binlog日志恢復MySQL數據庫刪除數據的方法,希望上述的問題解決思路能給大家一些參考和幫助。如對文中的操作、描述有任何疑問,或者有相關數據庫恢復案件協助支持也可以直接在微信公眾號后臺給我們留言。

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

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

相關文章

Java FileInputStream available()方法與示例

FileInputStream類的available()方法 (FileInputStream Class available() method) available() method is available in java.io package. available()方法在java.io包中可用。 available() method is used to return the number of bytes left that can be read from this Fi…

mysql 輸出參數 sql語句_MySQL: 詳細的sql語句

1添1.1【插入單行】insert [into] (列名) values (列值)例:insert into Strdents (姓名,性別,出生日期) values (開心朋朋,男,1980/6/15)1.2【將現有表數據添加到一個已有表】insert into (列名) select from 例:insert into tongxunlu (姓名,地址,電子郵…

執行git push出現Everything up-to-date

在github上git clone一個項目,在里面創建一個目錄,然后git push的時候,出現報錯"Everything up-to-date" 原因:1)沒有git add .2)沒有git commit -m "提交信息"如果上面兩個步驟都成功…

Java File類boolean delete()方法(帶示例)

文件類布爾型delete() (File Class boolean delete()) This method is available in package java.io.File.delete(). 軟件包java.io.File.delete()中提供了此方法。 This method is used to delete file or directory by using delete() method and this method is accessible…

Unity3D Adam Demo的學習與研究

1.簡述 這篇文章是對Adam各種相關資料了解后進行一些精簡的內容。如果你想仔細研究某個技術請跳轉至unity相關頁面。 Adam官方頁面: https://unity3d.com/cn/pages/adam 搬運視頻以及資源包網盤下載: http://pan.baidu.com/s/1jH6NF86 Adam這個demo由8個人的團隊耗時6個月(part…

Java File類boolean isFile()方法(帶示例)

File類boolean isFile() (File Class boolean isFile()) This method is available in package java.io.File.isFile(). 軟件包java.io.File.isFile()中提供了此方法。 This method is used to check whether the file is specified by filepath is a file or not. 此方法用于檢…

要加油!

現實中我容易佩服一個人。 一個頑強的女人,一個艱苦奮斗的男人..... 但是在網絡的世界里,我沒有佩服過幾個,但是不得不說的就是冰河。同樣的年齡人家做的事情和我們做的事情差距是多么的大,真的想想心里都是天壤之別。 比一比才知…

Java DataOutputStream writeInt()方法及示例

DataOutputStream類writeInt()方法 (DataOutputStream Class writeInt() method) writeInt() method is available in java.io package. writeInt()方法在java.io包中可用。 writeInt() method is used to write the given integer value to the basic DataOutputStream as 4 b…

python安卓自動化實現方法_uiautomator +python 實現安卓UI自動化

簡單實例注:安卓6.0以上的手機不會自動安裝app-uiautomator.apk和app-uiautomator-test.apk,需要手動安裝,否則報錯ioerror RPC server not starteduiautomator pythonHTMLTestRunner 安卓UI自動化實現#coding:utf-8from uiautomator importD…

ES6特性之:Spread操作符

Spread操作符(...),也稱作展開操作符,作用是將可迭代的(Iterable)對象進行展開。 比如有2個數組,我們要將其中一個數組中所有元素插入到另一個數組中,通過Spread操作符,就可以這樣進行: var fruits ["…

Java類class isMemberClass()方法及示例

類的類isMemberClass()方法 (Class class isMemberClass() method) isMemberClass() method is available in java.lang package. isMemberClass()方法在java.lang包中可用。 isMemberClass() method is used to check whether the underlying class is a member class or not.…

velocity自定義函數_velocity基本語法和總結

一:基本語法:1、#set(#a "a")$a ##輸出語句時直接寫變量的名稱即可2、判斷語句:#if($a "a") ##判斷語句沒有括號,也是直接輸出$a3、數組:#set($arry [0..10])$foreach($i in $arry)$i ##換行#e…

docker-machine指定cpu個數

序 給本機的一個服務壓測,結果半天qps上不了萬,而且經常跑滿cpu,搞半天發現,docker里頭才1核1G內存。原來boot2docker默認給docker-machine分配1個cpu和1G內存。 修改配置 docker-machine create \--driver virtualbox \--virtual…

Java ClassLoader findResources()方法與示例

ClassLoader類findResources()方法 (ClassLoader Class findResources() method) findResources() method is available in java.lang package. findResources()方法在java.lang包中可用。 findResources() method is used to find all the resources with the given resource …

Java ByteArrayInputStream mark()方法與示例

ByteArrayInputStream類mark()方法 (ByteArrayInputStream Class mark() method) mark() method is available in java.util package. mark()方法在java.util包中可用。 mark() method is used to set the current mark position in the stream from where read or write can b…

java mediainfo.dll_MediaInfo庫的簡單使用

想到一個問題, 如何獲得一個圖像文件(比如jpg, bmp, png)的信息. 自己查查文件的格式, 寫一個解析, 應該不困難; 但是找了下現成的, 發現MediaInfo庫已經可以非常好的實現需要的功能了.MediaInfo可以在sourceforge上找到, 是一個解析視頻,音頻, 圖片等媒體文件的庫. 可以得到文…

Redis配置和常用命令

1 redis.conf配置文件:2 引用3 #是否作為守護進程運行4 daemonize yes5 #配置pid的存放路徑及文件名,默認為當前路徑下6 pidfile redis.pid7 #Redis默認監聽端口8 port 63799 #客戶端閑置多少秒后,斷開連接 10 timeout 300 11 #日志顯示級別 …

oracle中dbms_DBMS中的功能依賴性和屬性關閉

oracle中dbms功能依賴 (Functional Dependency) A relational Database management System (RDBMS) represents the database o a collection of relations/tables. A functional dependency is a constraint between two sets of attributes in a relation. It is the propert…

java invoke 泛型_利用Java反射機制和泛型,全自動解析json

有啦這個簡直,太爽啦,利用Java 反射機制,利用Class 就可以得到 類的 變量 Field[] fieldscls.getDeclaredFields();還可以通過類中 的方法名字 去執行這個方法m1 cls.getDeclaredMethod(getMothodName(fields[j].getName()), String.class)…

2_C語言中的數據類型 (四)整數與無符號數

1.1 sizeof關鍵字 sizeof是c語言關鍵字,功能是求指定數據類型在內存中的大小,單位:字節 sizeof與size_t類型 1.1 int類型 1.1.1 int常量,變量 int就是32位的一個二進制整數,在內存當中占據4個字節…