服务器崩溃后,我们有一个特定的表引用一些非常奇怪的问题。
select从备份恢复数据库已被删除,并且加载了一个备份SQL转储,只有在创build表时发生cache_content错误“table already exists”
mysql> create table cache_content( id int NOT NULL DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ERROR 1005 (HY000): Can't create table '****.cache_content' (errno: -1) mysql> drop table cache_content; ERROR 1051 (42S02): Unknown table 'cache_content'
奇怪的删除表,删除.frm而不是.ibd文件(如果存在),创build表将创build.ibd文件,但不是.frm文件。
我已经尝试了许多方法来恢复,包括将转储导入到一个新的数据库(完成没有问题),closuresmysql并复制相关的.frm和.ibd文件,然后使用idbconnect试图附加这个“已知的好”版本:
... Space id: 1952673645 (0x74636F6D) Next record at offset: 74 TABLE_ID of `****/`.`cache_content` can not be 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 *可能是清理这个“鬼”参考的唯一方法。
我的问题:有没有什么办法来清理这些ghost引用以允许从备份恢复表?
最后,我select从备份中恢复所有的数据库,
mysqldump --all-databases --triggers > /path/to/dumpfile.sql service mysql shutdown rm -rf /path/to/datadir && mkdir /path/to/datadir && chown mysql.mysql /path/to/datadir iptables -I INPUT -p tcp --dport 3306 -j REJECT && service mysql start mysql_install_db --datadir=/path/to/datadir mysql < /path/to/dumpfile.sql service mysql restart && service iptables restart 我在这里留下这个答案,下个星期不接受这个问题; 我希望有人可以提供一个解决scheme,整个ibdata不需要重build。