利用ibd文件批量恢复mysql数据库下的所有表

前提:

用的innodb引擎且有以下配置:

innodb_file_per_table=1

源数据库与目标数据库的innodb_page_size一样


假设要恢复的数据库为shengye

1 用mysqldump备份 源数据库表结构信息tbl.sql

DROP TABLE IF EXISTS `book`;

CREATE TABLE `book` (

  `id` smallint NOT NULL AUTO_INCREMENT,

  `book_id` int NOT NULL,

  `name` varchar(300) NOT NULL,

  `image` varchar(150) DEFAULT NULL,

  `type` tinyint DEFAULT '0',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=743 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Table structure for table `options` */

DROP TABLE IF EXISTS `options`;

CREATE TABLE `options` (

  `id` smallint unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',

  `code` varchar(10) NOT NULL COMMENT '编码',

  `name` varchar(50) DEFAULT NULL COMMENT '名称',

  `type` varchar(10) DEFAULT NULL COMMENT '类型',

  PRIMARY KEY (`id`),

  KEY `type` (`type`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

/*Table structure for table `parameter` */

DROP TABLE IF EXISTS `parameter`;

CREATE TABLE `parameter` (

  `parameter_id` smallint unsigned NOT NULL COMMENT 'id',

  `parameter_code` varchar(30) NOT NULL COMMENT '编码',

  `parameter_name` varchar(50) NOT NULL COMMENT '名称',

  `parameter_type` tinyint unsigned NOT NULL COMMENT '类别',

  `property_id` smallint unsigned NOT NULL COMMENT '资产id',

  `parameter_unit` varchar(30) NOT NULL COMMENT '单位',

  `parameter_description` varchar(400) DEFAULT NULL COMMENT '描述',

  `parameter_creation_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',

  `parameter_creator` varchar(80) DEFAULT NULL COMMENT '创建人',

  PRIMARY KEY (`parameter_id`),

  KEY `fr_key_property` (`property_id`),

  CONSTRAINT `fr_key_property` FOREIGN KEY (`property_id`) REFERENCES `property` (`id`) ON DELETE RESTRICT

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='参数';

/*Table structure for table `property` */

DROP TABLE IF EXISTS `property`;

CREATE TABLE `property` (

  `id` smallint unsigned NOT NULL AUTO_INCREMENT COMMENT '资产',

  `asset_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '资产编码',

  `asset_name` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '资产名称',

  `purchase_price` decimal(10,0) DEFAULT NULL COMMENT '购置价格',

  `purchase_time` datetime DEFAULT NULL COMMENT '采购日期',

  `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '描述',

  `pic_url` varchar(200) DEFAULT NULL COMMENT '图片地址',

  `principal_id` smallint unsigned NOT NULL COMMENT '负责人id',

  `is_critical` varchar(100) DEFAULT NULL COMMENT '关键性(下拉)',

  `state` varchar(100) DEFAULT NULL COMMENT '状态',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='资产';

2 从源数据库上生成丢弃表空间语句

先禁用外键约束:

SET FOREIGN_KEY_CHECKS=0;

执行SELECT CONCAT('alter table ', TABLE_NAME, ' discard tablespace;') FROM information_schema.tables WHERE table_schema = 'shengye';

得到sql:

ALTER TABLE book DISCARD TABLESPACE;

ALTER TABLE OPTIONS DISCARD TABLESPACE;

ALTER TABLE parameter DISCARD TABLESPACE;

ALTER TABLE property DISCARD TABLESPACE;

3 切换到目标数据库,并创建shengye源数据库。导入1中的tbl.sql, 再导入2中的丢弃表空间语句

4 将源数据库shengye的ibd文件,复制目标数据库shengye中

5 导入表空间

ALTER TABLE book IMPORT TABLESPACE;

ALTER TABLE OPTIONS IMPORT TABLESPACE;

ALTER TABLE parameter IMPORT TABLESPACE;

ALTER TABLE property IMPORT TABLESPACE;

6 备份成功

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容