2020-03-02

一、開(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í)間。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容