• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql 误删除ibdata1之后的恢复方法

mysql 误删除ibdata1之后的恢复方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql ibdata1,mysql ibdata1文件,ibdata1,ibdata1是什么文件,ibdata1怎么打开等相关知识,希望本文的分享对您有所帮助

mysql 误删除ibdata1之后如何恢复

如果误删除了在线服务器中mysql innodb相关的数据文件ibdata1以及日志文件 ib_logfile*,
应该怎样恢复呢?

这时候应该一身冷汗了吧?
==================================
先抽根烟,冷静一下。
==================================
再观察一下网站,发现一切都很正常,数据的读取与写入操作都完全正常。
这是怎么个情况?

其实,mysqld在运行状态中,会保持这些文件为打开状态,
即使把它们删除了,它们仍旧存在于文件系统中,mysqld仍然可以对其进行读写。

14101是mysqld的pid(进程ID)

只要mysqld不结束,就可以通过proc文件系统找到这几个被删除的文件(已经被Mark为deleted状态)。

这时候应该松了一口气吧。只要把这几个文件复制回 /var/lib/mysql就行了吗?

事情绝对没有这么简单。

因为,在innodb的buffer pool中,有许多dirty page(就是内存中的数据已经被修改,但是没有写回文件中),
如果直接把文件复制回去,轻则数据丢失,重则ibdata1文件损坏。

备份mysql数据的时候,也不能直接备份这几个文件,是同样的道理。

我们必须保证所有buffer pool中的数据修改都保存到了硬盘文件上面,
为此,首先要停止更多的写入/更新/删除操作,然后等待innodb flush pages to disk.
停止写入的话,可以把网站应用关闭,或者lock tables:

这时就要等它flush结束,怎样知道有没有结束呢?观察checkpoint age就可以了。

checkpoint age 就是 Log sequence number的值减去 Last checkpoint at的值,
如果为0,那么表示所有的page都flush到硬盘文件中了。

这时就要等它flush结束,怎样知道有没有结束呢?观察checkpoint age就可以了。

checkpoint age 就是 Log sequence number的值减去 Last checkpoint at的值,
如果为0,那么表示所有的page都flush到硬盘文件中了。

为了加速这个flush的过程,可以这样设置一下:

此外,还必须保证一些后台的线程完成了它们的工作,
比如insert buffer thread. ibuf的大小应该=1

还有purge thread,它应该purge了全部的transactions:

还要确保innodb不再进行写操作了:

然后把文件复制回去:

结论:
1) 出现意外时,千万不能慌张,抽根烟先冷静一下。
2) 在解决方案不明确的时候,不要进行操作,比如重启mysqld,重启服务器。
3) 有必要监控mysql的ibdata等文件是否存在。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • mysql 误删除ibdata1之后的恢复方法

相关文章

  • 2018-12-05MySQL 在触发器里中断记录的插入或更新?
  • 2018-12-05mysql操作之常用操作——数据库和数据表的基本操作(1)共2课
  • 2018-12-05关于启动面的详细介绍
  • 2017-05-11MySQL数据库INNODB表损坏修复处理过程分享
  • 2018-12-05Access数据库的存储空间最大是多少
  • 2018-12-05oracle创建存储过程两种方法
  • 2018-12-05MySQL学习笔记2:数据库的基本操作(创建删除查看)
  • 2018-12-05Oracle 游标使用总结
  • 2018-12-05mysql导入数据库的方法
  • 2018-12-05逻辑架构的10篇内容推荐

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql高级联结-自联结使用实例
    • EXP-00056: ORACLE error 29275 encountered
    • MySQL中InnoDB的Memcached插件的使用教程
    • 配置mysql允许远程连接的方法
    • 谈谈主主复制的用法实例
    • Mysql常用基准测试工具
    • 两种不停止 MySQL 服务增加从库的方式
    • oracle SCN跟TIMESTAMP之间转换
    • 【MySQL】多版本并发控制
    • mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有