MySQL Restaurar una sola tabla de un dump completo
Después de hacer un backup completo de todas las bases de datos de MySQL, un cliente me pidió la restauración de una sola tabla.
Vaya… y como saco yo una sola tabla dentro de un dump de varios gigas ?
Me puse a investigar y lo he logrado con el comando sed.
Con sed genero un dump nuevo solo con la tabla que quiero restaurar. La tabla la quiero restaurar no la quiero sobreescribir, por lo que copiare los datos en una tabla temporal.
Suponiendo que el backup está en mysqldump.sql y queremos generar el nuevo dump en /tmp/tabla.sql, podríamos hacerlo de la siguiente manera:
echo "USE \`NOMBRE_BD\`;" > /tmp/tabla.sql;sed -n '/^USE `'NOMBRE_BD'`/,/^USE/p' mysqldump.sql |sed -n '/-- Table structure for table `'NOMBRE_TABLA'`/,/UNLOCK TABLES/p'|sed s/NOMBRE_TABLA/NOMBRE_TABLABCCK/g >> $FILE
Al primer sed le indicamos que nos muestre lo que hay entre las lineas que empiecen por “USE `NOMBRE_BD`” y “USE“, que será la siguiente base de datos. Esto lo hacemos así ya que distintas bases podrían tener el mismo nombre para una tabla. Con la primera selección ya tenemos todo el dump de la base de datos donde se encuentra nuestra tabla. Con el siguiente sed seleccionamos las sentencias relacionadas con esa tabla, y con el último sed, le decimos que nos cambie ese nombre de tabla por otro, para no sobreescribir la original. El echo del principio, es para indicar la base de datos que tiene que usar en la restauración.





