【问题标题】:XAMPP/MySQL: could not open single-table tablespace file .\mysql\innodb_index_stats.ibd after restart of MySQLXAMPP/MySQL:重启 MySQL 后无法打开单表表空间文件 .\mysql\innodb_index_stats.ibd
【发布时间】:2013-09-05 17:05:58
【问题描述】:

我已经在我的本地 XAMPP 服务器上安装了 Drupal。一切正常,在我重新启动 XAMPP 之前,包含和使用数据库/站点没有问题。从那时起,我在日志文件中得到以下信息:

2013-09-02 16:18:46 2544 [注意] 插件“FEDERATED”已禁用。

2013-09-02 16:18:46 3e8 InnoDB:警告:已弃用 innodb_additional_mem_pool_size。在未来的版本中,这个选项可能会被删除,连同选项 innodb_use_sys_malloc 和 InnoDB 的内部内存分配器。

2013-09-02 16:18:46 2544 [注意] InnoDB:InnoDB 内存堆已禁用

2013-09-02 16:18:46 2544 [注意] InnoDB:互斥锁和 rw_locks 使用 Windows 互锁函数

2013-09-02 16:18:46 2544 [注意] InnoDB:压缩表使用 zlib 1.2.3

2013-09-02 16:18:46 2544 [注意] InnoDB:不使用 CPU crc32 指令

2013-09-02 16:18:46 2544 [注意] InnoDB:初始化缓冲池,大小 = 16.0M

2013-09-02 16:18:46 2544 [注意] InnoDB: 缓冲池初始化完成

2013-09-02 16:18:46 2544 [注意] InnoDB:支持的最高文件格式是梭子鱼。

2013-09-02 16:18:47 2544 [注意] InnoDB:ibdata 文件中的日志序列号 1600614 和 1600614 与 ib_logfiles 中的日志序列号 1600644 不匹配!

2013-09-02 16:18:47 2544 [注意] InnoDB:数据库未正常关闭!

2013-09-02 16:18:47 2544 [注意] InnoDB:开始崩溃恢复。

2013-09-02 16:18:47 2544 [注意] InnoDB:从 .ibd 文件中读取表空间信息...

2013-09-02 16:18:47 2544 [错误] InnoDB:试图打开以前打开的表空间。以前的表空间 drupal/variable 在文件路径:.\drupal\variable.ibd 处使用空间 ID:2。无法打开使用空间 ID 的表空间 mysql/innodb_index_stats:2 在文件路径:.\mysql\innodb_index_stats.ibd

InnoDB:错误:无法打开单表表空间文件 .\mysql\innodb_index_stats.ibd

InnoDB:我们不继续崩溃恢复,因为表可能会变成

InnoDB:如果我们无法将 InnoDB 日志中的日志记录应用到它,则会损坏。

InnoDB:修复问题并启动 mysqld:

InnoDB:1)如果文件有权限问题,mysqld不能

InnoDB:打开文件,你应该修改权限。

InnoDB: 2) 如果不需要该表,或者您可以从备份中恢复它,

InnoDB:然后你可以删除.ibd文件,InnoDB会做一个正常的

InnoDB:崩溃恢复并忽略该表。

InnoDB: 3) 如果文件系统或磁盘损坏,无法删除

InnoDB:.ibd文件,可以在my.cnf中设置innodb_force_recovery > 0

InnoDB:并强制 InnoDB 在此处继续崩溃恢复。

我通过 google 寻找了解决方案,但这似乎只是 drupal 数据库的问题,因为如果我删除数据库,它可以连接 MySQL。

我希望有人可以帮助我:(。

【问题讨论】:

  • 好的,我想我明白了。这是数据库的用户权限问题。用户拥有权限,但在关闭 MySQL 后,我的用户所做的更改都被取消了。现在我的用户只在这个数据库中拥有有限的权限 - 看吧 - 它可以工作:)。

标签: php mysql database drupal xampp


【解决方案1】:

dev_khan, 尝试在启用innodb_force_recovery 选项的情况下以只读模式重新启动 MySQL:

  1. 编辑 my.cnf - 找到行:# innodb_force_recovery = 2
  2. 评论中的行(删除#
  3. 重启 MySQL 让 MySQL 引擎自行修复。
  4. 再次评论innodb_force_recovery这一行(添加#
  5. 再次重新启动 MySQL,您将再次获得完全访问权限,而没有只读限制。

来自德国的问候

【讨论】:

    【解决方案2】:

    Wordpress 也会发生这种情况。它似乎只发生在最新版本中,因为我已经回滚到以前版本的 AMPPS,并且它工作正常而不会抛出这个 innodb 问题。

    【讨论】:

      【解决方案3】:

      您可以通过在 mysql 配置文件中添加一行来解决此问题:my.cnf 或 my.ini(取决于您的发行版)

      在 [mysqld] 下添加这一行:innodb_force_recovery = 1

      ..
      [mysqld]
      innodb_force_recovery = 1 
      ..
      

      然后重新启动您的 MySql 服务器。 您可能已经丢失了一些数据,但您可以让服务器再次使用您的数据。

      问候,

      【讨论】:

      • 这为我修复了它,尽管它警告我它可能会导致问题。因此,请确保在执行此操作之前创建备份。我猜它可能会强制自己恢复在此过程中破坏数据库
      • Charles P. 这样做之后,我的表只有只读权限。无法插入/更新任何想法?
      • 嗨,dev_khan。我没有遇到这种情况,但是尝试在配置文件中添加这一行:skip-grant-tables 然后重启mysql再试一次。
      【解决方案4】:

      将这些文件移动(不要删除)到另一个文件夹:

      innodb_index_stats.frm
      innodb_table_stats.frm
      slave_master_info.frm
      slave_relay_log_info.frm
      slave_worker_info.frm
      

      和具有相同文件名的 .ibd 文件:

      innodb_index_stats.ibd
      innodb_table_stats.ibd
      slave_master_info.ibd
      slave_relay_log_info.ibd
      slave_worker_info.ibd
      

      尝试启动 MySQL。

      【讨论】:

      • 我以前试过这个,但我一次又一次地遇到同样的问题。只需更改我的数据库用户的权限就可以了 :) 出于某种原因,我的用户所做的所有更改都在关闭系统后被 0 覆盖,但感谢您的回复!
      • 你好,我也有同样的问题..我怎样才能改变我的数据库的权限?
      • 嗨 Abdou Tahiri,这取决于您使用的数据库。 AFAIK 您无法通过 drupal 更改权限。就我而言,我只需要转到 phpMyAdmin,选择数据库并更改权限(我正在使用 XAMPP!)。也许您必须通过 sql 查询更改权限...但您必须以数据库管理员身份登录。只需寻找您的数据库的可能性。
      • 删除这些表可以解决表 id 冲突的问题,但您可能需要重新创建它们才能使复制正常工作 - 请参阅 Kay Nelson 在stackoverflow.com/questions/15767652/… 的回答,其中包含重新创建这些表的脚本一旦你删除它们。
      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2013-08-13
      • 2013-11-05
      • 2015-11-07
      相关资源
      最近更新 更多