En estos días me he visto en la necesidad de migrar una base de datos MySQL de grandes dimensiones portando los dumps de un sitio a otro. Al principio hicimos sólo uno, que ocupaba 10 gigas. Cuando empezó a dar problemas, se nos ocurrió trocearlo en un script por tabla de la base de datos y así ver qué tablas eran las problemáticas y actuar en consecuencia con ellas sin necesidad de volver a restaurarlo todo desde el principio.

Tras mirar por ahí, al final lo que más nos gustó fue el siguiente par de scripts que encontramos en stackoverflow (1 y 2).

Dump tables

Consulta la base de datos dada para obtener un listado de las tablas que contiene. Después, el script itera este listado para ir creando un fichero por tabla, comprimido con gzip.

Import files

Más sencillo que el anterior, este script simplemente recorre los ficheros del directorio que le pasamos. En cada iteración descomprime un fichero y se lo pasa directamente al MySQL vía pipe.

Que conste que en los gists he mantenido la autoría de las personas que subieron sus scripts a stackoverflow, que tienen mi mayor respeto y admiración ;). En mi caso, yo los modifiqué ligeramente porque no quería comprimirlos y luego tener que descomprimirlos. Así me ahorraba una operación. Hubiera sido interesante lanzarlo de las dos maneras y hacer una comparativa de tiempos, ¿verdad?

Sencillos, limpios y bonitos, ¿no? Con esta estrategia de divide y vencerás la verdad es que pudimos acotar el problema y reducir los tiempos de restauración tras el fallo.

¿Alguna vez has tenido contratiempos similares? ¿Cómo los resolviste?

Anuncios