一次通过.frm和.ibd恢复mysql数据表的过程

  • Post author:
  • Post category:mysql


1、导出.frm和.ibd文件

2、

安装Mysql的Utilities

3、执行命令(实际恢复的表)

mysqlfrm --diagnostic ./stat_vehicle_mileage.frm

4、复制Sql,添加ROW_FORMAT=COMPACT(需要检测生成的Sql语句是否可用)

CREATE TABLE `stat_vehicle_mileage` (
  `id` varchar(64) NOT NULL COMMENT '记录唯一标识',
  `vehicle_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '车辆ID',
  `bus_model_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '车型ID',
  `stat_cycle` varchar(6) DEFAULT NULL COMMENT '统计周期',
  `stat_date` datetime DEFAULT NULL COMMENT '统计时间',
  `data_date` datetime DEFAULT NULL COMMENT '数据时间',
  `mileage` decimal(10,1) DEFAULT NULL COMMENT '里程',
  `co2` double DEFAULT NULL COMMENT '减排CO2',
  `tree_num` double DEFAULT NULL,
  `mileage_added` decimal(10,1) DEFAULT NULL COMMENT '累计里程',
  `co2_added` double DEFAULT NULL,
  `tree_num_added` double DEFAULT NULL,
  `company_id` varchar(64) DEFAULT NULL COMMENT '公司Id',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建人ID',
  `create_date` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '近更新人ID',
  `update_date` datetime DEFAULT NULL COMMENT '近更新时间',
  `remarks` varchar(255) DEFAULT NULL COMMENT '备注',
  `del_flag` char(1) DEFAULT NULL COMMENT '删除标识 0:有效 1:删除',
  `abnormal_number` bigint(6) DEFAULT NULL COMMENT '异常里程记录数',
  `last_mileage` decimal(10,1) DEFAULT NULL COMMENT '仪表里程',
  `initial_mileage` decimal(10,1) DEFAULT '0.0' COMMENT '初始里程',
  `gps_begin_mileage` decimal(10,1) DEFAULT '0.0' COMMENT 'GPS当日初始里程',
  `gps_end_mileage` decimal(10,1) DEFAULT '0.0' COMMENT 'GPS当日结束里程',
  `gps_abnormal_number` bigint(6) DEFAULT '0' COMMENT '异常里程次数',
  `gps_mileage` decimal(10,1) DEFAULT '0.0' COMMENT 'GPS当日行驶里程',
  `gps_mileage_add` decimal(10,1) DEFAULT '0.0' COMMENT 'GPS总行驶里程',
  `is_corrected` varchar(5) DEFAULT NULL COMMENT '是否修正 true:是 false:否',
  `mileage_time` bigint(20) DEFAULT NULL COMMENT '仪表运行里程时间',
  `gps_mileage_time` bigint(20) DEFAULT NULL COMMENT 'GPS运行里程时间',
  `valid_mileage_add` decimal(10,1) DEFAULT NULL COMMENT '有效总里程,当天有仪表取仪表,没有取GPS',
  PRIMARY KEY (`id`),
  KEY `vehicle_id_index` (`vehicle_id`,`data_date`,`stat_cycle`) USING BTREE,
  KEY `idx_datadate` (`data_date`),
  KEY `idx_datadate_vehicleid_mileage_gpsmileage` (`data_date`,`vehicle_id`,`mileage`,`gps_mileage`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='车辆里程统计数据'
ROW_FORMAT=COMPACT;

5、新建表(新建一个空的数据库,在建一个新表)

在这里插入图片描述

6、断开表和表空间联系

alter table stat_vehicle_mileage discard tablespace;

7、查询数据文件位置(也可以通过 /cat /etc/mysql/mysql.cnf查看);

show global variables like "%datadir%";

8、关闭mysql服务(根据实际命令处理)

service mysql stop

9、登录服务器

进入上面查询的目录

10、上传 stat_vehicle_mileage.ibd文件到目录下

11、赋权

chmod +777 -R mysql stat_vehicle_mileage.*
chown -R mysql:mysql stat_vehicle_mileage.ibd

在这里插入图片描述

12、重启Mysql服务(根据实际命令处理)

service mysql start

13、重新建立表和表和表空间连接

alter table stat_vehicle_mileage import tablespace;

12、验证数据是否存在 (也可以重启下数据库)

SELECT COUNT(1) FROM stat_vehicle_mileage;



版权声明:本文为xionglangs原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。