Como eliminar todas las tablas de una base de datos MySQL

  • author Jordi Touza Bonnin
  • 21 de septiembre de 2021

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 credenciales
  • DB_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

Deja tu comentario