设为首页 收藏本站
查看: 658|回复: 0

[经验分享] mysqlbinlog恢复单表

[复制链接]

尚未签到

发表于 2015-12-21 09:46:06 | 显示全部楼层 |阅读模式
背景介绍:MySQL的版本是mysql-5.6.17。由于公司在前端程序出现了一个问题,程序端的误操作,在某个时刻删除了整个表,但是这个表在这个时刻后还是有数据写入,所以要恢复这个时刻之前的数据但是又不能破坏数据现在的写入。与是我用如下的方法进行了数据的恢复具体方法如下:
1,查看删除前的数据,以便在删除后对数据进行一致性的校验并进行delete操作(改方法至少进行的粗略的校验,具体校验可以使用pt-checkcum工具)
mysql> select count(*) from sdb_b2c_orders;
+----------+
| count(*) |
+----------+
|    35630 |
+----------+
1 row in set (0.01 sec)

mysql>delete from sdb_b2c_orders


2,检查执行该操作的大概时间,并转换binlog(转换成人类能读懂的形式),并查找执行delete的时刻。
/opt/mysql-5.1.57/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -start-date='2015-06-24 10:10:00' --stop-date='2015-06-24 11:10:00' /data/mysql/data_3310/mysqld2-binlog.000023 > /tmp/recovery1.log

[iyunv@localhost ~]# vi /tmp/recovery1.log
#150624 11:18:57 server id 1  end_log_pos 308613577     Query   thread_id=979   exec_time=0     error_code=0
SET TIMESTAMP=1435115937/*!*/;
/*!40000 ALTER TABLE `sdb_b2c_orders` ENABLE KEYS */
/*!*/;
# at 308613577
#150624 11:18:57 server id 1  end_log_pos 308613604     Xid = 17217
COMMIT/*!*/;
# at 308613604
#150624 11:21:00 server id 1  end_log_pos 308613674     Query   thread_id=981   exec_time=5     error_code=0
SET TIMESTAMP=1435116060/*!*/;
SET @@session.foreign_key_checks=1, @@session.unique_checks=1/*!*/;
SET @@session.sql_mode=0/*!*/;
BEGIN
/*!*/;
# at 308613674
#150624 11:21:00 server id 1  end_log_pos 308613765     Query   thread_id=981   exec_time=5     error_code=0
SET TIMESTAMP=1435116060/*!*/;
delete from sdb_b2c_orders
/*!*/;
# at 308613765
#150624 11:21:00 server id 1  end_log_pos 308613792     Xid = 17238
COMMIT/*!*/;
# at 308613792
#150624 11:23:55 server id 1  end_log_pos 308613894     Query   thread_id=982   exec_time=0     error_code=0
SET TIMESTAMP=1435116235/*!*/;
SET @@session.foreign_key_checks=0, @@session.unique_checks=0/*!*/;
SET @@session.sql_mode=524288/*!*/;
DROP TABLE IF EXISTS `sdb_b2c_orders`
/*!*/;
# at 308613894
#150624 11:23:55 server id 1  end_log_pos 308617447     Query   thread_id=982   exec_time=0     error_code=0
SET TIMESTAMP=1435116235/*!*/;
CREATE TABLE `sdb_b2c_orders` (
  `order_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `order_bn` varchar(50) DEFAULT '0',


在文本中输入/delete进行查找

3,查找到时刻为11:21:00,再进二进制转换,确定更精确的时刻,以便进行数据恢复。
/opt/mysql-5.1.57/bin/mysqlbinlog --no-defaults --base64-output=decode-rows  --stop-date='2015-06-24 10:20:59' /data/mysql/data_3310/mysqld2-binlog.000023 > /tmp/recovery1.log

4,在装换的的日志中抽取要恢复的单表的sql,并查看抽取是sql格式是否正确(我这是sdb_b2c_orders表)。这里要注意的是grep的命令,如果想要深入的理解grep,可以在Linux命令大全(http://man.linuxde.net/)这个网址上查看。
cat /tmp/recovery1.log |grep  --ignore-case -E 'insert|update|delete' -A2 |grep -E 'sdb_b2c_orders|;' > /tmp/test1.sql
[iyunv@localhost ~]# tail /tmp/test1.sql
………………
'false','local',NULL,'pc',0,NULL)
/*!*/;
update sdb_b2c_orders set status='finish' where createtime>unix_timestamp('2015-05-27') and status='active'
/*!*/;
delete from sdb_b2c_orders where createtime<unix_timestamp('2015-05-27') and createtime>unix_timestamp('2015-05-26')
/*!*/;


5,发现格式是正确的,于是将数据导入到数据库中,并校验数据是否一致,发现数据是一致的。

mysql -h127.0.0.1* -P3310 fuzhou sdb_b2c_orders < /tmp/test1.sql
mysql> select count(*) from sdb_b2c_orders;
+----------+
| count(*) |
+----------+
|    35630 |
+----------+
1 row in set (0.01 sec)

小结:这种回复单表的方法是很简单的,但是如果是一张大表,比如超过一个G,那么回复的时间会比较长。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-154122-1-1.html 上篇帖子: MySQL管理员珍藏:十大必备工具盘点 下篇帖子: MYSQL_SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表