[Warning] Cannot open table Mysql_db/Mysql_table from the internal data dictionary of InnoDB though the .frm file for the table exists

MySQL 实用程序 / 从 .frm 文件中提取 CREATE TABLE 语句

MySQL提供了一组可下载的实用程序,其中包括一些可能对恢复过程有帮助的工具 – 特别是,包括一个名为“mysqlfrm”的实用程序。此实用程序可以相当轻松地从 .frm 文件中提取表的 CREATE TABLE 语句。此语句可能非常有用,因为几乎所有有用的恢复方法都涉及能够重新创建您尝试修复的原始表的结构,并且通常,这必须在没有任何直接MySQL访问原始表本身的情况下完成。

要下载并安装 MySQL 实用程序:

首先,点击此处下载软件包。
然后,将其解压缩到服务器的某个地方:

tar xvzf mysql-utilities*

最后,切换到解压缩的目录,授予 setup.py 执行权限,并运行其构建和安装操作:

cd mysql-utilities-1.6.5
chmod +x setup.py
./setup.py build
./setup.py install

从 .frm 文件中提取 CREATE TABLE 语句:

mysqlfrm 将根据您现有的安装创建自己的临时 MySQL 守护进程,这意味着如果您现有的 MySQL 安装已经在运行,则需要指定备用端口。这是我从“table.frm”文件中提取CREATE TABLE的示例:

mysqlfrm --basedir=/usr --user=mysql --port=3308 /var/lib/mysql/aiyahu_db/table.frm

以下是随后的输出:

CREATE TABLE aiyahu_db.table (
umeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
user_id bigint(20) unsigned NOT NULL DEFAULT '0',
meta_key varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
meta_value longtext COLLATE utf8mb4_unicode_520_ci,
PRIMARY KEY (umeta_id),
KEY user_id (user_id),
KEY meta_key (meta_key(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

进入MYSQL命令模式创建表

mysql
CREATE TABLE aiyahu_db.table (
umeta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
user_id bigint(20) unsigned NOT NULL DEFAULT '0',
meta_key varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
meta_value longtext COLLATE utf8mb4_unicode_520_ci,
PRIMARY KEY (umeta_id),
KEY user_id (user_id),
KEY meta_key (meta_key(191))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

停止Mysql服务

systemctl stop mysqld

进入aiyahu_db数据库文件夹,把新创建表生成的Ibd文件移动到Ibd_bak文件夹, 把需要恢复数据的Ibd文件从ibd_recover文件夹移动到aiyahu_db数据库目录下,改名为table.ibd0

启动Mysql服务

systemctl start mysqld

Mysql服务启动成功,把刚修改的table.ibd0文件改成table.ibd

进入Mysql命令模式,输入如下命令

mysql
use aiyahu_db
alter table db_table import tablespace;

数据表恢复完成。

扩展阅读:

InnoDB Corruption Repair Guide

Advice and Troubleshooting – cPanel

Scroll to top