利用frm和idb文件批量还原数据

上传人:宝路 文档编号:3295798 上传时间:2017-08-02 格式:DOC 页数:3 大小:16.51KB
返回 下载 相关 举报
利用frm和idb文件批量还原数据_第1页
第1页 / 共3页
利用frm和idb文件批量还原数据_第2页
第2页 / 共3页
利用frm和idb文件批量还原数据_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《利用frm和idb文件批量还原数据》由会员分享,可在线阅读,更多相关《利用frm和idb文件批量还原数据(3页珍藏版)》请在金锄头文库上搜索。

1、利用 frm 和 idb 文件批量还原数据最近碰到一个问题,一个平时不怎么用数据库在一次搬机器过程中弄挂了,然后在重启过程中不小心把 ibdata 给弄坏了。于是无奈只能通过 frm 和 idb 文件来做数据恢复。因为是整个库的数据有问题,因此在这过程中写了一些脚本来帮助恢复。下面是这次操作的过程:首先说明,本方案只适用于 innodb_file_per_table = 1 这种情况下的做数据恢复。下面是用来说明恢复案例的环境:原数据库数据文件的位置: /data/dbdata库名称: user新库的用户名、密码:root/111111新库的数据文件位置:/data/newdata1、首先做好

2、 frm 和 idb 文件的备份,并准备一个全新的 MySQL 环境,至于为什么要全新的,稍后就会明白。2、通过 frm 文件导出表结构如果你本身就有创建数据的 schema 的 sql 脚本,这一步可以略过。a、首先创建 user 库; create database user;b、接下来需要在 user 库创建原库的 frm 对应的表,这一步可通过 create_init_table.sh【https:/ ./create_init_table.sh /data/dbdata/user root 111111 user运行上面的脚本后,会生成三个文件:create_tmp_table.sq

3、l,discard_tablespace.sh,import_tablespace.sh。在这一步只需要将create_tmp_table.sql 导入到 mysql 中。 mysql -uroot -p user create_tmp_table.sql这样表就都创建好了。c、 关闭 mysql,修改 f 在mysqld段中增加如下配置:innodb_force_recovery = 6d、将需要恢复的 frm 文件替换新的库是的 frm 文件$ cp /data/dbdata/user/*.frm /data/newdata/user/e、重启 mysql 这时登录就可以看到恢复好的表结构

4、了。3、恢复 idb 中的数据a、首先需要找出原来的 idb 中的 space id,可通过下面的方法完成https:/ 。$ ./find_mysql_spaceid.sh /data/dbdata/user root 111111 user脚本将会生成一个文件:export_table_schema.sh。 这个文件主要是用来导出新生成表的建表语句 create_table.sql。生成的 create_table.sql 需要再手动处理一下,删除开头的表名。因为针对一个库,可能其中表的 space id 不一定是连续的,因此第一步生成的表不能直接使用需要重新建表。create_table

5、.sql 会根据 space id 的之间的差值,自动插入一些临时表来填充 space id。b、注释掉 innodb_force_recovery = 6 重启 mysql 继续下面的操作。c、找出最小的 space id,在 MySQL 中填充好 space id。这一步需要注意,不要填多了,否则又要重新弄一个新的 MySQL 环境了。最好分两部做,先留 100 个 space id,在生成完第一批表之后查看一下最后生成的表的 space id再填充后面的 space id。填充 space id 可以使用 fill_table_space.sh 脚本来完成。用法如下:$./fill_ta

6、ble_space.sh 100 root 111111d、填充完成后,执行导入表结构。如下操作:$ mysql -uroot -p user create_table.sqle、执行 discard_tablespace.sh 脚本,做 discard tablespace 操作。$ ./discard_tablespace.shf、将原来的 idb 文件拷贝到现在的 user 库目录下,并修改权限$ chown mysql.mysql /data/newdata/user/*.idbg、执行 import_tablespace.sh$./import_tablespace.shh、在 f 中将 innodb_force_recovery = 6 的注释打开,然后重启 MySQL。这时候可以登录进去看看数据是不是都存在了。如果一切都 OK 的话,接下来可以执行 export_table_data.sh 脚本,导出数据了。 然后你也可以直接 dump 出 sql 文件。本文作者胡星,现任职于华强北商城,原文转自博客: http:/www.colorfuldays.org/

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号