溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

mysqlbinlog工具基于日志恢復(fù)的示例分析

發(fā)布時(shí)間:2021-11-06 09:45:50 來(lái)源:億速云 閱讀:172 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章將為大家詳細(xì)講解有關(guān)mysqlbinlog工具基于日志恢復(fù)的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。



1)RESET MASTER
在上面查看日志存放的文件夾中,二進(jìn)制日志命名的格式是以mysql-bin.*,*代表日志的序號(hào),序號(hào)是遞增的,其中還有mysql-bin.index是日志的索引文件,記錄了日志的最大序號(hào)
我們執(zhí)行RESET MASTER命名刪除全部日志

mysqlbinlog工具基于日志恢復(fù)的示例分析

查看刪除后的日志

mysqlbinlog工具基于日志恢復(fù)的示例分析

可以看到,以前的日志全部被清空,新的日志從00001開(kāi)始

2)PURGE MASTER LOGS TO & PURGE MASTER LOGS BEFORE
執(zhí)行PURGE MASTER LOGS TO 'mysql-bin.******'命令,是將'******'編號(hào)之前的所有日志進(jìn)行刪除
執(zhí)行PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'命令,是將在'yyyy-mm-dd hh:mm:ss'時(shí)間之前的所有日志進(jìn)行刪除

3)-EXPIRE_LOGS_DAYS
此參數(shù)是設(shè)置日志的過(guò)期天數(shù),過(guò)期的日志將會(huì)被自動(dòng)刪除,這有利于減少我們管理日志的工作量,需要修改my.cnf

mysqlbinlog工具基于日志恢復(fù)的示例分析
這里我們?cè)O(shè)定保存日志為3天,3天之后過(guò)期的日志將被自動(dòng)刪除

恢復(fù)
 bin-log是記錄著mysql所有事件的操作,當(dāng)mysql發(fā)生災(zāi)難性錯(cuò)誤時(shí),可以通過(guò)bin-log做完整恢復(fù),基于時(shí)間點(diǎn)的恢復(fù),和基于位置的恢復(fù)


完整恢復(fù),假定我們每天凌晨2點(diǎn)都會(huì)使用mysqldump備份數(shù)據(jù)庫(kù),但在第二天早上9點(diǎn)由于數(shù)據(jù)庫(kù)出現(xiàn)了故障,數(shù)據(jù)無(wú)法訪(fǎng)問(wèn),需要恢復(fù)數(shù)據(jù),先使用昨天凌晨備份的文件進(jìn)行恢復(fù)到凌晨2點(diǎn)的狀態(tài),在使用mysqlbinlog恢復(fù)自mysqldump備份以來(lái)的binlog
mysql localhost mysql-bin.000001 | mysql -uroot -p
這樣數(shù)據(jù)庫(kù)就可以完全的恢復(fù)到崩潰前的完全狀態(tài)

基于時(shí)間點(diǎn)的恢復(fù)
,由于誤操作,比如說(shuō)刪除了一張表,這時(shí)使用上面講的完全恢復(fù)是沒(méi)有用的,因?yàn)槿罩纠锩孢€存在誤操作的語(yǔ)句,,我們需要的是恢復(fù)到誤操作前的狀態(tài),然后跳過(guò)誤操作的語(yǔ)句,再恢復(fù)后面操作的語(yǔ)句,假定我們刪除了一張表的誤操作發(fā)生在10:00這個(gè)時(shí)間點(diǎn),我們可以使用下面的語(yǔ)句用備份和binlog將數(shù)據(jù)恢復(fù)到故障前

mysqlbinlog --stop-date='2010-09-04 9:59:59' /var/log/mysql-bin.000001 | mysql -uroot -p


然后跳過(guò)誤操作的時(shí)間點(diǎn),繼續(xù)執(zhí)行后面的binlog

mysqlbinlog --start-date='2010-09-04 10:01:00' /var/log/mysql-bin.000001 | mysql -uroot -p


其中--stop-date='2010-09-04 9:59:59' 和 --start-date='2010-09-04 10:01:00' 其中的時(shí)間是你誤操作的時(shí)間點(diǎn),當(dāng)然了,這個(gè)時(shí)間點(diǎn)你需要你自己計(jì)算的,而且這個(gè)時(shí)間點(diǎn)還可以涉及到的不只是誤操作,還可以有正確的操作也被跳過(guò)去了。

基于位置恢復(fù),由于上面提到的,使用基于時(shí)間點(diǎn)的恢復(fù)可能出現(xiàn),在一個(gè)時(shí)間點(diǎn)里面可能存在誤操作和其他正確的操作,所以我們需要一種更為精確的恢復(fù)方式
使用mysqlbinlog查看二進(jìn)制,可看到

mysqlbinlog工具基于日志恢復(fù)的示例分析

其中drop tables test1這個(gè)誤操作的end_log_pos為8879917,幾下這個(gè)id,得出它前后操作的id分別為8879916,8879918
我們將進(jìn)行位置恢復(fù)操作

mysqlbinlog --stop-position='8879916' /var/log/mysql-bin.000001 | mysql -uroot -p

mysqlbinlog --start-position='8879918' /var/log/mysql-bin.000001 | mysql -uroot -p

服務(wù)器生成的二進(jìn)制日志文件寫(xiě)成二進(jìn)制格式。要想檢查這些文本格式的文件,應(yīng)使用mysqlbinlog實(shí)用工具。
應(yīng)這樣調(diào)用mysqlbinlog
shell> mysqlbinlog [options] log-files例如,要想顯示二進(jìn)制日志binlog.000003的內(nèi)容,使用下面的命令:
shell> mysqlbinlog binlog.0000003輸出包括在binlog.000003中包含的所有語(yǔ)句,以及其它信息例如每個(gè)語(yǔ)句花費(fèi)的時(shí)間、客戶(hù)發(fā)出的線(xiàn)程ID、發(fā)出線(xiàn)程時(shí)的時(shí)間戳等等。
通常情況,可以使用mysqlbinlog直接讀取二進(jìn)制日志文件并將它們用于本地MySQL服務(wù)器。也可以使用–read-from-remote-server選項(xiàng)從遠(yuǎn)程服務(wù)器讀取二進(jìn)制日志。
當(dāng)讀取遠(yuǎn)程二進(jìn)制日志時(shí),可以通過(guò)連接參數(shù)選項(xiàng)來(lái)指示如何連接服務(wù)器,但它們經(jīng)常被忽略掉,除非你還指定了–read-from-remote-server選項(xiàng)。這些選項(xiàng)是–host、–password、–port、–protocol、–socket和–user。
還可以使用mysqlbinlog來(lái)讀取在復(fù)制過(guò)程中從服務(wù)器所寫(xiě)的中繼日志文件。中繼日志格式與二進(jìn)制日志文件相同。

mysqlbinlog支持下面的選項(xiàng):
·
—help,-?
顯示幫助消息并退出。
·
—database=db_name,-d db_name
只列出該數(shù)據(jù)庫(kù)的條目(只用本地日志)。
·
–force-read,-f
使用該選項(xiàng),如果mysqlbinlog讀它不能識(shí)別的二進(jìn)制日志事件,它會(huì)打印警告,忽略該事件并繼續(xù)。沒(méi)有該選項(xiàng),如果mysqlbinlog讀到此類(lèi)事件則停止。
·
–hexdump,-H
在注釋中顯示日志的十六進(jìn)制轉(zhuǎn)儲(chǔ)。該輸出可以幫助復(fù)制過(guò)程中的調(diào)試。在MySQL 5.1.2中添加了該選項(xiàng)。
·
–host=host_name,-h host_name
獲取給定主機(jī)上的MySQL服務(wù)器的二進(jìn)制日志。
·
–local-load=path,-l pat
為指定目錄中的LOAD DATA INFILE預(yù)處理本地臨時(shí)文件。
·
–offset=N,-o N
跳過(guò)前N個(gè)條目。
·
–password[=password],-p[password]
當(dāng)連接服務(wù)器時(shí)使用的密碼。如果使用短選項(xiàng)形式(-p),選項(xiàng)和 密碼之間不能有空格。如果在命令行中–password或-p選項(xiàng)后面沒(méi)有 密碼值,則提示輸入一個(gè)密碼。
·
–port=port_num,-P port_num
用于連接遠(yuǎn)程服務(wù)器的TCP/IP端口號(hào)。
·
–position=N,-j N
不贊成使用,應(yīng)使用–start-position。
·
–protocol={TCP | SOCKET | PIPE | -position

使用的連接協(xié)議。
·
–read-from-remote-server,-R
從MySQL服務(wù)器讀二進(jìn)制日志。如果未給出該選項(xiàng),任何連接參數(shù)選項(xiàng)將被忽略。這些選項(xiàng)是–host、–password、–port、–protocol、–socket和–user。
·
–result-file=name, -r name
將輸出指向給定的文件。
·
–short-form,-s
只顯示日志中包含的語(yǔ)句,不顯示其它信息。
·
–socket=path,-S path
用于連接的套接字文件。
·
–start-datetime=datetime
從二進(jìn)制日志中第1個(gè)日期時(shí)間等于或晚于datetime參量的事件開(kāi)始讀取。datetime值相對(duì)于運(yùn)行mysqlbinlog的機(jī)器上的本地時(shí)區(qū)。該值格式應(yīng)符合DATETIME或TIMESTAMP數(shù)據(jù)類(lèi)型。例如:
shell> mysqlbinlog –start-datetime=”2004-12-25 11:25:56″ binlog.000003該選項(xiàng)可以幫助點(diǎn)對(duì)點(diǎn)恢復(fù)。
·
–stop-datetime=datetime
從二進(jìn)制日志中第1個(gè)日期時(shí)間等于或晚于datetime參量的事件起停止讀。關(guān)于datetime值的描述參見(jiàn)–start-datetime選項(xiàng)。該選項(xiàng)可以幫助及時(shí)恢復(fù)。
·
–start-position=N
從二進(jìn)制日志中第1個(gè)位置等于N參量時(shí)的事件開(kāi)始讀。
·
–stop-position=N
從二進(jìn)制日志中第1個(gè)位置等于和大于N參量時(shí)的事件起停止讀。
·
–to-last-logs,-t
在MySQL服務(wù)器中請(qǐng)求的二進(jìn)制日志的結(jié)尾處不停止,而是繼續(xù)打印直到最后一個(gè)二進(jìn)制日志的結(jié)尾。如果將輸出發(fā)送給同一臺(tái)MySQL服務(wù)器,會(huì)導(dǎo)致無(wú)限循環(huán)。該選項(xiàng)要求–read-from-remote-server。
·
–disable-logs-bin,-D
禁用二進(jìn)制日志。如果使用–to-last-logs選項(xiàng)將輸出發(fā)送給同一臺(tái)MySQL服務(wù)器,可以避免無(wú)限循環(huán)。該選項(xiàng)在崩潰恢復(fù)時(shí)也很有用,可以避免復(fù)制已經(jīng)記錄的語(yǔ)句。注釋?zhuān)?/strong>該選項(xiàng)要求有SUPER權(quán)限。
·
–user=user_name,-u user_name
連接遠(yuǎn)程服務(wù)器時(shí)使用的MySQL用戶(hù)名。
·
–version,-V
顯示版本信息并退出。

關(guān)于“mysqlbinlog工具基于日志恢復(fù)的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI