如何从 ibdata 和 .frm 文件中恢复 InnoDB MySQL 表数据
本教程介绍了当所有或部分表丢失,或者当 MySQL 无法加载表数据时,如何恢复 MySQL 表。
发生这种情况的原因之一是表数据损坏时。
在这种特殊情况下,当您连接到 MySQL 数据库服务器时,您无法再看到一个表,因为它们丢失了。
在这种情况下,MySQL 日志文件包含以下消息:
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting
下面解释的方法仅适用于 InnoDB 数据库。
注意:在您执行任何操作之前,请备份当前状态下的所有 MySQL 文件和数据库,并将其保存在安全的地方。
要恢复表数据,您必须确保数据目录及其内容完好无损。就我而言,这很好。
drwx------ 2 mysql mysql 4096 Oct 11 2012 performance_schema
drwx------ 2 mysql mysql 4096 Dec 10 2012 ndbinfo
drwx--x--x 2 mysql mysql 4096 Dec 10 2012 mysql
-rw-rw---- 1 mysql mysql 56 Dec 19 2012 auto.cnf
drwx------ 2 mysql mysql 4096 Jul 30 2013 bugs
-rw-r----- 1 mysql mysql 50331648 Mar 18 10:35 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 22 2013 ib_logfile1
-rw-r----- 1 mysql mysql 35651584 Mar 18 10:35 ibdata1
- Ibdata1——该文件是InnoDB系统表空间,包含多个InnoDB表和关联索引。
- *.frm – 保存所有 MySQL 表的元数据信息。这些文件位于相应 MySQL 数据库的文件夹内。(例如,在“bugs”目录中)
- ib_logfile* – 所有数据更改都写入这些日志文件。这类似于我们在其他 RDBMS 数据库中发现的归档日志概念。
复制文件
要从上述文件中恢复数据,首先要停止 MySQL 服务器。
# service mysqld stop
将 ibdata 文件和数据库架构文件夹复制到其他目录。我们将使用它来恢复我们的 Mysql 数据库。在这种情况下,我们将其复制到 /tmp 目录。本示例中的数据库方案名称为 bugs。
cp –r ibdata* ib_logfile* /tmp
cp –r schema_name/ /tmp/schema_name/
启动 MySQL 服务器:
# service mysqld start
在相关说明中,对于典型的 MySQL 数据库备份和恢复,您应该使用mysqldump 命令。
恢复数据
接下来,按照下面的说明恢复表数据。
在 my.cnf 配置文件中,将以下参数的值设置为 ib_logfile0 文件的当前大小。在以下示例中,我将其设置为 48M,因为这是我执行“ls -lh ib_logfile0”时看到的 ib_logfile0 文件的大小
innodb_log_file_size=48M
请注意,ib_logfile0 和 ib_logfile1 文件大小将相同。
将之前的 ibdata 文件复制到 mysql 数据目录中的相应位置。
cp –r / tmp / ibdata * / var / lib / mysql /
在数据目录中创建一个与您尝试恢复的数据库架构名称同名的空文件夹,并将之前的 .frm 文件复制到该文件夹中,如下所示:
cp –r / tmp / ib_logfile * / var / lib / mysql /
cp –r /tmp/schema_name/*.frm /var/lib/mysql/schema_name/
最后,重启 MySQL 服务器。
service mysqld restart
现在,您的 MySQL 服务器运行在恢复的表中。不要忘记为客户端授予适当的权限以连接到 MySQL 数据库。
- 点赞
- 收藏
- 关注作者
评论(0)