A veces me comparo yo mismo, ya que soy de esos en el mundo que no tienen quién lo compare, a los artistas del renacimiento. Ellos construían sus pinturas, sus lienzos, sus caballetes… y creaban con ellos sus obras. Yo monto el ordenador, instalo el sistema, lo conecto a internet, pongo en marcha el servidor, creo las webs, su contenido, lo difundo…
El caso es que tengo mi servidor, desde el que lees estas líneas, en mi casa. Pero últimamente, a mi hijo Víctor, de un año, le ha dado por escaparse de su madre, entrar en mi despacho donde tengo el servidor y apagar el interruptor de la corriente, antes de que lo alcance su madre. Y claro, resulta que es muy probable que en ese momento alguien esté conectado a una de mis webs y el sistema de captación de estadísticas esté realizando un INSERT en su tabla correspondiente de mysql. ¿Y qué pasa entonces? Que la tabla se corrompe y ya no acepta más introducciones posteriores, perdiendo así los datos estadísticos de los futuros visitantes. Y eso es lo que me pasó ayer. Dos veces. Sí, Víctor es muy rápido.
Por lo que haciendo mucho Google con los datos del fichero error_log que se encuentra en /var/log/httpd, todo lo que digo es sobre un Slackware GNU/Linux, pero extrapolable a cualquier otro sistema, me encontré con este foro: http://bugs.mysql.com/bug.php?id=2027 donde bajando por la página hasta el final descubrí la solución. Ésta es extremadamente sencilla y ocupa unos pocos segundos de tu tiempo.
Verás, primero hay que hacer una copia de seguridad de los datos de la base de datos afectada. Abre un terminal y colócate en un directorio donde tengas permiso de escritura, y escribe:
mysqldump -u usuario_basededatos -p –opt nombre_basededatos > nombre_fichero.sql
Luego, y sin cambiar de directorio, cuando haya acabado el dumping de la base de datos, lo vuelves a inyectar en la base de datos:
mysql -u usuario_basededatos -p nombre_basededatos < nombre_fichero.sql
Y… ya está. En el foro se dice que después de hacer la copia de seguridad, hay que borrar la base y crearla de nuevo para posteriormente inyectar los datos. Pero no hace falta porque la propia copia de seguridad ya hace un DROP si se encuentra con una tabla existente, por lo que la borra automáticamente y la sustituye por la copia. También, se podría hacer una copia sólo de la tabla afectada, pero prefiero la solución de copiar todas las tablas para curarme en salud.
Así que, solucionada de una forma eficiente y sencilla un problemilla que me llevaba por el camino de la amargura hace un tiempo, y espero que te haya servido también para solucionar alguno de los tuyos
loading...


















Lee más sobre: mysql
Otros artículos relacionados que pueden interesarte:
Comenta usando Facebook
2 comentarios. ¿Añades el tuyo?»
Gracias por enlazar aquí:
-
Reparados errores en tres bases de datos mysql gracias a mi mismo post: http://www.usuadio.com/?p=697 Tengo una memoria terrible a veces…
GD Star Rating
loading...
RSS feed para los comentarios de esta entrada. URL de TrackBack













Usuadio: Mysql: Solución a 'Error "Duplicate entry … for key …" where not expected' http://www.usuadio.com/?p=697 #MiBlog
loading...