實戰!MySQL 資料庫增量資料恢復

2021-07-23 03:55:10 字數 1909 閱讀 6643

場景概述

1、mysql資料庫每日零點自動全備

2、某天上午10點,小明莫名其妙地drop了乙個資料庫

3、我們需要通過全備的資料檔案,以及增量的binlog檔案進行資料恢復

主要思想

1、利用全備的sql檔案中記錄的change master語句,binlog檔案及其位置點資訊,找出binlog檔案增量的部分

2、用mysqlbinlog命令將上述的binlog檔案匯出為sql檔案,並剔除其中的drop語句

3、通過全備檔案和增量binlog檔案的匯出sql檔案,就可以恢復到完整的資料

過程示意圖

操作過程

模擬資料create table `student` (  `id` int(11) not null auto_increment,  `name` char(20) not null,  `age` tinyint(2) not null default '0',  primary key (`id`),  key `index_name` (`name`)) engine=innodb auto_increment=8 default charset=utf8 mysql> insert student values(1,'zhangsan',20);mysql> insert student values(2,'lisi',21);mysql> insert student values(3,'wangwu',22);

全備命令# mysqldump -uroot -p -b -f -r -x --master-data=2 test|gzip >/server/backup/test_$(date +%f).sql.gz 引數說明:-b 指定資料庫-f 重新整理日誌-r 備份儲存過程等-x 鎖表--master-data 在備份語句裡新增change master語句以及binlog檔案及位置點資訊

繼續插入資料mysql> insert student values(6,'xiaoming',20);mysql> insert student values(6,'xiaohong',20); 此時誤操作,刪除了test資料庫mysql> drop database test;

此時,全備之後到誤操作時刻之間,使用者寫入的資料在binlog中,需要恢復出來

檢視全備之後新增的binlog檔案# cd /server/backup/# lstest_2016-08-02.sql.gz# gzip -d test_2016-08-02.sql.gz# grep change test_2016-08-02.sql-- change master to master_log_file='mysql-bin.000003', master_log_pos=107;

這是全備時刻的binlog檔案位置,即mysql-bin.000003的107行,因此在該檔案之前的binlog檔案中的資料都已經包含在這個全備的sql檔案中了

移動binlog檔案,並讀取sql,

剔除其中的drop語句# cp /data/3306/mysql-bin.000003 /server/backup/# mysqlbinlog -d test mysql-bin.000003 >003bin.sql# 用vim編輯檔案,剔除drop語句

在恢復全備資料之前必須將該binlog檔案移出,否則恢復過程中,會繼續寫入語句到binlog,最終導致增量恢復資料部分變得比較混亂

恢復資料# mysql -uroot -p

小結適合人為sql語句造成的誤操作或者沒有主從複製等的熱備情況宕機時的修復

恢復條件要全備和增量的所有資料

恢復時建議對外停止更新,即禁止更新資料庫

先恢復全量,然後把全備時刻點以後的增量日誌,按順序恢復成sql檔案,然後把檔案中有問題的sql語句刪除(也可通過時間和位置點),再恢復到資料庫

mysql增量 mysql資料庫增量恢復

mysqldump uroot p b discuzx f x master data 2 events gzip root discuzx.sql.gz 寫入資料 刪除資料 第一時間關閉資料庫對外讀寫功能,並進入資料執行重新整理mysqlbinlog的位置點,新生成檔案 flush logs 根據...

Mysql 資料庫增量備份

mysql 的二進位制日誌檔案中,儲存了所有對資料庫進行更改的sql語句,所以增量備份就是 先把mysql資料庫進行完全備份,然後儲存完全備份以後產生的日誌檔案,等下次完全備份時,重複以上過程.具體操作 在my.ini中新增如下資訊 log bin 二進位制日誌檔名 新增了這條配置資訊以後,重啟my...

MySQL 資料庫增量資料恢復案例

mysql資料庫每日零點自動全備 某天上午10點,小明莫名其妙地drop了乙個資料庫 我們需要通過全備的資料檔案,以及增量的binlog檔案進行資料恢復 利用全備的sql檔案中記錄的change master語句,binlog檔案及其位置點資訊,找出binlog檔案增量的部分 用mysqlbinlo...