ibdata1数据库如何恢复?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ibdata1数据库如何恢复?相关的知识,希望对你有一定的参考价值。

我有一个服务器,MYSQL5的,前一阵数据库出现问题,重装了MYSQL,但是以前备下来的数据倒不进去了,我以前备的时候是直接档下来的,没有转换成SQL格式,在本地架服务器也倒不进去,有没有高手指点一下,高分求!!!
他们说是因为数据库备份的时候有文件损坏,那需要怎么修复呢? 别的文件也有,但是好像有有损坏的地方,也就是连不上去,有什么办法吗?把损坏的修理好,用什么软件,或有别的什么办法吗?谢谢了

参考技术A ibdata1?
------------------------------------------------
这个只是innodb的数据文件,还有表定义那部分呢?
除了innodb存储引擎外,你是否还有别的存储引擎在用的呢?

以前备的时候是直接档下来的,没有转换成SQL格式
------------------------------------------------
你拷贝文件全了吗?如果拷贝全了的话(要拷贝mysql数据文件目录下的data整个目录,还有innodb下的innodb_data_home_dir、innodb_log_group_home_dir等目录下的文件,一定要拷贝全,切记!!!),那直接复制过去覆盖就可以用了的.(即冷备份)

否则,你只有ibdata1文件,而没有其他关联的文件(如表定义的.frm后缀文件),则就比较难恢复了,除非你先全部把所有表都重新定义一遍,然后再拷贝ibdata1覆盖了。
参考技术B 如果你的系统不稳定,建议去找个一键还原的软件

目前来说没有什么很好的修复工具的,如果是有病毒再好的修复工具也没有用的

装个一键还原是才是当务之急,系统有问题一还原就可以了 ,嗬嗬嗬嗬
参考技术C 目前来说没有什么很好的修复工具的,如果是有病毒再好的修复工具也没有用的本回答被提问者采纳

mysql数据库被破坏,只剩下ibd文件时如何恢复

在使用独立表空间的情况下,如果不慎使得innodb存储引擎的元数据文件ibdata损坏,我们还可以挽救宝贵的数据.因为在innodb使用独立表空间的情况下,ibdata文件会记录每个innodb表的id,只要使得ibd中的表id和ibdata文件中记录的表id相同,就能够打开表,读取到数据.

#创建表

CREATE TABLE `ibdtest` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `fid` int(11) NOT NULL COMMENT '表b中的id',  `content` char(255) NOT NULL COMMENT '操作内容,系统生成',  `mark` char(255) NOT NULL COMMENT '备注',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

#添加数据INSERT ibdtest (fid,content,mark) VALUES (1,'1','1'),(2,'2','2');SELECT * FROM ibdtest;

参考技术A

    创建已经丢失的表结构

    先要安装 mysql-utilities。

    // RedHatyum -y install mysql-server mysql-utilities// Debianapt install mysql-utilities

    使用 mysqlfrm 从 .frm 文件里面找回建表语句。

    // 分析一个 .frm 文件生成建表的语句mysqlfrm --diagnostic /var/lib/mysql/test/t1.frm// 分析一个目录下的全部.frm文件生成建表语句root@username:~# mysqlfrm --diagnostic /var/lib/mysql/my_db/bk/ >createtb.sqlroot@username:~# grep "^CREATE TABLE" createtb.sql |wc -l124

    可以看到一共生成了 124 个建表语句。

    有很多时候也可以从其它库里面生成建表语句,如同一个应用的其它数据库或不同的测试环境,采用下面的 mysqldump 生成建表语句:

    mysqldump --no-data --compact my_db>createtb.sql

    登录 MySQL 生成表。

    mysql> create database my_db;mysql> use my_dbDatabase changedmysql> source createtb.sqlQuery OK, 0 rows affected (0.07 sec)......

    导入旧的数据文件

    将新建的没有包括数据的 .ibd 文件抛弃

    root@username:/var/lib/mysql/my_db# ll *.ibd|wc12411167941root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \\| grep -v  Tables_in_my_db  \\| while read a; do mysql -e "ALTER TABLE my_db.$a DISCARD TABLESPACE"; doneroot@username:/var/lib/mysql/my_db# ll *.ibd|wcls: cannot access '*.ibd': No such file or directory000

    可以看到所有的 .idb 文件都已经被抛弃了。然后把旧的有数据的 .ibd 文件拷贝到这个 my_db 目录下面,别忘了把属主改过来:chown mysql. *,再把这些数据文件 import 到数据库中。

    root@username:/var/lib/mysql/my_db# mysql -e "show tables from my_db" \\| grep -v  Tables_in_my_db  \\| while read a; \\do mysql -e "ALTER TABLE my_db.$a import TABLESPACE"; done

    导入完成后检查表

    使用 mysqlcheck 对数据库 my_db 下的所有表进行检查:

    root@username:/var/lib/mysql/my_db# mysqlcheck -c my_dbmy_db.cdp_backup_point                             OK......

    所有的表都导入成功。

以上是关于ibdata1数据库如何恢复?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL Innodb数据库误删ibdata1后MySQL数据库的恢复案例

如何用ibdata1文件恢复数据库

仅从 ibdata1 文件中恢复数据

跪求极佳 MYSQL ibdata1文件丢失恢复工具 V9.2 绿色版软件百度云资源

mysql ibdata1删除了,怎么恢复数据

如何防止 MySQL 的 ibdata1 文件过大