一、開(kāi)啟bin-log二進(jìn)制日志:
my.ini 配置文件 查到或添加:
log-bin=mysql-bin
my.cnf配置文件添加:
server-id = 1
log-bin=mysql-bin
注意:配置文件修改保存后,一定要重啟mysql;
二、查看bin-log二進(jìn)制日志:
1、查看是否啟用了二進(jìn)制日志?
mysql>show?variables like 'log_bin';

2、?查看所有二進(jìn)制日志文件的列表,請(qǐng)使用以下語(yǔ)句:
mysql>show binary logs;

3、查看當(dāng)前二進(jìn)制日志文件的名稱,請(qǐng)使用以下語(yǔ)句:
mysql>?SHOW?MASTER?STATUS;?

三、使用bin-log二進(jìn)制日志(恢復(fù)數(shù)據(jù)):
下面介紹幾個(gè)bin-log二進(jìn)制日志常用的sql命令:
(1)、flush logs;?會(huì)多一個(gè)最新的bin-log日志
(2)、show master status;?查看最后一個(gè)bin-log日志的相關(guān)信息
(3)、reset master;?清空所有的bin-log日志
1、我們先看一下bin-log日志放在哪里?
windos服務(wù)器,一般直接放在mysql/data目錄下;
linux服務(wù)器,有的是放在mysql/data目錄下的,有的卻是在/var/lib/mysql;而且data目錄可以自定義的。
2、查看bin-log二進(jìn)制日志文件具體內(nèi)容:
二進(jìn)制日志用記事本、編輯器、vi或vim等等打開(kāi)都是亂碼的,必須用mysqlbinlog才能正確打開(kāi)。
windos下直接“開(kāi)始-運(yùn)行-cmd”,執(zhí)行:
F:\wamp64\bin\mysql\mysql5.7.14\bin\mysqlbinlog F:\wamp64\bin\mysql\mysql5.7.14\data\mysql-bin.000001
linux下直接執(zhí)行:
cd?/var/lib/mysql
/usr/bin/mysqlbinlog? ? ? --no-defaults? ? mysql-bin.000001
注意:上面路徑請(qǐng)根據(jù)自己的情況做修改;二進(jìn)日志我把最主要的東西截圖如下,因?yàn)檫@些東西對(duì)后面的恢復(fù)數(shù)據(jù)有著重要的依據(jù);


3、利用bin-log二進(jìn)制日志文件恢復(fù)數(shù)據(jù):
mysql二進(jìn)制日志文件恢復(fù)數(shù)據(jù)有兩種方式:使用事件時(shí)間的時(shí)間點(diǎn)恢復(fù)和使用事件位置的時(shí)間點(diǎn)恢復(fù);
(1)使用事件時(shí)間的時(shí)間點(diǎn)恢復(fù):
要指明恢復(fù)的開(kāi)始和結(jié)束時(shí)間,兩個(gè)選項(xiàng)參數(shù)是: --start-datetime和 --stop-datetime;
語(yǔ)法格式:mysqlbinlog [參數(shù)] DATETIME
例如,假設(shè)在2017年4月20日上午10:00,執(zhí)行了一個(gè)刪除了一個(gè)大表的SQL語(yǔ)句。要還原表和數(shù)據(jù),可以恢復(fù)前一天的備份,然后執(zhí)行以下命令:
shell>mysqlbinlog?--stop-datetime="2017-04-20?9:59:59"?\
?????????/var/lib/mysql/mysql-bin.000001?|?mysql?-u?root?-p??
如果您還需要恢復(fù)2017年4月20日上午10:00之后發(fā)生的活動(dòng)。可以用命令:
shell>mysqlbinlog?--start-datetime="2017-04-20?10:01:00"?\
?????????/var/lib/mysql/mysql-bin.000001?|?mysql?-u?root?-p??
(2)使用事件位置的時(shí)間點(diǎn)恢復(fù):
而不是指定日期和時(shí)間, --start-position 和--stop-position選項(xiàng) 可用于指定日志位置。它們的工作方式與--start-datetime和?--stop-datetime選項(xiàng)相同,只是指定日志位置數(shù)字而不是日期。使用可能會(huì)使您更準(zhǔn)確地了解日志的哪個(gè)部分進(jìn)行恢復(fù),特別是如果許多事務(wù)發(fā)生在與SQL語(yǔ)句相同的時(shí)間內(nèi)。
要確定位置號(hào)碼,請(qǐng)?jiān)趫?zhí)行不需要的事務(wù)的時(shí)間范圍內(nèi)運(yùn)行 mysqlbinlog,但將結(jié)果重定向到文本文件進(jìn)行檢查。你可以這樣做:
shell>mysqlbinlog?--start-datetime="2017-04-20?9:55:00"?\
--stop-datetime="2017-04-20?10:05:00"?\
???????????/var/lib/mysql/mysql-bin.000001?>?/tmp/mysql_restore.sql??
該命令/tmp在執(zhí)行有害SQL語(yǔ)句的時(shí)間內(nèi)在包含SQL語(yǔ)句的目錄中創(chuàng)建一個(gè)小文本文件 。使用文本編輯器打開(kāi)此文件,并查找您不想重復(fù)的語(yǔ)句。
確定二進(jìn)制日志中的位置以停止并恢復(fù)恢復(fù)并記下它們。位置被標(biāo)記為 log_pos后跟一個(gè)數(shù)字?;謴?fù)以前的備份文件后,使用位置號(hào)來(lái)處理二進(jìn)制日志文件。例如,您將使用如下命令:
shell>mysqlbinlog?--stop-position=368312/var/lib/mysql/mysql-bin.000001\
?????????|?mysql?-u?root?-p??
shell>mysqlbinlog?--start-position=368315/var/lib/mysql/mysql-bin.000001\
?????????|?mysql?-u?root?-p?
第一個(gè)命令恢復(fù)所有交易,直到給定的停止位置。
第二個(gè)命令從所給出的起始位置恢復(fù)所有事務(wù),直到二進(jìn)制日志結(jié)束。由于mysqlbinlog的輸出 SET TIMESTAMP在每個(gè)SQL語(yǔ)句記錄之前都包含語(yǔ)句,恢復(fù)的數(shù)據(jù)和相關(guān)的MySQL日志將反映執(zhí)行事務(wù)的原始時(shí)間。