Un problema específico de las tablas es que el servidor MySQL
        mantiene la información relativa al diccionario de datos dentro
        de ficheros .frm que guarda en los
        directorios de las bases de datos, en tanto que
        InnoDB también almacena la información
        dentro de su propio diccionario de datos, en el interior de los
        ficheros de espacio de tablas. Si se mueven los ficheros
        .frm o si el servidor sufre una caída
        durante una operación de diccionario de datos, los ficheros
        .frm pueden quedar con diferencias respecto
        al diccionario de datos interno de InnoDB.
      
        Un síntoma de que ha ocurrido esto es si falla una sentencia
        CREATE TABLE. Si esto sucede, se debería
        observar el registro (log) de errores del servidor. Si el
        registro indica que la tabla ya existía dentro del diccionario
        de datos interno de InnoDB, se tiene una
        tabla que ha quedado únicamente dentro de los ficheros de
        espacio de tablas de InnoDB y que no tiene el
        correspondiente fichero .frm. El mensaje de
        error tiene este aspecto:
      
InnoDB: Error: table test/parent already exists in InnoDB internal InnoDB: data dictionary. Have you deleted the .frm file InnoDB: and not used DROP TABLE? Have you used DROP DATABASE InnoDB: for InnoDB tables in MySQL version <= 3.23.43? InnoDB: See the Restrictions section of the InnoDB manual. InnoDB: You can drop the orphaned table inside InnoDB by InnoDB: creating an InnoDB table with the same name in another InnoDB: database and moving the .frm file to the current database. InnoDB: Then MySQL thinks the table exists, and DROP TABLE will InnoDB: succeed.
Se puede eliminar la tabla que causa el conflicto siguiendo las instrucciones del mensaje de error. Esto es, crear una tabla InnoDB con el mismo nombre en otra base de datos y mover al directorio de la base de datos actual el fichero .frm resultante. MySQL asumirá que la tabla ya existe, y se podrá eliminar con DROP TABLE. creará.
        Otro síntoma de un diccionario de datos desactualizado es que
        MySQL emite un mensaje de error donde dice que no puede abrir un
        fichero .InnoDB:
      
ERROR 1016: Can't open file: 'child2.InnoDB'. (errno: 1)
En el registro de errores puede encontrarse un mensaje similar a este:
InnoDB: Cannot find table test/child2 from the internal data dictionary InnoDB: of InnoDB though the .frm file for the table exists. Maybe you InnoDB: have deleted and recreated InnoDB data files but have forgotten InnoDB: to delete the corresponding .frm files of InnoDB tables?
        Esto significa que hay un fichero .frm que
        no tiene la correspondiente tabla dentro de
        InnoDB. El fichero .frm
        puede ser borrado manualmente para solucionarlo.
      
        Si MySQL cae durante una operación ALTER
        TABLE, puede aparecer una tabla temporal huérfana
        dentro del espacio de tablas InnoDB.
        Empleando innodb_table_monitor se verá
        listada una tabla cuyo nombre es #sql-....
        En MySQL 5.0, se pueden llevar a cabo sentencias SQL sobre
        tablas cuyo nombre contenga el caracter '#'
        si se encierra el nombre dentro de acentos graves (ASCII 96). De
        esa forma, se puede eliminar esta tabla huérfana del mismo modo
        que las mencionadas anteriormente. Hay que tener en cuenta que
        al copiar o renombrar un fichero en el shell de Unix, se
        necesitará colocar el nombre del fichero entre comillas dobles
        si éste contiene un caracter '#'.
      
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

