mysqlbinlog基於某個偏移量進行數據的恢復(重做),--start-position,--stop-position的使用方法


需求描述:

  今天在看mysqlbinlog的內容,看到了--start-position和--stop-position這些選項,

  就測試下這個參數具體該怎么進行使用呢,在此記錄下.

操作過程:

1.通過mysqlbinlog以文本的格式查看某個binlog的內容

[mysql@redhat6 data]$ mysqlbinlog mysql-bin.000027 | more
/*!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 /*!*/;
# at 4
#180410 17:57:32 server id 1  end_log_pos 107     Start: binlog v 4, server v 5.5.57-log created 180410 17:57:32
BINLOG '
jIrMWg8BAAAAZwAAAGsAAAAAAAQANS41LjU3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
# at 107
#180410 17:57:32 server id 1  end_log_pos 180     Query    thread_id=89    exec_time=0    error_code=0
SET TIMESTAMP=1523354252/*!*/;
SET @@session.pseudo_thread_id=89/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=0/*!*/;
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/*!*/;
BEGIN
/*!*/;
# at 180   ##############################################################################################################起始點##### #180410 17:57:32 server id 1  end_log_pos 496     Query    thread_id=89    exec_time=0    error_code=0 use `employees`/*!*/; SET TIMESTAMP=1523354252/*!*/; INSERT INTO `departments` VALUES ('d001','Marketing'), ('d002','Finance'), ('d003','Human Resources'), ('d004','Production'), ('d005','Development'), ('d006','Quality Management'), ('d007','Sales'), ('d008','Research'), ('d009','Customer Service') /*!*/;
# at 496   ##############################################################################################################起始點#####
#180410 17:57:32 server id 1  end_log_pos 523     Xid = 30173
COMMIT/*!*/;
# at 523
#180410 17:57:32 server id 1  end_log_pos 596     Query    thread_id=89    exec_time=1    error_code=0
SET TIMESTAMP=1523354252/*!*/;
BEGIN
/*!*/;
# at 596

備注:在at 180和at 496之間是一個插入的操作.180的結束點即end_log_pos就是496.

2.將employees表的內容清空

3.通過--start-position和--stop-position來指定執行哪個范圍內的操作

[mysql@redhat6 data]$ mysqlbinlog --start-position=180 --stop-position=496 mysql-bin.000027 | mysql -uroot -p
Enter password: 
[mysql@redhat6 data]$ 

4.查看employess表的數據

備注:at 180和at 496之間的insert語句已經被成功執行.所以呢,--start-position就是起始點,--stop-position就是結束點,兩個位置之間的內容,就會被mysql重新執行.那么在實際的恢復過程中,就可以跳過一些錯誤的語句不執行.

 

文檔創建時間:2018年4月18日15:04:55


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM