Como restaurar una sola tabla en MYSQL

Desde MYSQL es posible excluír una tabla en el momento del backup, pero no es posible solo restaurar una sola tabla. A continuación te mostramos como:

Restaurar una sola tabla en MYSQL

En base a lo anterior en el momento de realizar nuestro backup con MYSQLDUMP podemos excluir o ignorar aquellas tablas que no deseamos realizar un backup mediante el parametro –ignore

--ignore-table=db_name.tbl_name Do not dump the given table, which must be specified using both the database and table names. To ignore multiple tables, use this option multiple times. This option also can be used to ignore views.

Sin embargo, en ambientes de producción es necesario restaurar una sola tabla (o varias) en una nueva ubicación. Para ello podemos hacer lo siguiente:

1- Desde nuestra consola Linux creamos el siguiente script:

touch restore.sh
nano restore.sh

2 – Colocamos en su interior lo siguiente:

#!/bin/bash

####
# Split MySQL dump SQL file into one file per table
# based on http://blog.tty.nl/2011/12/28/splitting-a-database-dump
####

if [ $# -lt 1 ] ; then
  echo "USAGE $0 DUMP_FILE [TABLE]"
  exit
fi

if [ $# -ge 2 ] ; then
  csplit -s -ftable $1 "/-- Table structure for table/" "%-- Table structure for table \`$2\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1"
else
  csplit -s -ftable $1 "/-- Table structure for table/" {*}
fi

[ $? -eq 0 ] || exit

mv table00 head

FILE=`ls -1 table* | tail -n 1`
if [ $# -ge 2 ] ; then
  mv $FILE foot
else
  csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*}
  mv ${FILE}1 foot
fi

for FILE in `ls -1 table*`; do
  NAME=`head -n1 $FILE | cut -d$'\x60' -f2`
  cat head $FILE foot > "$NAME.sql"
done

rm head foot table*

Fuente: https://gist.github.com/jasny/1608062

3 – Le damos permiso para ejecutar el script

chmod +x restore.sh

4- Uso del script

El mismo permite limpiar un archivo de backup de MySQL y dejar la parte relevante a nuestra tabla. Su uso sería así:

  • Extraer todas las tablas en archivos individuales
./restore.sh mybackup.sql
  • Extraer una sola tabla específica en un archivo individual
restore.sh mybackup.sql table1

5-Restaurar la tabla en una base especifíca

mysql -D mydatabase < mytable1.sql

Espero que le sea útil