服务器崩溃后,我们对一个特定的表引用有一些非常奇怪的问题.
选择从备份恢复,数据库被删除并加载了备份SQL转储,只有在cache_content的create table上失败,错误“table already exists”
MySQL的> create table cache_content(id int NOT NULL DEFAULT 0)ENGINE = InnoDB DEFAULT CHARSET = utf8;
ERROR 1005(HY000):无法创建表’****.cache_content'(错误号:-1)
MySQL的> drop table cache_content;
ERROR 1051(42S02):未知表’cache_content’
奇怪的是,drop table删除了.frm而不是.ibd文件(如果存在),create table将创建.ibd文件而不是.frm文件.
我已经尝试了许多恢复方法,包括将转储导入新数据库(完成没有问题),关闭mysql并复制相关的.frm和.ibd文件,然后使用idbconnect尝试附加这个“已知好”版本:
…
空间编号:1952673645(0x74636F6D)
偏移的下一条记录:74
`**** /`.`cache_content`的TABLE_ID不能为0
…
检查information_schema中的相关表,我可以看到这种情况,并且TABLESPACE已分配给0
mysql> select * from INNODB_SYS_TABLES where `SCHEMA`="*****";
+----------+--------+--------------------------+------+--------+-------+
| TABLE_ID | SCHEMA | NAME | FLAG | N_COLS | SPACE |
+----------+--------+--------------------------+------+--------+-------+
...
| 19791 | ***** | cache_content | 1 | 9 | 0 |
+----------+--------+--------------------------+------+--------+-------+
N rows in set (0.01 sec)
mysql> select * FROM INNODB_SYS_INDEXES where TABLE_ID=19791;
+----------+--------+----------+------+----------+---------+-------+
| INDEX_ID | NAME | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE |
+----------+--------+----------+------+----------+---------+-------+
| 7919 | expire | 19791 | 0 | 1 | 311158 | 0 |
+----------+--------+----------+------+----------+---------+-------+
1 row in set (0.00 sec)
服务器版本:Percona-Server-server-55-5.5.27-rel28.0.291.rhel6.x86_64
现在我非常肯定从阅读中我已经完成了删除ibdata1 ib_logfile *可能是清理这个“幽灵”引用的唯一方法.
我的问题:有没有办法清理这些鬼引用以允许从备份恢复表?