sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo soluciono la corrupción de InnoDB que bloquea un nombre de tabla desde la creación (errno:-1) en AWS RDS?

DDL en InnoDB no es transaccional, por lo que es posible que la información en un archivo .frm y el diccionario InnoDB sean diferentes. En su caso, parece que falta el archivo .frm pero hay un registro huérfano en el diccionario (bueno, en realidad registros en algunas tablas SYS_* del diccionario).

No puede eliminar fácilmente un registro del diccionario. Necesita un archivo .frm respectivo para que MySQL pase su DROP al nivel de InnoDB. Con RDS no puedes hacerlo.

Pero puede DROP toda la base de datos. En ese caso, InnoDB eliminará todos los registros del diccionario, incluido el huérfano.

Entonces, para limpiar su diccionario, sugiero lo siguiente:

  1. Detenga todo el tráfico a MySQL, hágalo de solo lectura
  2. Cree una base de datos temporal adstudio_tmp
  3. RENAME todas las tablas de adstudio a adstudio_tmp
  4. DROP DATABASE adstudio . En este punto está vacío. El DROP borrará todas las entradas en el diccionario InnoDB.
  5. RENAME todas las tablas desde adstudio_tmp a adstudio

Después de esto, el diccionario debería estar limpio y podrá crear su data_feed_param .

Describí un problema similar después de ALTER fallido MESA . Échale un vistazo para obtener más detalles.