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

2021-07-22 22:55:36 字數 4181 閱讀 2266

**

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

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

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

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

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

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

1. 模擬資料

mysql

1

2

3

4

5

6

7

8

9

10

11

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);

2. 全備命令

mysql

1

2

3

4

5

6

7

8

# 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檔案及位置點資訊

3. 繼續插入資料

mysql

1

2

3

4

5

6

mysql

>

insert

student

values(6,

'xiaoming',20);

mysql

>

insert

student

values(6,

'xiaohong',20);

此時誤操作,刪除了test資料庫

mysql

>

drop

database

test;

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

4.檢視全備之後新增的binlog檔案

mysql

1

2

3

4

5

6

# cd /server/backup/

# ls

test_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檔案中了

5. 移動binlog檔案,並讀取sql,剔除其中的drop語句

mysql

1

2

3

# cp /data/3306/mysql-bin.000003 /server/backup/

# mysqlbinlog -d test mysql-bin.000003 >003bin.sql

# 用vim編輯檔案,剔除drop語句

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

6. 恢復資料

mysql

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

# mysql -uroot -p

# mysql -uroot -p -e "select * from test.student;"

+----+----------+-----+

| id

|name

|age

|+----+----------+-----+

| 1

|zhangsan|20

|| 2

|lisi|21

|| 3

|wangwu|22

|+----+----------+-----+

//此時恢復了全備時刻的資料

//然後使用003bin.

sql檔案恢復全備時刻到刪除資料庫之間,新增的資料

# mysql -uroot -p test<003bin.sql

>

# mysql -uroot -p -e "select * from test.student;"

+----+----------+-----+

| id

|name

|age

|+----+----------+-----+

| 1

|zhangsan|20

|| 2

|lisi|20

|| 3

|wangwu|20

|| 4

|xiaoming|20

||5|

xiaohong|20

|+----+----------+-----+

完成

mysql增量 mysql資料庫增量恢復

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

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

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

資料庫 增量恢復

color darkblue 生產線的sqlserver資料庫infoservice星期日做全盤備份,備份名為 infoservice database.7,星期一做差異備份 infoservice database.1,星期二 infoservice database.2.對應的本地模擬庫info...