Chinaunix首页 | 论坛 | 博客
  • 博客访问: 781003
  • 博文数量: 99
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1163
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-22 09:50
个人简介

一个守望数据库的老菜鸟

文章分类

全部博文(99)

文章存档

2019年(21)

2018年(17)

2017年(37)

2016年(24)

我的朋友

分类: Mysql/postgreSQL

2017-08-09 16:31:51

博客文章除注明转载外,均为原创。转载请注明出处。
本文链接地址:http://blog.chinaunix.net/uid-31396856-id-5769002.html



需求场景:时候我们需要从mysqldump备份文件中恢复出一张表。思路如下:
由于mysqldump备份文件是一个SQL文件,因此抽出建表的DDL语句和insert into `xxxx`的数据语句。然后在数据库里面创建表和执行SQL文件就能恢复所需表了。

使用grep进行查找
grep --ignore-case  'insert into `crm_pieces_dk`' > crm_pieces_dk_data.sql

但是这样可能会比较慢。如果我们使用show tables来确认所恢复表和下一张表的名称,那么可以使用awk和sed来进行抽取
1.使用awk
awk '/^-- Table structure for table `crm_pieces_dk`/,/^-- Table structure for table `crm_intopieces_info_dk`/{print}' crm_pieces_dk_06 > crm_pieces_dk_rec.sql

2.使用sed
sed -n -e '/Table structure for table .crm_pieces_dk./,/Table structure for table .crm_intopieces_info_dk./p' crm_pieces_dk_06 > crm_pieces_dk_rec.sql

如果不知道备份文件中所恢复表的下一张表,也可以使用sed这样抽取
--tablle ddl---
sed -n -e '/CREATE TABLE `crm_intopieces_dk`/,/ -- Dumping data for table `crm_pieces_dk`/p' crm_pieces_dk_06  > crm_pieces_dk_ddl.sql

--table data--
sed -n '/INSERT INTO `crm_pieces_dk`/p' crm_pieces_dk_06 > crm_pieces_dk_data.sql

然后执行SQL脚本恢复表和数据。

但是,如果mysqldump备份的是大数据量的数据库备份时候,就比较麻烦了。我经常遇到这种恢复需求的数据库备份文件超过100g。在这种情况下,可以使用split对mysqldump文件进行切割分片来加快速度。

比如:
split -b 10g all_dump_backup_20170809.sql -d -a 3



---The end.

阅读(2968) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~