注意:假如误删除 ibdata文件 ,此时千万别把mysqld进程杀死,否则没法挽救。

1.模拟删除ibdata数据文件和重做日志文件:

[root@hcdb0 data]# ll
total 421944
-rw-r-----. 1 mysql mysql        56 Sep 12 20:57 auto.cnf
-rw-r-----. 1 mysql mysql     11937 Sep 12 23:37 error.log
-rw-r-----. 1 mysql mysql       413 Sep 12 20:57 ib_buffer_pool
-rw-r-----. 1 mysql mysql 104857600 Sep 12 23:32 ibdata1
-rw-r-----. 1 mysql mysql 104857600 Sep 12 23:32 ib_logfile0
-rw-r-----. 1 mysql mysql 104857600 Sep 12 20:57 ib_logfile1
-rw-r-----. 1 mysql mysql 104857600 Sep 12 20:57 ib_logfile2
-rw-r-----. 1 mysql mysql  12582912 Sep 12 23:31 ibtmp1
-rw-r-----. 1 mysql mysql      3838 Sep 13 00:30 innodb_status.10225
drwxr-x---. 2 mysql mysql      4096 Sep 12 23:32 liangdb
drwxr-x---. 2 mysql mysql      4096 Sep 12 20:57 mysql
-rw-r-----. 1 mysql mysql         6 Sep 12 20:57 mysql.pid
drwxr-x---. 2 mysql mysql      4096 Sep 12 20:57 performance_schema
-rw-r-----. 1 mysql mysql       377 Sep 12 20:57 slow.log
drwxr-x---. 2 mysql mysql     12288 Sep 12 20:57 sys
[root@hcdb0 data]# rm -rf ib*
[root@hcdb0 data]# ll
total 52
-rw-r-----. 1 mysql mysql    56 Sep 12 20:57 auto.cnf
-rw-r-----. 1 mysql mysql 11937 Sep 12 23:37 error.log
-rw-r-----. 1 mysql mysql  3838 Sep 13 00:30 innodb_status.10225
drwxr-x---. 2 mysql mysql  4096 Sep 12 23:32 liangdb
drwxr-x---. 2 mysql mysql  4096 Sep 12 20:57 mysql
-rw-r-----. 1 mysql mysql     6 Sep 12 20:57 mysql.pid
drwxr-x---. 2 mysql mysql  4096 Sep 12 20:57 performance_schema
-rw-r-----. 1 mysql mysql   377 Sep 12 20:57 slow.log
drwxr-x---. 2 mysql mysql 12288 Sep 12 20:57 sys

2.找到mysqld的进程id:

ps -ef|grep mysql
 
或者 netstat -tnlp|grep mysqld
tcp        0      0 :::3306                     :::*                        LISTEN      10225/mysqld

这里是 10225

3.找到要恢复的句柄文件

ll /proc/10225/fd grep 'ib_|ibdata'

[root@hcdb0 data]# ll /proc/10225/fd | egrep 'ib_|ibdata'  
lrwx------. 1 root root 64 Sep 13 00:28 10 -> /data/mysql/3306/data/ib_logfile1 (deleted)
lrwx------. 1 root root 64 Sep 13 00:28 11 -> /data/mysql/3306/data/ib_logfile2 (deleted)
lrwx------. 1 root root 64 Sep 13 00:28 5 -> /data/mysql/3306/data/ibdata1 (deleted)
lrwx------. 1 root root 64 Sep 13 00:28 9 -> /data/mysql/3306/data/ib_logfile0 (deleted)

4.此时把前端业务关闭,或者执行
mysql> flush tables with read lock;

上面语句,让数据库没有写入操作,以便能够进行恢复操作。

5.验证数据库没有写入操作
(1)让脏页尽快刷入到磁盘:
mysql> set global innodb_max_dirty_pages_pct=0;

(2)观察binlog日志写入情况,确保File 和 Position 的值没有变化。
mysql>  show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |     3075 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

(3)最后查看InnoDB状态信息,确保脏页已经刷入磁盘
mysql> show engine innodb status\G;

------------
TRANSACTIONS
------------
Trx id counter 1319
Purge done for trx's n:o < 1315 undo n:o < 0 state: running but idle

### 确保后台Purge进程把undo log全部清除掉,事务ID要一致。

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges

### insert buffer合并插入缓存等于1

---
LOG
---
Log sequence number 2553422
Log flushed up to   2553422
Pages flushed up to 2553422
Last checkpoint at  2553413

### 确保这3个值不在变化

----------------------
BUFFER POOL AND MEMORY
----------------------
Total large memory allocated 107380736
Dictionary memory allocated 352938
Buffer pool size   6400
Free buffers       6075
Database pages     325
Old database pages 0
Modified db pages  0

### 确保脏页数量(Modified db pages)为0

--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
0 read views open inside InnoDB
Process ID=10225, Main thread ID=140654206252800, state: sleeping
Number of rows inserted 11, updated 0, deleted 0, read 17
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s

### 确保插入、更新、删除为0

6.上面确认后,就可以进行恢复了,
[root@hcdb0 data]# ll /proc/10225/fd | egrep 'ib_|ibdata'  
lrwx------. 1 root root 64 Sep 13 00:28 10 -> /data/mysql/3306/data/ib_logfile1 (deleted)
lrwx------. 1 root root 64 Sep 13 00:28 11 -> /data/mysql/3306/data/ib_logfile2 (deleted)
lrwx------. 1 root root 64 Sep 13 00:28 5 -> /data/mysql/3306/data/ibdata1 (deleted)
lrwx------. 1 root root 64 Sep 13 00:28 9 -> /data/mysql/3306/data/ib_logfile0 (deleted)

把这些文件复制到原来目录下
cp /proc/10225/fd/10  /data/mysql/3306/data/ib_logfile1   
cp /proc/10225/fd/11  /data/mysql/3306/data/ib_logfile2  
cp /proc/10225/fd/5  /data/mysql/3306/data/ibdata1  
cp /proc/10225/fd/9   /data/mysql/3306/data/ib_logfile0

然后修改用户属性
chown mysql:mysql /data/mysql/3306/data/ib*

最后重启MySQL即可

模拟误删除InnoDB ibdata数据文件恢复的更多相关文章

  1. 误删除innodb ibdata数据文件 文件句柄 文件描述符 proc fd

    误删除innodb ibdata数据文件  文件句柄  文件描述符  proc  fd http://www.cnblogs.com/gomysql/p/3702216.html 提示:如果不小心通过 ...

  2. 误删除innodb ibdata数据文件-之恢复

    今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了.不知道怎么解决.当时我也不知道怎么办.后来查阅相关资料.终找到解决方法.其实恢复也挺简单 ...

  3. 误删除innodb ibdata数据文件

    今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了.不知道怎么解决.当时我也不知道怎么办.后来查阅相关资料.终找到解决方法.其实恢复也挺简单 ...

  4. 0929误删除innodb ibdata数据文件

    今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了.不知道怎么解决.当时我也不知道怎么办.后来查阅相关资料.终找到解决方法.其实恢复也挺简单 ...

  5. mysql innodb 从 ibd 文件恢复表数据

    最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...

  6. mysql通过数据文件恢复数据方法

    情况描述:服务器硬盘损坏,服务器换了个新硬盘 ,然后老硬盘插在上面.挂载在这台机器.可以从老硬盘里面拿到数据.只拿到了里面的mysql数据文件夹,把数据文件夹覆盖新的服务器mysql数据文件夹 启动报 ...

  7. linux下误删数据文件恢复

    linux下文件被删除能够用非常多工具进行恢复.比如undelete(适合ext2,ext3).giis(不能恢复安装giis之前的文件).ext3grep(仅限ext3).R-linux(支持ext ...

  8. MySQL-5.7设置InnoDB表数据文件存储位置

    1.表空间 Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间. 共享表空间以及独立表空间都是针对数据的存储方式而言的. 共享表空间: ...

  9. 依靠MySQL(frm、MYD、MYI)数据文件恢复

    该方法并不是适用于所有MySQL数据库 此次恢复是朋友那边的数据查不了了,请求我支援,出于各种心理原因,我答应试试,于是就有了这篇文章和这次经历,废话不多说.... 物理条件:宿机是Ubuntu16. ...

随机推荐

  1. js 替换中间四位手机号为 *

    replace(/(\d{})\d{}(\d{})/, '$1****$2')

  2. mysql 配置文件详解

    mysql配置文件参数详解 (一) [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql ...

  3. 安装cloudermanager时出现org.spingframework.web.bind.***** host[] is not present at AnnotationMethodHandlerAdapter.java line 738 ****错误(图文详解)(博主推荐)

    不多说,直接上干货! 首先,这个问题,写给需要帮助的朋友们,本人在此,搜索资料近半天,才得以解决.看过国内和国外,资料甚少.特此,写此博客,为了弥补此错误解决的资料少的缘故! 问题详解  解决办法   ...

  4. 02-使用注解配置spring

    1 准备工作 1.导包 4+2+spring-aop[新版本需要导入 spring-aop 包] 2.为主配置文件引入新的命名空间(约束) [context] 3.开启使用注解代理配置文件 4.在类中 ...

  5. Android中用Java代码实现zip文件解压缩

    如果需要下载的文件有很多是中文名的,解压时有中文名的文件出现乱码,试了很多方法不能解决问题.据说有一个Java插件包,用这个插件包可以解决中文名乱码的问题,但不知解压的文件是否要用它提供的类压缩后的文 ...

  6. 6个Unity 开源项目分享!

    http://gad.qq.com/article/detail/38279?sessionUserType=BFT.PARAMS.249034.TASKID&ADUIN=991655778& ...

  7. 遇见phpDesigner我笑了 PHP开发利器

    phpDesigner实在太好用了 相信许多PHP同胞谈到PHP开发工具的时候,都会想到Zend Studio.Eclipse等开发工具,这些工具的确非常的强大强悍,但复杂的配置满屏幕的英文并不适合所 ...

  8. SpringBoot | 第三十一章:MongoDB的集成和使用

    前言 上一章节,简单讲解了如何集成Spring-data-jpa.本章节,我们来看看如何集成NoSQL的Mongodb.mongodb是最早热门非关系数据库的之一,使用也比较普遍.最适合来存储一些非结 ...

  9. sql查询某字段的相同值

    sql查询某字段的相同值: SELECT * FROM table WHERE col in (SELECT col FROM table GROUP BY col HAVING COUNT (col ...

  10. Git代码merge

    Git代码合并遇到如下问题: <<<<<<< HEAD     client.post(url, secretKey, function (data, res ...