背景:隨着業務模塊的不斷在增多,數據庫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');
...
此方法,是把創表語句以及數據插入語句打印到控制台,也可以使用重定向的方式,把這些語句輸出到指定的文件中。
