返回首页

binlog恢复数据(SQL数据呗delete后如何回滚?)

来源:www.xuniwu.cn   时间:2023-04-18 03:06   点击:266  编辑:admin   手机版

一、SQL数据呗delete后如何回滚?

操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,因为需要还原和binlog差来恢复,等不了,很费时。这里先说明下因为Delete 操作的恢复方法:主要还是通过binlog来进行恢复,前提是binlog_format必须是Row格式,否则只能通过备份来恢复数据了。方法: 条件:开启Binlog,Format为Row。 步骤:1.通过MySQL自带工具mysqlbinlog 指定导出操作的记录:

2.数据取出来之后,需要把数据解析反转,原始数据:

Row格式的binlog记录的格式如上面所示,需要做的工作就是吧Delete的操作转换成Insert操作,发上面的都是有一定规律的,并且需要注意的是:

1、字段类型 DATETIME 日期。在日志中保存的格式为 @4=2012-10-25 00:00:00,需要将2012-10-25 00:00:00加上引号。

2、负数。在日志中保存的格式为 @1=-1 (4294967295), -2(4294967294),-3(4294967293),需要将()里面的数据去掉,只保留@1=-1。

3、转义字符集。如:'s,\,等。上面3点清楚之后,可以写一个脚本(水平有限,在提升中,写的不好看):

View Code

执行脚本:方法:python 脚本名 binlog文件 字段数目

python restore.py binlog.txt 36 > binlog.sql

命令行中的36 表示 需要还原的表的字段有36个,效果:

最后还原:

总结:下次整理Row和STATEMENT的优劣。

二、MySQL存储过程误删了怎么恢复?

(1)利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件中增量的那部分。

(2)用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句。

(3)通过全备文件和增量binlog文件的导出sql文件,就可以恢复到完整的数据。

三、误删除了数据库的数据文件,而且没有备份,怎样恢复?

打开mysql的bin log功能:对于mysql也是支持增量备份,但要打开mysql的bin log功能。我们修改mysql的配置文件。linux是/etc/my.cnf,windows是mysql的安装目录/my.ini我们在[mysqld]下面加上log-bin一行代码,如下面。[mysqld]log-bin=mysql-bin复制代码加完后重起mysql即可。某客户更新数据的时候,误删了数据库的内容,因为数据库做了主从,但是没有做备份(备份很重要啊!)幸好开启了bin-log,之后只好把整个日志的记录拿回来本地进行恢复。之后自己也做了一个简单的测试,对数据进行恢复,具体如下:

1、新建一个表CREATE TABLE `lynn`.`sn_test` ( `name` VARCHAR( 10 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL , `age` INT( 3 ) NOT NULL ) ENGINE = MYISAM;

2、插入多条数据INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn1', '1');INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn2', '2'); INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn3', '3'); INSERT INTO `lynn`.`sn_test` (`name`, `age`) VALUES ('lynn4', '4');

3、查看数据并删除mysql> select * from sn_test;+-------+-----+| name | age |+---------+---+| lynn1 | 1 || lynn2 | 2 || lynn3 | 3 || lynn4 | 4 |+---------+-----+4 rows in set (0.00 sec)mysql> delete from sn_test;Query OK, 4 rows affected (0.00 sec)mysql> select * from sn_test;Empty set (0.00 sec)4、mysqlbinlog恢复数据mysqlbinlog mysql-bin.000006 > 1.sql查看1.txt里面数据插入的纪录,把删除之前的数据进行恢复mysqlbinlog mysql-bin.000006 --start-position=2471 --stop-position=2876 | mysql -uroot -p123重新登录,查看数据,OK,已经成功恢复了对于数据库操作,应该注意如下问题:1、要常备份(全备,增量备份),出了问题可以最快恢复数据;2、操作数据库前,要把需要操作的数据库或者表dump出来;3、需要把bin-log打开,就算没有做上面的两步,也可以通过日志恢复数据

四、mysql误删命令行如何恢复?

1.利用全备的sql文件中记录的CHANGE MASTER语句,binlog文件及其位置点信息,找出binlog文件中增量的那部分。

2.用mysqlbinlog命令将上述的binlog文件导出为sql文件,并剔除其中的drop语句。

3.通过全备文件和增量binlog文件的导出sql文件,就可以恢复到完整的数据。

顶一下
(0)
0%
踩一下
(0)
0%