linux 中,将 *.frm、*.ibd 文件恢复到Mysql中

一、说明

*.frm*.ibd 文件恢复到Mysql中,主要过程可以分两步:
(1):恢复表结构

  • 不知道表构结构的(如果不知道create table,则需要一些复杂操作得到create table 的SQL )
  • 知道表结构的(如果知道的create table,则操作步骤简单)

(2):恢复表数据 (首先需要解除当前创建的表与 .ibd文件间的关系,接着将要恢复数据表的.ibd文件与当前创建的表关联起来)

二、恢复表结构

2.1、创建数据库

此步骤省略。

2.2、示例说明

待恢复的数据在目录 /mnt/mariadb/data/xxx_pc
在这里插入图片描述
mysql 的数据目录在 /var/lib/mysql/xxx_pc
在这里插入图片描述

说明: xxx_pc 是数据库的名字。

2.3 、得到表结构的SQL(如果不知道create table)

mysql 从 frm 文件恢复 table 表结构的3种方法: https://blog.csdn.net/xiaojin21cen/article/details/103971628

通过此文,可以得到 create table 的SQL。

2.4 、创建表结构(已经知道create table)

pms_product 表为例,

DROP TABLE IF EXISTS `pms_product`;

CREATE TABLE `pms_product` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `product_category_id` bigint(20) DEFAULT NULL COMMENT '产品分类',
  `product_attribute_refer_id` varchar(100) DEFAULT '' COMMENT '与pms_product_attrbute表的关联',
  `pname` varchar(100) NOT NULL DEFAULT '' COMMENT '产品名称',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格(单价)',
  `total_count` int(11) DEFAULT NULL COMMENT '总数量',
  `sales_count` int(11) DEFAULT NULL COMMENT '已销售数量', 
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) engine=InnoDB row_format=COMPACT;

说明:

  • 此处的列名 中是一个占位符, 只要有列数对应上即可,不要求列名一致。
  • 表结构的 engine=InnoDB row_format=COMPACT; 是固定的。其他的不需要添加。
    比如说表的主键是自增的,是否要加上auto_increment=1 ? 答是完全不需要的。

三、恢复表数据

3.1、删除新建表的表空间

alter table  pms_product  discard tablespace;

此SQL的作用是 删除 /var/lib/mysql/xxx_pc 目录下的 pms_product.ibd 文件。

3.2、将待恢复的 *.ibd 文件复制到Mysql 数据目录下

复制 pms_product.ibd 文件到Mysql 数据目录下。 sh 命令:

cp /mnt/mariadb/data/_pc/pms_product.ibd  /var/lib/mysql/xxx_pc/

修改 pms_product.ibd 文件的所有者为 mysql。sh 命令 :

chown -R mysql.mysql pms_product.ibd

3.3、将新的表空间与表结构进行绑定

sql 脚本:

alter table  pms_product  import tablespace;

四、测试

查询导入的数据

select * from pms_product;

五、总结

DROP TABLE IF EXISTS `pms_product`;

CREATE TABLE `pms_product` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `product_category_id` bigint(20) DEFAULT NULL COMMENT '产品分类',
  `product_attribute_refer_id` varchar(100) DEFAULT '' COMMENT '与pms_product_attrbute表的关联',
  `pname` varchar(100) NOT NULL DEFAULT '' COMMENT '产品名称',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格(单价)',
  `total_count` int(11) DEFAULT NULL COMMENT '总数量',
  `sales_count` int(11) DEFAULT NULL COMMENT '已销售数量', 
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) engine=InnoDB row_format=COMPACT;

alter table   pms_product  discard tablespace ; 


# sh 命令
cp /mnt/mariadb/data/xxx_pc/pms_product.ibd  /var/lib/mysql/xxx_pc/

chown -R mysql.mysql pms_product.ibd


alter table  pms_product  import tablespace;;

select * from pms_product;

上面是恢复数据所涉及到所有的sql、sh命令。
如果在恢复同一个数据库的数据,只需要修改 表名列名,上面的脚本可以重复使用了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值