Mus*_*ari 6 mysql innodb recovery
情况:我有一个包含 104 个表的 MySQL 数据库,在 Windows 7 上的 XAMPP 上本地运行。所有表都有 InnoDB 引擎。XAMPP MySQL 作为 Windows 服务运行。作为前端,我有 PHP (CodeIgniter)。
问题:昨晚和往常一样,我停止了该项目的工作并正常关闭了窗户。今天早上我table MY_TALBE does not exists
在浏览器中出现错误。show tables
在控制台上显示的表名,但desc MY_TABLE
和select * from MY_TABLE
说unknown table
。我试过了,create table MY_TABLE(...)
但我有错误table MY_TABLE already exists
,所以我试过了,drop table MY_TABLE
但它说Unknown table MY_TABLE
!我尝试了mysqlcheck.exe进行修复和检查,它们都失败了,但之后,show tables
不再显示表名。我需要提到我没有更改/移动/删除/重命名任何 mysql 文件。
问题:是否可以恢复/修复MY_TABLE
,或者至少如何删除并再次创建它(不删除数据库并再次重新创建它)?
这种情况听起来很像我两年前回答的帖子(InnoDB table SELECT returns ERROR 2006 (HY000): MySQL server has gone away (after power outage))
首先,这里是InnoDB架构
在那篇文章中,我基本上指出该表的元数据仍然存在于系统表空间文件 ibdata1 中。
当您运行时SHOW TABLES;
,mysqld 所做的只是报告.frm
文件。可以将表创建为 MyISAM,因为它没有 ibdata1 或任何其他元数据的附件。然而,您无法将其转换为 InnoDB,因为元数据以某种方式假设.frm
某些 tablespace_id 附加到表名称。根据我的旧帖子,我只会 mysqldump 所有其他表,并称您的表为失败的原因。然而, Percona 拥有适合这种情况的数据恢复工具包。
Percona Data Recovery Tool for InnoDB 是一个免费工具包,用于从 InnoDB 表中恢复丢失或损坏的数据。当由于某种原因(例如删除的表或严重损坏而导致 InnoDB 无法识别数据)而无法使用标准 InnoDB 恢复时,它提供了一种以制表符分隔格式从文件或原始设备中提取 InnoDB 数据的方法。它可用于 MySQL 恢复,以检索已删除的表、恢复更新行的先前版本或修复硬件故障(例如内存故障或布线不良)后的 InnoDB 文件损坏。
Percona 已使用这些工具为许多客户执行 MySQL 数据恢复,包括非常大的数据集。尽管这些工具功能强大,但正确执行 InnoDB 数据恢复需要 InnoDB 存储格式和源代码的专业知识以及经验和直觉。Percona 可以帮助我们提供数据恢复服务。
我没用过,但是如果Percona做出来了,你应该尝试一下。
如果您有丢失表的备份(以 mysqldump 的形式),您应该执行我旧帖子中的步骤,然后加载丢失表的备份。
一旦解决了这种情况,您应该调整 InnoDB 以将更改刷新到磁盘。
[mysqld]
innodb_fast_shutdown=0
innodb_max_dirty_pages_pct=0
innodb_buffer_pool_dump_at_shutdown=1
innodb_buffer_pool_load_at_startup=1
Run Code Online (Sandbox Code Playgroud)
这样,当你关闭mysql时,InnoDB可以更彻底地刷新更改。
如果你想更好地保证 InnoDB 被刷新到磁盘,你应该在 Linux 中使用 MySQL。
归档时间: |
|
查看次数: |
31173 次 |
最近记录: |