mysql利用表对象数据文件恢复数据

23次阅读

共计 828 个字符,预计需要花费 3 分钟才能阅读完成。

数据库文件基础

  • .frm 文件: 只存储表的结构信息,frm 文件跟数据库存储引擎无关,这也就是说,它和表的索引、数据都无关。

MyISAM 引擎

  • .myd 文件: 数据文件
  • .myi 文件:索引文件

Innodb 引擎

  • ib_logfile0 和 ib_logfile1:重做日志文件, 两个文件一模一样,之所以存在两个是,为了避免一个文件损坏后,而且 MySQL crash 之后,innodb 无法恢复数据。
  • ibdata1: 数据文件

根据《MySQL 技术内幕》一书的介绍,innodb 存在表空间的概念,是以共享表空间的格式,将数据都存入到一个文件中。介绍 ibdata1,ibdata1 是与存储引擎相关的,只在 innodb 存储引擎下出现,而且是 mysql-server 中所有 innodb 存储引擎的表,不分数据库都存储到 ibdata1 中,当然这个文件中还会存储其他信息,如索引等。当在 MySQL 中开启 innodb_file_per_table 后,那么将会在每个数据库对应的文件夹下,每张表将有存在两个对应文件,一个是.frm,另外一个是.ibd 文件。这种情况成为私有表空间。但是这个时候共享表空间 ibdata1,仍然是存在的。

使用数据库文件恢复数据

yum 安装的 mysql, 数据目录是 /var/lib/mysql,可以通过/etc/my.cnf 查看。

MyISAM 引擎表恢复数据

直接备份.frm,.myd,.myi 文件,然后再复制粘贴到目标数据库文件夹即可。

Innodb 引擎表恢复数据

如果是系统表空间的情况,一个笨办法就是建立一个新的 mysql 环境,将旧环境中的 ibdata1 文件和需要恢复的 aa,bb 等数据库文件夹复制到新 mysql 数据目录。然后重启 mysqld 守护进程就行。

systemctl restart mysqld

下面是恢复的 rbac 数据库 user 表的数据

如果是私有表空间的话,虽然没实验过,但我猜想,直接复制.frm 文件和.ibd 文件到目标数据库即可。

参考文章

利用数据库文件恢复 MySQL 数据

正文完
 0