/*!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 /*!*/; # at4 #16080814:25:16 server id 1 end_log_pos 249Start: binlog v 4, server v 10.1.14-MariaDB created 16080814:25:16at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ' zCWoVw8BAAAA9QAAAPkAAAABAAQAMTAuMS4xNC1NYXJpYURCAGxvZwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAADMJahXEzgNAAgAEgAEBAQEEgAA3QAEGggAAAAICAgCAAAACgoKAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAEEwQAAK+oLro= '/*!*/; # at249 #16080814:25:16 server id 1 end_log_pos 274 Gtid list [] # at274 #16080814:25:16 server id 1 end_log_pos 314 Binlog checkpoint WSTest-bin.000001 # at314 #16080814:28:32 server id 1 end_log_pos 352 GTID 0-1-1 trans /*!100101 SET @@session.skip_parallel_replication=0*//*!*/; /*!100001 SET @@session.gtid_domain_id=0*//*!*/; /*!100001 SET @@session.server_id=1*//*!*/; /*!100001 SET @@session.gtid_seq_no=1*//*!*/; BEGIN /*!*/; # at352 #16080814:28:32 server id 1 end_log_pos 466 Query thread_id=3 exec_time=0 error_code=0 use `test1`/*!*/; SETTIMESTAMP=1470637712/*!*/; SET @@session.pseudo_thread_id=3/*!*/; 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 utf8mb4 *//*!*/; SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; INSERT INTO `test1`.`test1` (`aaaa`) VALUES (1234) /*!*/; # at466 #16080814:28:32 server id 1 end_log_pos 493 Xid =55 COMMIT/*!*/; # at493 #16080814:31:19 server id 1 end_log_pos 531 GTID 0-1-2 ddl /*!100001 SET @@session.gtid_seq_no=2*//*!*/; # at531 #16080814:31:19 server id 1 end_log_pos 611 Query thread_id=3 exec_time=14 error_code=0 SETTIMESTAMP=1470637879/*!*/; TRUNCATE `test1` /*!*/; DELIMITER ; # Endof log file ROLLBACK/* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
其中我們可以看到重要的兩筆資料,它們在整個時間序列的狀態為何。
1 2 3 4 5 6 7 8 9 10 11 12 13
INSERT INTO `test1`.`test1` (`aaaa`) VALUES (1234) /*!*/; # at466 #16080814:28:32 server id 1 end_log_pos 493 Xid =55 COMMIT/*!*/; # at493 #16080814:31:19 server id 1 end_log_pos 531 GTID 0-1-2 ddl /*!100001 SET @@session.gtid_seq_no=2*//*!*/; # at531 #16080814:31:19 server id 1 end_log_pos 611 Query thread_id=3 exec_time=14 error_code=0 SETTIMESTAMP=1470637879/*!*/; TRUNCATE `test1` /*!*/;
g. 所以如果我們要恢復到 truncate table 之前的話,首先就是 restore full backup。
1 2 3 4
E:\backup>mysql -u sujunmin -p test1 < test1.sql Enter password: ************
E:\backup
h. 接著還原 binlog 到 14:31:19 之前(因為接下來就要 truncate table 了)。
1 2 3 4
E:\backup>mysqlbinlog "e:\MariaDB 10.1\data\WSTest-bin.000001" --stop-datetime="2016/08/08 14:31:00" | mysql -u sujunmin -p test1 Enter password: ************
E:\backup>
i. 看一下 test1.test1,資料應該又回來了。
運用規劃
因為這個 binlog 會在系統的狀態改變(重新啟動,記憶體資料寫入 disk…)時產生,加上沒有其他的備份機制(類似像 Oracle DB 的 Archive 模式),其實當有事情時會不能知道能夠還原到哪。