mysql利用frm文件和ibd文件进行表结构恢复和数据还原。

mysql数据还原

一、表结构还原

1.方案一:使用mysqlfrm 工具(推荐)
由于mysqlfrm是mysql-utilities工具一部分,那么我们安装mysql-utilities即可,下载好对应的源码包,进行编译安装

shell> wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz

shell> tar -xvzf mysql-utilities-1.6.4.tar.gz 

shell> cd mysql-utilities-1.6.4

shell> python ./setup.py build

shell> python ./setup.py install

用–help 可看mysqlfrm 使用帮助

mysqlfrm --server=root:[email protected]:3306 /root/databases_backup_20200530162626/dd20/order.frm --port=3434 --user=mysql --diagnostic

执行上面语句,会得到下面结果

WARNING: Using a password on the command line interface can be insecure.
# WARNING The --port option is not used in the --diagnostic mode.
# WARNING: The --user option is only used for the default mode.
# Source on 127.0.0.1: ... connected.
# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for /root/databases_backup_20200530162626/dd20/order.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `dz20_1`.`mrxdtp_hedge_order` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  `plan_id` int(11) DEFAULT NULL comment '计划id', 
  `instrument_id` int(11) DEFAULT NULL comment '币对', 
  `client_oid` char(255) COLLATE `utf8_general_ci` DEFAULT NULL comment '自定义订单号', 
  `buy_order_id` char(255) COLLATE `utf8_general_ci` DEFAULT NULL comment '买入市场平台订单标识', 
  `sell_order_id` char(255) COLLATE `utf8_general_ci` DEFAULT NULL comment '卖出市场平台订单标识', 
  `status` tinyint(4) DEFAULT NULL comment '订单状态 1下单成功 2买入部分成功 3卖出部分成功', 
  `size` int(8) DEFAULT NULL comment '购买合约张数', 
  `sell_type` tinyint(4) DEFAULT NULL comment '2:卖出开空  3:卖出平多', 
  `buy_type` tinyint(4) DEFAULT NULL comment '1:买入开多  4:买入平空', 
  `buy_price` decimal(11,4) DEFAULT NULL comment '买入时的下单价', 
  `sell_price` decimal(11,4) DEFAULT NULL comment '卖出的下单价', 
  `create_time` int(11) DEFAULT NULL, 
  `update_time` int(11) DEFAULT NULL, 
PRIMARY KEY `PRIMARY` (`id`),
KEY `status` (`status`),
KEY `plan_id` (`plan_id`),
KEY `size` (`size`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

这样就得到了表结构

2.方案二
①新建一张表与想恢复的表同名,字段数随意。
②将my.cnf配置文件增加innodb_force_recovery=6
③停止mysql服务 service mysql stop
④将原有的.frm文件覆盖现在生成的表的frm
⑤启动mysql服务 service mysql start
⑥这是会提示一个错误,大概意思是字段数不一样。
⑦重复上面操作,建表数据字段数一样即可。

二、数据还原

1.恢复数据

在指定的数据库中执行丢弃表空间命令

alter table 表名 discard tablespace;

2.拷贝原来的ibd文件,并覆盖新建表ibd,并修改权限

chown mysql.mysql 表名 .ibd

3.导入表空间

alter table 表名 import tablespace;

这样就可以了。

你可能感兴趣的:(mysql)