代码改变世界

mysql 被删除如何恢复



使用这个恢复https://github.com/twindb/undrop-for-innodb




恢复ibd 使用

  1. ------- On Debian/Ubuntu/Linux Mint -------
  2. $ sudo apt-get install testdisk
  3. ------- On CentOS/RHEL/Fedora -------
  4. $ sudo yum install testdisk
  5. ------- On Fedora 22+ -------
  6. $ sudo dnf install testdisk
  7. ------- On Arch Linux -------
  8. $ pacman -S testdisk
  9. ------- On Gentoo -------
  10. $ 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,表名为table1

1、先备份要恢复数据的表文件

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/db1

4、新建数据库

链接上mysql命令行
create database db1;
 

5、通过命令行新建原来的表,

注意,一定在建表命令后加【ROW_FORMAT=COMPACT】防止冲突

例如:
1
2
3
4
5
6
7
DROP TABLE IF EXISTS `table1`;
CREATE TABLE `table1` (
  `namevarchar(200) NOT NULL DEFAULT '' COMMENT 'key值',
  `value` varchar(500) DEFAULT NULL COMMENT 'value值',
  `descvarchar(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;

7、将备份的源表数据文件.ibd拷贝过来

将.ibd文件放到新数据库的data目录下,覆盖刚创建表时新生成的.ibd文件
 
即/usr/local/mysql/data/db1/下

8、将拷贝过来的.ibd表数据导入进来

ALTER TABLE  `table1` IMPORT TABLESPACE;
 
然后数据就恢复啦~~

posted on 2024-01-18 20:21  Captain林  阅读(38)  评论(0编辑  收藏  举报

导航