三十二、恢复单库单表
在生产环境中,我们误删除的表有时会很小,只有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,存储引擎
今天的学习是为了以后的工作更加的轻松!