Mysql restore con error 1217 y error 1292

msyql-error-1217-error-1292

No hay nada más odioso que tener que hacer una recuperación de un fichero .SQL, y encontrarte con problemas de compatibilidad y errores que en parte están derivados de una mala praxis a la hora de programar. En nuestro caso, nos encontramos con una BD con valores incorrectos para campos tipo datatime (error 1292) y problemas con las claves foráneas, (error 1217) también propiciadas pro los cambios en las últimas versiones de MySQL y MariaDb.

Cada vez son más las cosas que alejan la compatibilidad entre MariaDB y MySQL, de tal manera, que la elección de una de ellas, y el conocimiento del funcionamiento de ambos modelos se hace más necesario cuando realizamos un desarrollo basado en MySQL/MariaDB.

ERROR 1217 (23000) at line XX: Cannot delete or update a parent row: a foreign key constraint fails

Se trataría de desactivar la comprobación de las claves foráneas.

Cuando terminemos nuestra restauración del backup deberíamos volver al valor original

ERROR 1292 (22007) at line XXX: Incorrect datetime value: ‘0000-00-00 00:00:00’ for column ‘create_at’ at row XX

En este caso, se trata de desactivar el problema derivado de que en nuestro backup hay filas que tienen un valor no valido para una columna de tipo datetime, y MySQL no pasa al estar activado la verificación de este tipo de columnas.

Solución modificando el fichero de backup mysql .sql

Para evitar errores, olvidos, y a una vez conocemos la naturaleza del problema y podemos incluso investigar más profundamente sobre el tema, os propongo modificar el fichero dump para añadir las instruccione adecuadas

Y añadimos al final (la mejor manera para mi es añadiendo con echo en el shell

Es altamente aconsejable no limitarse a restaurar el mysql, sino dedicar un tiempo a corregir los defectos estructurales de la base de datos afectada, ya que a la larga nos volverá a pasar factura.

 

 

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax