mysql怎么把创建的表删除不了_mysql – 不能删除表不存在,不能创建表存在

服务器崩溃后,我们对一个特定的表引用有一些非常奇怪的问题.

选择从备份恢复,数据库被删除并加载了备份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 *可能是清理这个“幽灵”引用的唯一方法.

我的问题:有没有办法清理这些鬼引用以允许从备份恢复表?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值