Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6656842
  • 博文数量: 1005
  • 博客积分: 8199
  • 博客等级: 中将
  • 技术积分: 13071
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-25 20:19
个人简介

脚踏实地、勇往直前!

文章分类

全部博文(1005)

文章存档

2020年(2)

2019年(93)

2018年(208)

2017年(81)

2016年(49)

2015年(50)

2014年(170)

2013年(52)

2012年(177)

2011年(93)

2010年(30)

分类: Mysql/postgreSQL

2014-10-22 11:28:01

  在oracle里,我们可以通过应用归档日志恢复数据库自备份依赖的某个时间点,在mysql里面,基于myisam引擎的数据库(该数据库下的所有表都是myisam引擎),我们可以回放binlog日志(注意数据库必须开启日志模式)将数据库恢复到之前的某个时间点或是某个具体的日志位置,下面的过程,我模拟删除了某个表,然后通过回放binlog进行恢复.

1.备份数据库

首先锁表进行备份,防止其他会话操作数据库
mysql>flush tables with read lock;


拷贝数据文件到备份目录
$cp -a /db/mysql/dbdata/hxl_myisam /dbext/mysql/bak/hxl_myisam_20141022


刷新日志
mysql>flush logs;

这个时候数据库使用的binlog日志
mysql -h node2 -uroot -p -e "show master status" --vertical>/dbext/mysql/bak/master.info
[mysql@node2 bak]$ more master.info
*************************** 1. row ***************************
             File: mysql-bin.000119
         Position: 120
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:


解锁
mysql>unlock tables;


2.模拟删除其中一个表
这个时候对数据库进行了相应的操作(比如创建表,删除数据),其中一个步骤是删除了一个表
mysql>DROP table tb_dic_class_myisam_10


3.停掉数据库,将备份还原
停止数据库
$mysqladmin -h node2 -uroot -p shutdown

备份当前的数据库目录
$mv /db/mysql/dbdata/hxl_myisam /db/mysql/dbdata/hxl_myisam.tmp

将之前备份的还原回来
$cp -a /dbext/mysql/bak/hxl_myisam_20141022 /db/mysql/dbdata/hxl_myisam


4.启动mysql
编辑my.cnf文件,在[mysqld]栏目下添加如下参数关闭TCP/IP数据库连接,这里中只允许本机通过socket连接
skip-networking
然后启动数据库

$mysqld_safe --defaults-file=/db/mysql/config/my.cnf

尝试采用scoket连接数据库
$mysql -u root -p -S /db/mysql/dbdata/mysql.sock


5.找到需要重放和滤过的语句

[mysql@node2 binlog]$ mysqlbinlog --database=hxl_myisam /db/mysql/mysqllog/binlog/mysql-bin.000119|grep -B 3 -i "drop table"
# at 2856
#141022 10:44:13 server id 1  end_log_pos 3003 CRC32 0xe93d57cc         Query   thread_id=63    exec_time=0     error_code=0
SET TIMESTAMP=1413945853/*!*/;
DROP TABLE `tb_dic_class_myisam_10` /* generated by server */


我们需要略过的语句在 2856 位置上,紧接着是 3003 位置上,我们可以把日志从开始重放到 2856 位置,然后再从 3003 开始到最后.

mysqlbinlog --database=hxl_myisam /db/mysql/mysqllog/binlog/mysql-bin.000119 --stop-position=2856|mysql -u root -p -S /db/mysql/dbdata/mysql.sock 

mysqlbinlog --database=hxl_myisam /db/mysql/mysqllog/binlog/mysql-bin.000119 --start-position=3003|mysql -u root -p -S /db/mysql/dbdata/mysql.sock
 


6.验证数据


7.修改my.cnf文件
将之前修改的my.cnf文件修改回来,然后重新启动mysql

-- The End --

阅读(4100) | 评论(0) | 转发(0) |
0

上一篇:如何给ibdata文件瘦身

下一篇:hbase安装

给主人留下些什么吧!~~