MySQL 基於時間點與位置恢復
阿新 • • 發佈:2018-07-07
開始 mark 文本 zhang map bin 完全 slave -o 基於時間點與位置恢復
利用二進制日誌可以實現基於時間與位置的恢復,例如由於誤操作刪除了一張表,這時候完全恢復是沒用的,因為日誌裏面還是存在錯誤語句,我們需要的是恢復到誤操作之前的狀態,然後跳過誤操作數據,再恢復後面操作語句
假定需要往裏數據庫中插入兩條數據,但由於誤操作,兩條插入語句中間刪除了條數據,而這條數據不應該刪除的。
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
MySQL 基於時間點與位置恢復