您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關mysqlbinlog工具基于日志恢復的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1)RESET MASTER
在上面查看日志存放的文件夾中,二進制日志命名的格式是以mysql-bin.*,*代表日志的序號,序號是遞增的,其中還有mysql-bin.index是日志的索引文件,記錄了日志的最大序號
我們執行RESET MASTER命名刪除全部日志
查看刪除后的日志
可以看到,以前的日志全部被清空,新的日志從00001開始
2)PURGE
MASTER LOGS TO & PURGE MASTER
LOGS BEFORE
執行PURGE MASTER LOGS TO
'mysql-bin.******'命令,是將'******'編號之前的所有日志進行刪除
執行PURGE MASTER LOGS BEFORE
'yyyy-mm-dd hh:mm:ss'命令,是將在'yyyy-mm-dd hh:mm:ss'時間之前的所有日志進行刪除
3)-EXPIRE_LOGS_DAYS
此參數是設置日志的過期天數,過期的日志將會被自動刪除,這有利于減少我們管理日志的工作量,需要修改my.cnf
這里我們設定保存日志為3天,3天之后過期的日志將被自動刪除
恢復
bin-log是記錄著mysql所有事件的操作,當mysql發生災難性錯誤時,可以通過bin-log做完整恢復,基于時間點的恢復,和基于位置的恢復
完整恢復,假定我們每天凌晨2點都會使用mysqldump備份數據庫,但在第二天早上9點由于數據庫出現了故障,數據無法訪問,需要恢復數據,先使用昨天凌晨備份的文件進行恢復到凌晨2點的狀態,在使用mysqlbinlog恢復自mysqldump備份以來的binlog
mysql localhost mysql-bin.000001 | mysql -uroot
-p
這樣數據庫就可以完全的恢復到崩潰前的完全狀態
基于時間點的恢復,由于誤操作,比如說刪除了一張表,這時使用上面講的完全恢復是沒有用的,因為日志里面還存在誤操作的語句,,我們需要的是恢復到誤操作前的狀態,然后跳過誤操作的語句,再恢復后面操作的語句,假定我們刪除了一張表的誤操作發生在10:00這個時間點,我們可以使用下面的語句用備份和binlog將數據恢復到故障前
mysqlbinlog --stop-date='2010-09-04 9:59:59' /var/log/mysql-bin.000001 | mysql -uroot -p
然后跳過誤操作的時間點,繼續執行后面的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' 其中的時間是你誤操作的時間點,當然了,這個時間點你需要你自己計算的,而且這個時間點還可以涉及到的不只是誤操作,還可以有正確的操作也被跳過去了。
基于位置恢復,由于上面提到的,使用基于時間點的恢復可能出現,在一個時間點里面可能存在誤操作和其他正確的操作,所以我們需要一種更為精確的恢復方式
使用mysqlbinlog查看二進制,可看到
其中drop tables test1這個誤操作的end_log_pos為8879917,幾下這個id,得出它前后操作的id分別為8879916,8879918
我們將進行位置恢復操作
mysqlbinlog --stop-position='8879916' /var/log/mysql-bin.000001 | mysql -uroot -p
mysqlbinlog --start-position='8879918' /var/log/mysql-bin.000001 | mysql -uroot -p
服務器生成的二進制日志文件寫成二進制格式。要想檢查這些文本格式的文件,應使用mysqlbinlog實用工具。
應這樣調用mysqlbinlog:
shell> mysqlbinlog
[options] log-files…例如,要想顯示二進制日志binlog.000003的內容,使用下面的命令:
shell> mysqlbinlog
binlog.0000003輸出包括在binlog.000003中包含的所有語句,以及其它信息例如每個語句花費的時間、客戶發出的線程ID、發出線程時的時間戳等等。
通常情況,可以使用mysqlbinlog直接讀取二進制日志文件并將它們用于本地MySQL服務器。也可以使用–read-from-remote-server選項從遠程服務器讀取二進制日志。
當讀取遠程二進制日志時,可以通過連接參數選項來指示如何連接服務器,但它們經常被忽略掉,除非你還指定了–read-from-remote-server選項。這些選項是–host、–password、–port、–protocol、–socket和–user。
還可以使用mysqlbinlog來讀取在復制過程中從服務器所寫的中繼日志文件。中繼日志格式與二進制日志文件相同。
mysqlbinlog支持下面的選項:
·
—help,-?
顯示幫助消息并退出。
·
—database=db_name,-d db_name
只列出該數據庫的條目(只用本地日志)。
·
–force-read,-f
使用該選項,如果mysqlbinlog讀它不能識別的二進制日志事件,它會打印警告,忽略該事件并繼續。沒有該選項,如果mysqlbinlog讀到此類事件則停止。
·
–hexdump,-H
在注釋中顯示日志的十六進制轉儲。該輸出可以幫助復制過程中的調試。在MySQL
5.1.2中添加了該選項。
·
–host=host_name,-h host_name
獲取給定主機上的MySQL服務器的二進制日志。
·
–local-load=path,-l pat
為指定目錄中的LOAD
DATA INFILE預處理本地臨時文件。
·
–offset=N,-o N
跳過前N個條目。
·
–password[=password],-p[password]
當連接服務器時使用的密碼。如果使用短選項形式(-p),選項和 密碼之間不能有空格。如果在命令行中–password或-p選項后面沒有 密碼值,則提示輸入一個密碼。
·
–port=port_num,-P port_num
用于連接遠程服務器的TCP/IP端口號。
·
–position=N,-j N
不贊成使用,應使用–start-position。
·
–protocol={TCP | SOCKET | PIPE | -position
使用的連接協議。
·
–read-from-remote-server,-R
從MySQL服務器讀二進制日志。如果未給出該選項,任何連接參數選項將被忽略。這些選項是–host、–password、–port、–protocol、–socket和–user。
·
–result-file=name,
-r name
將輸出指向給定的文件。
·
–short-form,-s
只顯示日志中包含的語句,不顯示其它信息。
·
–socket=path,-S path
用于連接的套接字文件。
·
–start-datetime=datetime
從二進制日志中第1個日期時間等于或晚于datetime參量的事件開始讀取。datetime值相對于運行mysqlbinlog的機器上的本地時區。該值格式應符合DATETIME或TIMESTAMP數據類型。例如:
shell> mysqlbinlog
–start-datetime=”2004-12-25 11:25:56″ binlog.000003該選項可以幫助點對點恢復。
·
–stop-datetime=datetime
從二進制日志中第1個日期時間等于或晚于datetime參量的事件起停止讀。關于datetime值的描述參見–start-datetime選項。該選項可以幫助及時恢復。
·
–start-position=N
從二進制日志中第1個位置等于N參量時的事件開始讀。
·
–stop-position=N
從二進制日志中第1個位置等于和大于N參量時的事件起停止讀。
·
–to-last-logs,-t
在MySQL服務器中請求的二進制日志的結尾處不停止,而是繼續打印直到最后一個二進制日志的結尾。如果將輸出發送給同一臺MySQL服務器,會導致無限循環。該選項要求–read-from-remote-server。
·
–disable-logs-bin,-D
禁用二進制日志。如果使用–to-last-logs選項將輸出發送給同一臺MySQL服務器,可以避免無限循環。該選項在崩潰恢復時也很有用,可以避免復制已經記錄的語句。注釋:該選項要求有SUPER權限。
·
–user=user_name,-u user_name
連接遠程服務器時使用的MySQL用戶名。
·
–version,-V
顯示版本信息并退出。
關于“mysqlbinlog工具基于日志恢復的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。