mysql – no se puede eliminar la tabla no existe, no se puede crear tabla existe

Después de un fallo en el server, estamos teniendo algunos problemas muy extraños con una reference de tabla en particular.

Optar por una restauración de la copy de security de la database se eliminó y un volcado de copy de security de SQL cargado, sólo esto falla en la tabla de creación de cache_content con el error "tabla ya existe"

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'

Curiosamente, la tabla desplegable eliminó el file .frm pero no el file .ibd (si existe), la tabla create creará el file .ibd pero no el file .frm.

He intentado numerosos methods para la restauración, incluyendo la import del volcado en una nueva database (completado sin problema), shuttind mysql y copyndo los files .frm y .ibd pertinentes, a continuación, utilizando idbconnect para intentar adjuntar esta versión "buena conocida" :

... Space id: 1952673645 (0x74636F6D) Next record at offset: 74 TABLE_ID of `****/`.`cache_content` can not be 0 ...

Comprobando las tablas relacionadas en information_schema, puedo ver que este es el caso y el TABLESPACE se ha asignado a 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) 

Versión del server: Percona-Server-server-55-5.5.27-rel28.0.291.rhel6.x86_64

Ahora estoy bastante seguro de la lectura que he hecho en que la eliminación de ibdata1 ib_logfile * puede ser la única manera de limpiar esta reference "fantasma".

Mi pregunta: ¿Hay alguna manera de limpiar estas references de fantasmas para permitir que la tabla se restaure de copy de security?

Al final opté por restaurar todas las bases de datos de copys de security,

  1. mysqldump --all-databases --triggers > /path/to/dumpfile.sql
  2. service mysql shutdown
  3. rm -rf /path/to/datadir && mkdir /path/to/datadir && chown mysql.mysql /path/to/datadir
  4. iptables -I INPUT -p tcp --dport 3306 -j REJECT && service mysql start
  5. mysql_install_db --datadir=/path/to/datadir
  6. mysql < /path/to/dumpfile.sql
  7. Suelte y restaure cualquier database que no estuviera intacta durante 1. desde copys de security individuales
  8. service mysql restart && service iptables restart

Dejo esta respuesta aquí y la pregunta no aceptada para la próxima semana; Estoy esperando que alguien puede proporcionar una solución donde todo el ibdata no necesita rebuild.