恢复ibd 使用
------- On Debian/Ubuntu/Linux Mint -------
$ sudo apt-get install testdisk
------- On CentOS/RHEL/Fedora -------
$ sudo yum install testdisk
------- On Fedora 22+ -------
$ sudo dnf install testdisk
------- On Arch Linux -------
$ pacman -S testdisk
------- On Gentoo -------
$ emerge testdisk
sudo photorec /dev/sda3
ibd2sdi --dump-file=./abc.txt table_xxx.ibd #解析table_xxx.ibd表结构
背景:因为机器损坏,数据库的索引文件什么的都损坏了。只留下了一个mysql的data目录…
此方法恢复数据的前提:建表用的innodb索引 备注:如果mysql的目录还都在,可以先尝试,将mysql下的目录都拷贝到一个新mysql目录下,启动看看能不能用,不能用后再尝试下面方法 mysql会有一个data目录存储表结构和表数据。下面的目录结构大概如下: ib_logfile0 ib_logfile1 ibdata1 ibtmp1 xx数据库1 xx数据库2 每个数据库目录下面的表内容如下: 表1.frm 表1.ibd 表2.frm 表2.ibd .frm文件:表结构文件 .ibd文件:表数据文件下面为恢复数据方法
备注:这里假设要备注的库名为db1,表名为table11、先备份要恢复数据的表文件
table1.frm和table1.ibd文件 可以直接把原数据库的data目录整个拷贝过来,如果指定了data目录可以通过查看mysql的进程看到具体配置位置2、新搭建一个mysql
我用的5.7,搭建在mac本地3、将mysql下的log文件删除,不要保留和要备份的库相同的内容
如果你是完全新建的一个数据库,和原来的库表完全无关,可以忽略这步骤 rm -rf /usr/local/mysql/data/ib_logfile0 rm -rf /usr/local/mysql/data/ib_logfile1 rm -rf /usr/local/mysql/data/ibdata1 rm -rf /usr/local/mysql/data/btmp1 rm -rf /usr/local/mysql/data/db14、新建数据库
链接上mysql命令行 create database db1;5、通过命令行新建原来的表,
注意,一定在建表命令后加【ROW_FORMAT=COMPACT】防止冲突
例如:1 2 3 4 5 6 7 |
DROP TABLE IF EXISTS `table1`;
CREATE TABLE `table1` (
` name ` varchar (200) NOT NULL DEFAULT '' COMMENT 'key值' ,
`value` varchar (500) DEFAULT NULL COMMENT 'value值' ,
` desc ` varchar (500) DEFAULT NULL COMMENT '关于当前key的描述信息' ,
PRIMARY KEY (` name `)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;
|
如果不记得表结构了,可以先参考下面的文章找回表结构,dump出sql结构后获得创建表的语句: http://blog.sina.com.cn/s/blog_5d3da3280100hymn.html
6、将新建的表DISCARD掉
命令行执行:ALTER TABLE table1 DISCARD TABLESPACE;