MySQL 基於時間點與位置恢復

基於時間點與位置恢復

利用二進制日誌能夠實現基於時間與位置的恢復,例如因爲誤操做刪除了一張表,這時候徹底恢復是沒用的,由於日誌裏面仍是存在錯誤語句,咱們須要的是恢復到誤操做以前的狀態,而後跳過誤操做數據,再恢復後面操做語句
假定須要往裏數據庫中插入兩條數據,但因爲誤操做,兩條插入語句中間刪除了條數據,而這條數據不該該刪除的。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

MySQL 基於時間點與位置恢復

當以爲操做有風險的時候能夠考錄是用基於時間點恢復日誌 固然仍是要開啓二進制日誌

MySQL 基於時間點與位置恢復

解密後生成的文本
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  //基於正確的時間恢復 從指定的時間點到結尾都會執行操做

MySQL 基於時間點與位置恢復
MySQL 基於時間點與位置恢復

基於行號恢復
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 基於時間點與位置恢復

相關文章
相關標籤/搜索