使用mysqldump 进行增量恢复


模拟,生产环境恢复数据


1.full back  (3 rows)  3pm   前一天的全备份

2,insert 3 rows       5pm   第二天新增数据

3,delete from table    7pm   误操作

4,insert 3 rows       8pm   不断新增数据

5,recovery databases    9pm   恢复数据

 


1,全备份

/mysqldump -uroot -p  db1 > /root/mysqlbackup/t2.sql

2,模拟生成新的二进制日志

/etc/init.d/mysqld restart
mysqladmin -uroot -p123456 --flush-log

3,新增数据  

 

insert into t2 values (4,40),(5,50),(6,60);

4,误操作

 

delete from t2;

5,不断更新数据

 insert into t2 values (7,70),(8,80),(9,90);

6,开始恢复

 cp data/mysql-bin.0000002  /back  备份现有二进制日志,防止二次损坏

 mysql -uroot -p db1 < /root/mysqlbackup/t2.sql 全部恢复



7,下面跳过delete 这条记录,或者删除delete这条语句,恢复其他position的记录


# at 526

#150512  7:50:58 server id 1  end_log_pos 640 CRC32 0x4f6549a3 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1431388258/*!*/;

insert into t2 values (4,40),(5,50),(6,60)

/*!*/;

# at 640

#150512  7:50:58 server id 1  end_log_pos 671 CRC32 0x253a2239 Xid = 60

COMMIT/*!*/;

# at 671

#150512  7:52:11 server id 1  end_log_pos 748 CRC32 0x7617cce8 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1431388331/*!*/;

BEGIN

/*!*/;

# at 748

#150512  7:52:11 server id 1  end_log_pos 834 CRC32 0x112802bc Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1431388331/*!*/;

delete from t2

/*!*/;

# at 834

#150512  7:52:11 server id 1  end_log_pos 865 CRC32 0x8895c353 Xid = 62

COMMIT/*!*/;

# at 865

#150512  7:52:38 server id 1  end_log_pos 942 CRC32 0xa34076dd Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1431388358/*!*/;

BEGIN

/*!*/;

# at 942

#150512  7:52:38 server id 1  end_log_pos 1056 CRC32 0xa1c9c171 Querythread_id=1exec_time=0error_code=0

SET TIMESTAMP=1431388358/*!*/;

insert into t2 values (7,70),(8,80),(9,90)

/*!*/;

# at 1056

#150512  7:52:38 server id 1  end_log_pos 1087 CRC32 0x73a98385 Xid = 64

COMMIT/*!*/;


8,开始恢复:

 

bin/mysqlbinlog --start-position=526 --stop-position=640 data/mysql-bin.000004 | mysql -uroot -p
bin/mysqlbinlog --start-position=942 --stop-position=1056 data/mysql-bin.000004 | mysql -uroot -p

或者使用第二种恢复方法(删除binlog中的delete)

/bin/mysqlbinlog data/mysql-bin.00002 >bin.sql
mysql -uroot -p <bin.sql

9, 恢复完成后建议在此刷新bin log。

10,查询恢复的数据