mysqlbinlog用法說明mysql
服務器生成的二進制日誌文件寫成二進制格式。要想檢查這些文本格式的文件,應使用mysqlbinlog實用工具。
應這樣調用mysqlbinlog:
shell> mysqlbinlog [options] log-files…例如,要想顯示二進制日誌binlog.000003的內容,使用下面的命令:
shell> mysqlbinlog binlog.0000003輸出包括在binlog.000003中包含的全部語句,以及其它信息例如每一個語句花費的時間、客戶發出的線程ID、發出線程時的時間戳等等。sql
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 | -positionshell
使用的鏈接協議。
·
–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
顯示版本信息並退出。
還可使用–var_name=value選項設置下面的變量:
·
open_files_limit
指定要保留的打開的文件描述符的數量。
能夠將mysqlbinlog的輸出傳到mysql客戶端以執行包含在二進制日誌中的語句。若是你有一箇舊的備份,該選項在崩潰恢復時也頗有用:
shell> mysqlbinlog hostname-bin.000001 | mysql或:
shell> mysqlbinlog hostname-bin.[0-9]* | mysql若是你須要先修改含語句的日誌,還能夠將mysqlbinlog的輸出從新指向一個文本文件。(例如,想刪除因爲某種緣由而不想執行的語句)。編輯好文件後,將它輸入到mysql程序並執行它包含的語句。
mysqlbinlog有一個–position選項,只打印那些在二進制日誌中的偏移量大於或等於某個給定位置的語句(給出的位置必須匹配一個事件的開始)。它還有在看見給定日期和時間的事件後中止或啓動的選項。這樣可使用–stop-datetime選項進行點對點恢復(例如,可以說「將數據庫前滾動到今天10:30 AM的位置」)。
若是MySQL服務器上有多個要執行的二進制日誌,安全的方法是在一個鏈接中處理它們。下面是一個說明什麼是不安全的例子:數據庫
shell> mysqlbinlog hostname-bin.000001 | mysql # DANGER!!shell> mysqlbinlog hostname-bin.000002 | mysql # DANGER!!使用與服務器的不一樣鏈接來處理二進制日誌時,若是第1個日誌文件包含一個CREATE TEMPORARY TABLE語句,第2個日誌包含一個使用該臨時表的語句,則會形成問題。當第1個mysql進程結束時,服務器撤銷臨時表。當第2個mysql進程想使用該表時,服務器報告 「不知道該表」。
要想避免此類問題,使用一個鏈接來執行想要處理的全部二進制日誌中的內容。下面提供了一種方法:
shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql另外一個方法是:
shell> mysqlbinlog hostname-bin.000001 > /tmp/statements.sqlshell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sqlshell> mysql -e 「source /tmp/statements.sql」mysqlbinlog產生的輸出能夠不須要原數據文件便可從新生成一個LOAD DATA INFILE操做。mysqlbinlog將數據複製到一個臨時文件並寫一個引用該文件的LOAD DATA LOCAL INFILE語句。由系統肯定寫入這些文件的目錄的默認位置。要想顯式指定一個目錄,使用–local-load選項。
由於mysqlbinlog能夠將LOAD DATA INFILE語句轉換爲LOAD DATA LOCAL INFILE語句(也就是說,它添加了LOCAL),用於處理語句的客戶端和服務器必須配置爲容許LOCAL操做。安全
警告:爲LOAD DATA LOCAL語句建立的臨時文件不會自動刪除,由於在實際執行完那些語句前須要它們。再也不須要語句日誌後應本身刪除臨時文件。文件位於臨時文件目錄中,文件名相似original_file_name-#-#。
–hexdump選項能夠在註釋中產生日誌內容的十六進制轉儲:服務器