mysqlbinlog 工具

孤竹星發表於2015-05-14
mysqlbinlog 工具說明:它可以審查binlog檔案及中繼日誌檔案的內容。除了在本地去讀binlog檔案,mysqlbinlog同樣可以從其他伺服器上遠端讀取binlog檔案

基本用法:
啟動一個客戶端連線到master,執行下面的命令檢視它們在二進位制日誌中如何結束的。

mysql> reset master;
Query OK, 0 rows affected (0.10 sec)

mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      120 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)

mysql> create table test(
    -> id int auto_increment,
    -> name char(100) not null,
    -> email char(100),
    -> password char(100),
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.07 sec)


mysql> set @password=PASSWORD('test');
Query OK, 0 rows affected (0.00 sec)


mysql> insert into test (name,email,password)
    -> values ('test','test@test.com',@password);
Query OK, 1 row affected (0.03 sec)


mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      697 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

使用mysqlbinlog裝載binlog檔案master-bin.000001的內容

不知道 master-bin.000001檔案位置可以執行下面命令查詢 master-bin.000001檔案位置
find / -name master-bin.000001

[root@root ~]# sudo mysqlbinlog --short-form  --force-if-open --base64-output=never /var/lib/mysql/master-bin.000001
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
ROLLBACK/*!*/;
use `test`/*!*/;
SET TIMESTAMP=1431574509/*!*/;
SET @@session.pseudo_thread_id=999999999/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
create table test(
id int auto_increment,
name char(100) not null,
email char(100),
password char(100),
primary key(id)
)
/*!*/;
SET TIMESTAMP=1431574594/*!*/;
BEGIN
/*!*/;
SET INSERT_ID=1/*!*/;
SET @`password`:=_utf8 0x2A39344244434542453139303833434532413146393539464430324639363443374146344346433239 COLLATE `utf8_general_ci`/*!*/;
SET TIMESTAMP=1431574594/*!*/;
insert into test (name,email,password)
values ('test','test@test.com',@password)
/*!*/;
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

--short-form:mysqlbinlog只列印被執行的SQL語句資訊,忽略關於二進位制日誌中的事件的註釋資訊。當mysqlbinlog只用來回放事件到一個伺服器時,這個選項時非常有用的。如果你想為查詢問題而審計binlog檔案,就需要這些註釋而不能使用該選項。

--force-if-open:如果binlog沒有被正確關閉,無論因為binlog檔案仍在被寫入或因為伺服器系統崩潰,mysqlbinlog都將列印一條警告說這個binlog檔案沒有被正確關閉。這個選項防止列印警告

--base64-output=never:阻止mysqlbinlog列印base64-encoded事件。如果mysqlbinlog必須列印base64-encoded事件,他將列印二進位制日誌的format description事件以顯示其使用的編碼。

mysqlbinlog 可以接受多個檔案,如果給定多個binlog檔案,它們將被按順序處理。

由於binlog檔案通常都很大,可以透過限制選項限定一定範圍內的事件被列印。

--start--position=bytepos:轉儲的第一個事件的位元組位置。如果幾個binlog檔案提供給mysqlbinlog的,這個位置將被解釋為在序列中的第一個檔案的位置。
                                     如果一個事件不在給定位置開始。mysqlbinlog仍然會嘗試解釋在那個位置開始的子節作為一個事件,這通常會導致垃圾輸出。

--stop-position=bytepos:最後列印的事件的子節位置。如果沒有事件在那個位置結束,最後列印的事件的位置將是在bytepos位置之前的事件。給定了多個binlog檔案,該位置將是序列中最後一個檔案的位置。

--start-datetime=datetime:只列印那些有時間戳或datetime後的事件。

--stop-datetime=datetime:只列印那些有時間戳或datetime前的事件。

讀取遠端檔案

為處理遠端讀取binlog檔案,包含有連線到伺服器的主機和使用者的read-from-remote-server選項,以及可選的埠和密碼,用於replication slave許可權的使用者
$sudo mysqlbinlog --read-from-remote-server --host=master.example.com --base64-output=never --user=rple_user --password --start-position=xxx --stop-position=xxx master-bin.000001

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28282660/viewspace-1654361/,如需轉載,請註明出處,否則將追究法律責任。

相關文章