从 MySQL 全备的 SQL 文件中抽离出某张表的数据

事件背景

线上的数据由于开发错误的 update 语句导致数据出现问题,需要将某张指定的表回滚到某个状态,但是查看了凌晨的备份,该数据文件有 20G 左右,不好恢复操作,于是想直接从 SQL 文件中抽离出该表。这里对网上的方法做个记录并测试有效。

方法如下:

1. 导出表结构:

sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `表名`/!d;q' 备份的SQL文件 > table.sql

例如从 backup.sql 的备份文件中导出 hello 表:

sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `hello`/!d;q' backup.sql > table.sql

2. 导出该表数据:

grep 'INSERT INTO `表名`' 备份的SQL文件 > data.sql

这样就能拿到数据了,当然如果想要最新的,可以结合 binlog 使用。

原文地址:https://www.cnblogs.com/Dy1an/p/12835060.html