Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1366981
  • 博文数量: 243
  • 博客积分: 888
  • 博客等级: 准尉
  • 技术积分: 2955
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-05 14:33
个人简介

漫漫长路,其修远兮!

文章分类

全部博文(243)

文章存档

2017年(2)

2016年(22)

2015年(32)

2014年(57)

2013年(107)

2012年(23)

分类: Mysql/postgreSQL

2013-04-17 16:01:01

【背景】
 在测试机搭建一个测试环境来测试基于binlog的数据库恢复,mysqlbinlog工具可以指定恢复时间点和指定恢复位置,参数分别为--start-date--stop-datestart-positionstop-position。本文演示的是使用指定恢复时间点的方式。
恢复场景准备
1. 测试库新建一个测试库yewu_test和delete_test的表
create table delete_test(uIn int, name varchar(30));
2. 插入三条测试数据:insert into  delete_test values(1,'a'),(2,'b'),(3,'c');
3. 创建一个全备份,备份完成时间2010-04-05 19:57:29
mysqldump -uroot --socket=/tmp/mysql_tmp.sock --single-transaction --master-data=2 --skip-opt --no-autocommit --create-options yewu_test > yewu_test.sql
4. 在2013-04-05 20:01:14分删除delete_test表
 drop table delete_test;
5. 在2013-04-05 20:04:47分创建一个新表并插入数据
 create table after_time_table(uIn int, colname varchar(30));
 insert into after_time_table values(1,'col1'),(2,'col2');
现在要求恢复误删的delete_test表的所有数据

【实施恢复步骤】
1. 停止应用并做当前时间点的一个全备(如果恢复操作失败,用于回档)
2. 关闭binlog后重启mysqld
 1)注释/etc/my.cnf配置文件中的log_bin配置
 2)mysqladmin --socket=/tmp/mysql_tmp.sock -uroot shutdown
 3)mysqld_safe --defaults-file=/etc/my.cnf --socket=/tmp/mysql_tmp.sock &
3. 进入mysql客户端并删除yewu_test库
 drop database yewu_test;
4. 还原2013-04-05 19:57:29的全备
 create database yewu_test;
 mysql --default-character-set=gbk -uroot yewu_test --socket=/tmp/mysql_tmp.sock < yewutest.sql
5. 恢复截止到2013-04-05 20:01:13的数据(即恢复drop table delete_test前的所有数据)
mysqlbinlog -uroot --socket=/tmp/mysql_tmp.sock --stop-date='2010-04-05 20:01:13' binlog.000010 | mysql -uroot --socket=/tmp/mysql_tmp.sock
6. 恢复从2013-04-05 20:01:15到当前的数据(即恢复drop table delete_test后的所有数据)
mysqlbinlog -uroot --socket=/tmp/mysql_tmp.sock --start-date='2010-04-05 20:01:15' binlog.000010 | mysql -uroot --socket=/tmp/mysql_tmp.sock
7. 打开binlog并重启mysqld
 ./bin/mysqld_safe --defaults-file=/etc/my.cnf --socket=/tmp/mysql_tmp.sock &
8. 此时在yewu_test库看到delete_test表的所有数据已经还原,另外,在drop table delete_test之后所有的数据库操作(建表和插入数据到after_time_table),也同样被恢复。

说明:上述基于时间的恢复,精确的时间是从binlog文件中找到该语句对应的具体时间点。

阅读(1785) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

yuyunliuhen2013-05-01 23:00:29

好文,谢谢分享~~