InnoDB:虽然该表的.frm文件存在,但无法从InnoDB的内部数据字典中打开表

问题描述 投票:5回答:3

我正在使用XAMPP运行Windows 10,并在localhost上安装了几十个Drupal站点。几个月来一切都运转良好。

今天早上我在两天前从还原点执行了Windows还原,以摆脱不必要的Windows更新。在我这样做之后,我的MySQL停止了工作。我尝试删除文件ibdata1(我现在知道这是一个坏主意),但当事情变得更糟时,我恢复了我删除的初始ibdata1。所有的表数据(.frm.ibd文件)仍然在C:\xampp\mysql\data。现在MySQL至少会启动,但是所有的表都“消失了”......我可以在浏览器中加载phpMyAdmin,当我向左下拉数据库时,所有表都会显示...但是当我尝试点击时一,它告诉我“桌子没找到。”

mysql_error.log中有几个错误,如InnoDB: Cannot open table mysql/slave_master_info from the internal data dictionary of InnoDB though the .frm file for the table exists.错误消息中提到的URL,据说可以告诉您如何解决此问题,但它没有信息。

我认为ibdata1没有被破坏......所有关于恢复数据的文章都很复杂到与问题完全不成比例的程度。没有人有一个简单的拼写解决方案。我谷歌搜索错了吗?这种情况在我之前至少发生过两次,每次问题在我能够开始遵循我在网上找到的10个小时的程序之前自发地解决了。不幸的是,这次不是。当然我错过了一些简单的东西。我在几十个数据库中有数百个表,似乎没有必要尝试找到每个数据库的模式并手动插入,这是大多数恢复文章似乎建议的。

数据库不应该只知道如何阅读.frm.ibd文件,而且,你知道......工作吗?感觉就像某个地方只有一个不合适的价值,如果我能找到它,一切都会“弹回”到位。

mysql windows xampp
3个回答
1
投票

什么对我有用:

https://dba.stackexchange.com/a/42932

我的dbs是InnoDB,所以id存在问题,升级macos时,我得到了这个。我将引用主要部分:

你必须有:

-ibdata1

-ib_logfile0

-ib_logfile1

mysql_database文件夹中的-.FRM文件

- 您愿意销毁的MAMP / MAMP Pro的新安装(如果需要)

  1. SSH进入您的Web服务器(开发,生产,没有区别)并浏览到您的mysql文件夹(我在/ var / lib / mysql上为Linux上的Plesk安装)
  2. 压缩mysql文件夹
  3. 下载mysql文件夹的存档,该文件夹应包含所有mySQL数据库,无论是MyISAM还是innoDB(您可以scp此文件,或者将其移动到可下载目录,如果需要)
  4. 安装MAMP(Mac,Apache,MySQL,PHP)
  5. 浏览到/ Applications / MAMP / db / mysql /
  6. 备份/应用程序/ MAMP / db / mysql到zip存档(以防万一)
  7. 从生产服务器复制mysql文件夹存档中包含的所有文件夹和文件(在我的情况下为mt Plesk环境)除了不要覆盖: - /应用程序/ MAMP / DB / MySQL的/ mysql的/ - /应用程序/ MAMP / DB / mysql /下mysql_upgrade_info - /应用程序/ MAMP / DB / mysql /下performance_schema

0
投票

我们的工作是什么,这是link(恢复孤立文件每表ibd文件)。

简而言之,你这样做:

ALTER TABLE ..... DISCARD TABLESPACE;

对于每个受影响的表。然后,对于每个受影响的表:

ALTER TABLE .... IMPORT TABLESPACE; SHOW WARNINGS; 

您可以在同一模式上执行此操作,或在其他数据库中创建新模式并复制所有* .ibd文件。在这种情况下:

  • 使用表定义创建新模式。
  • 为所有表执行丢弃表空间。
  • 将新的* .ibd文件复制到新架构的右侧文件夹中。
  • 为所有表导入表空间。

重要!新模式与旧模式具有相同的名称更好。


0
投票

只需将slave_master_info.frm重命名为slave_master_info.BAK就可以了。重启mysql服务。


0
投票

在我的情况下,我正在恢复备份(由galera-arbitrator和xtrabackup完成。使用第一个我们采用状态快照并使用最后一个我们备份物理数据)用于Percona_XtraDB_Cluster。因此,在将备份数据放入新mysql服务器的dir /var/lib/mysql之后,我们执行了以下select查询并得到错误。

$ mysql -uroot -p$MYSQL_ROOT_PASSWORD -h<NEW_SERVER_HOST_NAME> -e 'show columns from <MY_DB>.<MY_TABLE>'
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1146 (42S02) at line 1: Table 'playground.equipment' doesn't exist

服务器日志是:

[Warning] InnoDB: Cannot open table <MY_DB>/<MY_TABLE> from the internal data dictionary of InnoDB though the .frm file for the table exists. Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.

我们刚刚重新启动容器的新数据。而已

© www.soinside.com 2019 - 2024. All rights reserved.