利用二進制日誌能夠實現基於時間與位置的恢復,例如因爲誤操做刪除了一張表,這時候徹底恢復是沒用的,由於日誌裏面仍是存在錯誤語句,咱們須要的是恢復到誤操做以前的狀態,而後跳過誤操做數據,再恢復後面操做語句
假定須要往裏數據庫中插入兩條數據,但因爲誤操做,兩條插入語句中間刪除了條數據,而這條數據不該該刪除的。mysql
create database cai; //建立新數據了 建立表 ,而且寫入兩行化 開啓二進制日誌 徹底備份一次 mysqladmin -u root -p flush-log //生成日誌文件,此內容爲添加的zhangsan,lisi的信息 mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 > /opt/info.txt //將二進制文件解密後生成生一個新的文本文件.txt
mysqlbinlog --no-defaults --bases64-output=decode-rows -v mysql-bin.000002 >/opt/info.txt //把解密後二進制文件從新生成一個文本文檔 vim /opt/infon.txt //查看裏面須要的參數 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; ........./////省略 時間點 操做了對info表進行了添加 # at 341 //標記號 也能夠居位置標記號恢復 也可也基於時間點恢復 180707 12:05:31 server id 1 end_log_pos 391 CRC32 0x7a99109e Write_rows: table id 108 flags: STMT_END_F ### INSERT INTO `cai`.`info` ### SET ### @1='xiaokeai01' ### @2=88.00 # at 391 #180707 12:05:31 server id 1 end_log_pos 422 CRC32 0x8be308f6 Xid = 35 錯誤標記號 時間點 # at 609 #180707 12:06:12 server id 1 end_log_pos 657 CRC32 0xe5821dc6 Delete_rows: table id 108 flags: STMT_END_F ### DELETE FROM `cai`.`info` ### WHERE ### @1='zhangsan' ### @2=88.00 # at 657 正確操做 標記號 時間點 # at 875 #180707 12:06:16 server id 1 end_log_pos 925 CRC32 0x60ef5b40 Write_rows: table id 108 flags: STMT_END_F ### INSERT INTO `cai`.`info` ### SET ### @1='xiaokeai02' ### @2=88.00 # at 925
mysqlbinlog --no-defaults --stop-datetime='2018-07-07 12:06:12' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p //基於時間恢復 從開頭到指定的時間中止 以前的都會執行操做 mysqlbinlog --no-defaults --start-datetime='2018-07-07 12:06:16' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p //基於正確的時間恢復 從指定的時間點到結尾都會執行操做
mysqlbinlog --no-defaults --stop-position='558' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p //錯誤操做 從開頭的內容一直碰到 指定的錯誤行號便會停下 以前的都會執行 mysqlbinlog --no-defaults --stop-position='558' /usr/local/mysql/data/mysql-bin.000002 | mysql -u root -p //正確操做 從指定的正確的行號到結尾都會執行 # at 558 //標記號 stop--position='558' #180707 12:06:12 server id 1 end_log_pos 609 CRC32 0xcf4ae275 Table_map: `cai`.`info` mapped to number 108 # at 609 ///誤刪標記行開始 #180707 12:06:12 server id 1 end_log_pos 657 CRC32 0xe5821dc6 Delete_rows: table id 108 flags: STMT_END_F ### DELETE FROM `cai`.`info` ### WHERE ### @1='zhangsan' ### @2=88.00 # at 657 //正確行開始 start