Desafortunadamente no existe un comando en MySQL para borrar de una estacada todo las tablas de una base de datos, por eso en este artículo veremos como programar un pequeño script en bash para que realice esta tarea.
Lo primero es crear un fichero que contendrá las credenciales para conectarnos a la base de datos. Esto nos puede resultar muy útil para usarlo en otros scripts y/o usarlo en diferentes entornos.
Con tu editor favorito, en la raíz de tu home, crea un fichero llamado .credentials.cnf.
.credentials.cnf
[mysqldump]
user=root
password=
[mysql]
user=root
password=
Ahora proseguimos a crear otro fichero db-empty.sh, en tu carpeta home o en tu proyecto.
Este script contendrá dos variables:
CREDENTIALS
con el path del fichero de credencialesDB_NBAME
con el nombre de la base de datos.
El script creará un fichero temporal donde se guardaran todas las sentencias DROP TABLE
. Para evitar problemas con las claves foráneas seteará la variable FOREIGN_KEY_CHECKS
a false
. Después de todas las sentencias sql la seteraremos a TRUE
nuevamente.
Una vez creado el script ejecutará el fichero temporal para borrar todas las tablas.
db-empty.sh
#!/bin/bash
CREDENTIALS='~/.credenciales.cnf'
DB_NAME='dbname'
echo "SET FOREIGN_KEY_CHECKS = 0;" > ./temp.sql
mysqldump --defaults-file=$CREDENTIALS --add-drop-table --no-data $DB_NAME | grep 'DROP TABLE' >> ./temp.sql
echo "SET FOREIGN_KEY_CHECKS = 1;" >> ./temp.sql
mysql --defaults-file=$CREDENTIALS $DB_NAME < ./temp.sql
Importante, no olvides añadir permisos de ejecución al ficehro:
$ chmod +x db-empty.sh
Una vuelta de tuerca, vamos a usar el nombre de la base de datos como primner argumento del script. De esta forma, remplaza la linea 4 por el siguiente fragmento:
DB_NAME=$1
if test -z "$DB_NAME"
then
echo "Set a DB name as first argument"
exit;
fi