糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > ibd 导入mysql_mysql导入frm和ibd文件还原数据

ibd 导入mysql_mysql导入frm和ibd文件还原数据

时间:2018-09-06 13:09:50

相关推荐

ibd 导入mysql_mysql导入frm和ibd文件还原数据

mysql导入frm和ibd文件还原数据

mysql导入frm和ibd文件还原数据

找到mysql安装目录下data目录所在地址

通过:show global variables like "%datadir%";找到地址

还原整个库的数据

1:创建一个新的数据库,数据库需要和frm和ibd的数据库表名和表结构必须一模一样

所以可以导入之前的数据库,我们只为了还原数据而已

导入原来的数据库结构之后,我们先创建以下mysql的存储过程

注意,里面需要改对应的数据库名称mydataSo的位置

-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除

DROP PROCEDURE

IF

EXISTS discard_tablespace;-- 创建存储过程

CREATE PROCEDURE discard_tablespace () BEGIN-- 定义变量

DECLARE

s INT DEFAULT 0;

DECLARE

tableName VARCHAR ( 255 );-- 定义游标,并将sql结果集赋值到游标中

DECLARE

report CURSOR FOR SELECT

table_name

FROM

information_schema.TABLES

WHERE

table_schema = 'mydataSo' -- mydataSo是创建的那个数据库名称

AND table_type = 'base table';-- 声明当游标遍历完后将标志变量置成某个值

DECLARE

CONTINUE HANDLER FOR NOT FOUND

SET s = 1;-- 打开游标

OPEN report;-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致

FETCH report INTO tableName;-- 当s不等于1,也就是未遍历完时,会一直循环

WHILE

s <> 1 DO-- 执行业务逻辑

SET @tableName = CONCAT( tableName );

SET @sqlStr = CONCAT( CONCAT( 'alter table ', @tableName ), ' discard tablespace' );

PREPARE stmt

FROM

@sqlStr;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;-- 将游标中的值再赋值给变量,供下次循环使用

FETCH report INTO tableName;-- 当s等于1时表明遍历以完成,退出循环

END WHILE;-- 关闭游标

CLOSE report;

END;

-- 创建存储过程之前需判断该存储过程是否已存在,若存在则删除

DROP PROCEDURE

IF

EXISTS import_tablespace;-- 创建存储过程

CREATE PROCEDURE import_tablespace () BEGIN-- 定义变量

DECLARE

s INT DEFAULT 0;

DECLARE

tableName VARCHAR ( 255 );-- 定义游标,并将sql结果集赋值到游标中

DECLARE

report CURSOR FOR SELECT

table_name

FROM

information_schema.TABLES

WHERE

table_schema = 'mydataSo' -- mydataSo是创建的那个数据库名称

AND table_type = 'base table';-- 声明当游标遍历完后将标志变量置成某个值

DECLARE

CONTINUE HANDLER FOR NOT FOUND

SET s = 1;-- 打开游标

OPEN report;-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致

FETCH report INTO tableName;-- 当s不等于1,也就是未遍历完时,会一直循环

WHILE

s <> 1 DO-- 执行业务逻辑

SET @tableName = CONCAT( tableName );

SET @sqlStr = CONCAT( CONCAT( 'alter table ', @tableName ), ' IMPORT tablespace' );

PREPARE stmt

FROM

@sqlStr;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;-- 将游标中的值再赋值给变量,供下次循环使用

FETCH report INTO tableName;-- 当s等于1时表明遍历以完成,退出循环

END WHILE;-- 关闭游标

CLOSE report;

END;

创建成功之后,执行CALL discard_tablespace ();

执行完之后,data目录下新建产生的数据库目录里的ibd将会全部被删除,这一步也是为了我们导入ibd和frm的必要过程

执行成功之后,将mysql停止

停止之后,把我们需要导入的frm和ibd文件复制到data目录下新建产生的数据库目录里,(注意不要导入db.opt)提示需要覆盖的文件覆盖即可。

然后打开任务管理器再启动mysql

启动成功之后,执行CALL import_tablespace ();

到这一步即可将frm和ibd文件里的数据还原出来了。

还原某一张表的数据

和前面一样的步骤

1:创建一个新的数据库,该数据库里面创建需要还原数据的表,表名和表结构必须和frm和ibd的数据表一致

2:执行alter tabletableNamediscardtablespacetableName是需要还原数据的表名

3:任务管理器关闭mysql服务

4:复制frm和ibd的数据到data目录下新建产生的数据库目录里

5:启动mysql服务

6:执行alter tabletableNameIMPORT tablespace

数据还原成功

mysql导入frm和ibd文件还原数据相关教程

如果觉得《ibd 导入mysql_mysql导入frm和ibd文件还原数据》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。