mysqlbinlog引數詳解#摘錄自MySQL5.5文件
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 | -positionChapter 8. Client and Utility Programs
file:///D:/download/refman-5.1-zh.html-chapter/refman-5.1-zh.html-chapter/client-side-scripts.html[2010/2/24 5:22:14]
使用的連線協議。
· --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值的描述參見--startdatetime選項。該選項可以幫助及時恢復。
· --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, -VChapter 8. Client and Utility Programs
file:///D:/download/refman-5.1-zh.html-chapter/refman-5.1-zh.html-chapter/client-side-scripts.html[2010/2/24 5:22:14]
顯示版本資訊並退出。
還可以使用--var_name=value選項設定下面的變數:· open_files_limit
指定要保留的開啟的檔案描述符的數量。
可以將mysqlbinlog的輸出傳到mysql客戶端以執行包含在二進位制日誌中的語句。如果你有一箇舊的備份,該
選項在崩潰恢復時也很有用(參見5.9.1節, “資料庫備份”):
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.sql
shell> mysqlbinlog hostname-bin.000002 >> /tmp/statements.sql
shell> 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操作。參見5.6.4節, “LOAD DATA LOCAL安
全問題”。
警告: 為LOAD DATA LOCAL語句建立的臨時檔案不會自動刪除,因為在實際執行完那些語句前需要它們。不再
需要語句日誌後應自己刪除臨時檔案。檔案位於臨時檔案目錄中,檔名類似original_file_name-#-#。
--hexdump選項可以在註釋中產生日誌內容的十六進位制轉儲:
Chapter 8. Client and Utility Programs
file:///D:/download/refman-5.1-zh.html-chapter/refman-5.1-zh.html-chapter/client-side-scripts.html[2010/2/24 5:22:14]
shell> mysqlbinlog --hexdump master-bin.000001
上述命令的輸出應類似:
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
# at 4
#051024 17:24:13 server id 1 end_log_pos 98
# Position Timestamp Type Master ID Size Master Pos Flags
# 00000004 9d fc 5c 43 0f 01 00 00 00 5e 00 00 00 62 00 00 00 00 00
# 00000017 04 00 35 2e 30 2e 31 35 2d 64 65 62 75 67 2d 6c |..5.0.15.debug.l|
# 00000027 6f 67 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |og..............|
# 00000037 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
# 00000047 00 00 00 00 9d fc 5c 43 13 38 0d 00 08 00 12 00 |.......C.8......|
# 00000057 04 04 04 04 12 00 00 4b 00 04 1a |.......K...|
# Start: binlog v 4, server v 5.0.15-debug-log created 051024 17:24:13
# at startup
ROLLBACK;
十六進位制轉儲的輸出包含下面的元素:
· Position: The byte position within the log file.
· Timestamp: The event timestamp. In the example just shown, '9d fc 5c 43' is the representation of
'051024 17:24:13' in hexadecimal.
· Type: The type of the log event. '0f' means that the example event is a
FORMAT_DESCRIPTION_EVENT. The types are:
· 00 UNKNOWN_EVENT
· This event should never be present in the log.
· 01 START_EVENT_V3
· This indicates the start of a log file written by MySQL 4 or earlier.
· 02 QUERY_EVENT
· The most common type of events. These contain queries executed
· on the master.
· 03 STOP_EVENT
· Indicates that master has stopped.
· 04 ROTATE_EVENT
· Written when the master switches to a new log file.
· 05 INTVAR_EVENT
· Used mainly for AUTO_INCREMENT values and if the LAST_INSERT_ID()
· function is used in the statement.
· 06 LOAD_EVENT
· Used for LOAD DATA INFILE in MySQL 3.23.
Chapter 8. Client and Utility Programs
file:///D:/download/refman-5.1-zh.html-chapter/refman-5.1-zh.html-chapter/client-side-scripts.html[2010/2/24 5:22:14]
· 07 SLAVE_EVENT
· Reserved for future use.
· 08 CREATE_FILE_EVENT
· Used for LOAD DATA INFILE statements. This indicates the start
· of execution of such a statement. A temporary file is created
· on the slave. Used in MySQL 4 only.
· 09 APPEND_BLOCK_EVENT
· Contains data for use in a LOAD DATA INFILE statement. The
· data is stored in the temporary file on the slave.
· 0a EXEC_LOAD_EVENT
· Used for LOAD DATA INFILE statements. The contents of the
· temporary file is stored in the table on the slave.
· Used in MySQL 4 only.
· 0b DELETE_FILE_EVENT
· Rollback of LOAD DATA INFILE statement. The temporary file
· should be deleted on slave.
· 0c NEW_LOAD_EVENT
· Used for LOAD DATA INFILE in MySQL 4 and earlier.
· 0d RAND_EVENT
· Used to send information about random values if the RAND()
· function is used in the query.
· 0e USER_VAR_EVENT
· Used to replicate user variables.
· 0f FORMAT_DESCRIPTION_EVENT
· This indicates the start of a log file written by MySQL 5 or later.
· 10 XID_EVENT
· Event indicating commit of XA transaction
· 11 BEGIN_LOAD_QUERY_EVENT
· Used for LOAD DATA statements in MySQL 5 and later.
· 12 EXECUTE_LOAD_QUERY_EVENT
· Used for LOAD DATA statements in MySQL 5 and later.
· 13 TABLE_MAP_EVENT
· Reserved for future use
· 14 WRITE_ROWS_EVENT
· Reserved for future use
· 15 UPDATE_ROWS_EVENT
· Reserved for future use
· 16 DELETE_ROWS_EVENT
· Reserved for future use
Chapter 8. Client and Utility Programs
file:///D:/download/refman-5.1-zh.html-chapter/refman-5.1-zh.html-chapter/client-side-scripts.html[2010/2/24 5:22:14]
· Master ID: The server id of the master that created the event.
· Size: The size in bytes of the event.
· Master Pos: The position of the event in the original master log file.
· Flags: 16 flags.
· 01 LOG_EVENT_BINLOG_IN_USE_F
· Log file correctly closed (Used only in FORMAT_DESCRIPTION_EVENT)
· If this flag is set (if the flags are e.g. '01 00') in an
· FORMAT_DESCRIPTION_EVENT, then the log file has not been
· properly closed. Most probably because of a master crash (for
· example, due to power failure).
· 02 Reserved for future use.
· 04 LOG_EVENT_THREAD_SPECIFIC_F
· Set if the event is dependent on the connection it was
· executed in (example '04 00'), e.g. if the event uses
· temporary tables.
· 08 LOG_EVENT_SUPPRESS_USE_F
· Set in some circumstances when the event is not dependent on
· the current database
其它標誌保留用於將來使用。
在以後的版本中十六進位制轉儲輸出的格式可能會改變。