mysql提取.sql备份文件中的单个表以及表数据

时间:2024-03-11 14:40:52

背景:随着业务模块的不断在增多,数据库mysql容量也是越来越大,做测试时,整个备份还原比较耗费时间,由于有时候仅仅需要单个表或者少数几个表,要想从整个备份文件中提取指定的表以及数据,需要以下方法。

说明:mysql常规备份还原后续补充。。

废话不说,直接上干货:

1、从整个.sql备份文件中提取表结构

  提取"sp_money_detail"表结构(表创建语句)

[root@centos7-50 data]# sed -e\'/./{H;$!d;}\' -e \'x;/CREATE TABLE `sp_money_detail`/!d;q\' qerpdb_test_v2.sql
  DROP TABLE IF EXISTS `sp_money_detail`;
  /*!40101 SET @saved_cs_client     = @@character_set_client */;
  /*!40101 SET character_set_client = utf8 */;
  CREATE TABLE `sp_money_detail` (
    `spMoneyDetailId` int(11) NOT NULL AUTO_INCREMENT,
    `spShopId` int(11) DEFAULT NULL,
    `wsWarehouseId` int(11) DEFAULT NULL COMMENT \'仓库ID\',
    `type` tinyint(4) NOT NULL,
    `delta` decimal(12,2) NOT NULL,
    `result` decimal(12,2) NOT NULL,
    `outId` int(11) DEFAULT NULL,
    `outNo` varchar(63) DEFAULT NULL,
    `createTime` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`spMoneyDetailId`),
  KEY `I_sp_money_detail_sid` (`spShopId`)
) ENGINE=InnoDB AUTO_INCREMENT=172068 DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
  

这样就提取到了表的创建语句。可以直接丢到数据库中进行表的创建

  提取表"sp_money_detail"数据(也就是提取表的插入语句)

[root@centos7-50 data]# grep \'INSERT INTO `sp_money_detail`\' qerpdb_test_v2.sql
INSERT INTO `sp_money_detail` VALUES (\'78156\', \'252\', null, \'21\', \'-4872.00\', \'-4872.00\', \'65321\', \'MD17121900070\', \'2017-12-19 15:37:11\');
INSERT INTO `sp_money_detail` VALUES (\'78157\', \'253\', null, \'21\', \'-100.00\', \'-100.00\', \'65324\', \'MD17122100040\', \'2017-12-21 15:50:14\');
INSERT INTO `sp_money_detail` VALUES (\'78158\', \'253\', null, \'21\', \'-230.00\', \'-330.00\', \'65325\', \'MD17122100056\', \'2017-12-21 16:19:38\');
INSERT INTO `sp_money_detail` VALUES (\'78159\', \'253\', null, \'21\', \'-230.00\', \'-560.00\', \'65326\', \'MD17122100064\', \'2017-12-21 16:38:03\');
...

此方法,是把创表语句以及数据插入语句打印到控制台,也可以使用重定向的方式,把这些语句输出到指定的文件中。