从mysqldump全备中恢复指定表数据

从mysqldump全备中恢复指定表数据

需求:当需要从全备份中恢复单个表,怎么办?

 

测试前准备
(1).mysqldump备份指定数据库,如:dbtest

[mysql@test]$ mysqldump -uroot -p mysql -F -R -E --triggers --databases dbtest | gzip >dbtest_$(date +%F).sql.gz

(2).确认备份文件已经生成
[mysql@test]$ ll dbtest*
dbtest_2016-11-07.sql.gz

(3).模拟删除auto表

mysql> show tables;
+---------------+
| Tables_in_dbtest |
+---------------+
| ab          |
| dst           |
+---------------+
2 rows in set (0.00 sec)

mysql> select * from ab;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  4 | c    |
+----+------+
3 rows in set (0.00 sec)

mysql> drop table ab;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+---------------+
| Tables_in_ivr |
+---------------+
| dst           |
+---------------+
1 row in set (0.00 sec)

从备份中恢复

(1).从备份文件中找出需要恢复的表的建表语句:

[mysql@test]$ gunzip -c dbtest_2016-11-07.sql.gz | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `ab`/!d;q'
DROP TABLE IF EXISTS `ab`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `ab` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

(2).从备份文件中找出需要恢复表的数据:

[mysql@test]$ gunzip -c dbtest_2016-11-07.sql.gz | grep --ignore-case  'insert into `ab`'
INSERT INTO `ab` VALUES (1,'a'),(2,'b'),(4,'c');

确认了数据之后,就开始恢复了。

(3).恢复被删除表的表结构
[mysql@test]$ gunzip -c dbtest_2016-11-07.sql.gz | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `ab`/!d;q' | mysql -uroot -p mysql dbtest

(4).从备份文件中恢复被删除表的数据:
[mysql@test]$ gunzip -c dbtest_2016-11-07.sql.gz | grep --ignore-case  'insert into `ab`'| mysql -uroot -p mysql dbtest

(5).查看ab表,数据已经恢复。
mysql> select * from ab;
+----+------+
| id | name |
+----+------+
|  1 | a    |
|  2 | b    |
|  4 | c    |
+----+------+
3 rows in set (0.00 sec)

如果按表来备份,或把表结构和数据单独分开备份,单个表恢复起来更容易(参考:mydumper)。

你可能感兴趣的:(备份恢复)