通过数据库备份跟binlog日志记录,可能恢复原来的数据
恢复步骤
a)创建新的数据库 create database rollback_db
b)将数据库备份倒入新创建的rollback_db中
c)找到数据库备份的最后时间点,并将mysqlbinlog中该时间点之后的命令 *** 作记录通过mysqlbinlog工具保存为sql命令文本
d)将sql命令文本倒入数据库,可能rollback_db就是需要恢复的db了
3.mysqlbinlog介绍
binlog基本定义:二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中;
作用:MySQL的作用类似于Oracle的归档日志,可以用来查看数据库的变更历史(具体的时间点所有的SQL *** 作)、数据库增量备份和恢复(增量备份和基于时间点的恢复)、Mysql的复制(主主数据库的复制、主从数据库的复制)
二进制日志的信息:
文件位置:默认存放位置为数据库文件所在目录下
文件的命名方式: 名称为hostname-bin.xxxxx (重启mysql一次将会自动生成一个新的binlog)
状态的查看:mysql>show variables like '%log_bin%'
4.利用bin_log恢复数据
a)最长用的就是回复指定数据端的数据了,可以直接恢复到数据库中:
mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456
亦可导出为sql文件,再导入至数据库中:
mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:\1.sql
source d:\1.sql
b)指定开始\结束位置,从上面的查看产生的binary log我们可以知道某个log的开始到结束的位置,可以在恢复的过程中指定回复从A位置到B位置的log.需要用下面两个参数来指定:
--start-positon="50" //指定从50位置开始
--stop-postion="100"//指定到100位置结束
1、首先构建测试环境数据create table t1(a varchar(10),b varchar(10))insert into t1 values('1','1')insert into t1 values('2','2')commit。
2、模拟误修改,将t1表中的b字段更新为错误数据 "123456"update t1 set b='123456' where a='1'commitselect * from t1。
3、将恢复工具上传到服务器并进行解压。unzip binlog2sql-master.zip。
4、得到误修改时的binlog文件(show binary logs),实验环境是mysql-bin.000011。
5、通过 binlog2sql.py 脚本的到所有 对表 t1 的修改 *** 作。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011'。
6、得到了误删除的sql的准确位置在1382-1615之间,使用 _**-B**_ 选项生成回滚sql。python binlog2sql.py -hlocalhost -P23307 -ubinlog2sql -p'binlog2sql' -dtest -tt1 --start-file='mysql-bin.000011' --start-position=1382 --stop-position=1615 -B。
7、执行得到的回滚语句进行误 *** 作恢复。就完成了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)