试图解决“外部表空间边界”MySQL错误,但使用mysqldump恢复表失败

时间:2017-08-15 10:21:16

标签: mysql recovery

我在Windows 2008服务器上运行MySQL。其中一个表(> 100万条记录)似乎已损坏。 mysql错误日志显示:

InnoDB: Error: trying to access page number 197105 in space 89,
InnoDB: space name dbname/tablename,
InnoDB: which is outside the tablespace bounds.
InnoDB: Byte offset 0, len 16384, i/o type 10.
InnoDB: If you get this error at mysqld startup, please check that
InnoDB: your my.cnf matches the ibdata files that you have in the
InnoDB: MySQL server.

根据此错误消息,我检查了my.cnf的相关行:

innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"

这正是数据所在的位置。 ibdata1的大小约为208 MB,tablename.ibd的大小约为4 GB。我已成功使用这台服务器好几个月了。

在此网站和其他地方搜索后,我尝试按如下方式执行恢复:

  • 设置innodb_force_recovery = 1,然后设置为6.
  • 接下来,使用mysqldump转储特定的表。我正在使用这个 命令:mysqldump dbname tablename --user=root --password=blahblah. 在此转储期间,对于恢复级别1到3,mysql崩溃('消失')。在4,它设法转储前23992条记录,但随后它说“在转发表tablename时在行:23992”的查询期间丢失了与MySQL服务器的连接。在我上面显示的内容之前,日志还有一些额外的行:

    InnoDB: Failed to find tablespace for table "dbname"."tablename" in the cache. Attempting to load the tablespace with space id 89. InnoDB: Error: trying to access page number 0 in space 89, InnoDB: space name dbname/tablename, InnoDB: which is outside the tablespace bounds.

  • 似乎只要我触摸或(选择)查询此表,无论是通过php,python还是phpMyAdmin,mysql都会崩溃。

是否有人有任何其他建议,可能是基于上面的表空间界限错误?

提前致谢!

0 个答案:

没有答案