三十二、恢复单库单表

在生产环境中,我们误删除的表有时会很小,只有10M,而备份很大,假设有500G,以下介绍两种方式恢复单库单表。

mysqldump恢复单库单表

从mysqldump全备中获取库和表的sql语句进行恢复,适用于单独库表损坏的情况

#获得建表语句
$ sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q'  full.sql>createtable.sql

#获得INSERT INTO 语句,用于数据的恢复
$ grep -i 'INSERT INTO `city`'  full.sqll >data.sql &

#获取单库的备份
$ sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' all.sql >world.sql

XBK恢复单表

这里模拟inc1数据库中t1表误操作被删除的情况,首先要有该表XBK的备份,以及t1表的建表语句,才能单表恢复。

#首先要有被删除表的建表语句,可以查询以往的备份记录或者查询语句,这里我为了演示方便,并没有删除表,使用命令查看建表语句。
mysql> show create table t1;
+-------+-----------------------------------------------------------------------------------------+
| Table | Create Table                                                                            |
+-------+-----------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-----------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

#模拟故障,删除表t1
mysql> drop table t1;

#通过上述的建表语句重建表,删除t1表空间
mysql> alter table t1 discard tablespace;

#复制XBK备份的t1表的ibd,frm文件到data/inc1目录下
$ cd /backup/xbk/full/inc1/
$ cp t1.ibd t1.frm /usr/local/mysql5.7/data/inc1/

#更改权限
$ chown -R mysql.mysql  /usr/local/mysql5.7/data/inc1/

#导入表空间
mysql> alter table t1 import  tablespace;

#可以查看t1表数据已经恢复了
mysql> select * from t1;

学习来自:老男孩深标DBA课程 第七章 备份恢复-2,存储引擎

posted @ 2021-04-01 23:37  努力吧阿团  阅读(152)  评论(0编辑  收藏  举报