Petite ligne de commande permettant de supprimer toutes les tables d’une base de données.
Très utile sur un site de recette ou pré-prod.
1 |
mysql -h <ip-serveur> -u <utilisateur> -p<mot-de-passe> <base-de-données> -e "show tables;" | grep -v "+" | grep -v "Tables_in_" | gawk '{print "SET FOREIGN_KEY_CHECKS=0;drop table `<base-de-données>`."$1 ";"}' | mysql -h <ip-serveur> -u <utilisateur> -p<mot-de-passe> |
Remplacer les paramètres <blablabla> par vos valeurs.
Notez qu’il n’y a pas d’espace entre -p et le mot de passe !
Petite suggestion, si je peux me permettre 😉 pour ceux qui veulent virer toutes les tables avec un préfixe particulier
Faire un ~/.my.cnf pour ne pas avoir à re saisir le mot de passe
puis utiliser directement gawk avec un filtre « toutes les tables qui commencent par »
mysql -u root nom_base -e « show tables; » |gawk ‘ /^prefixe_tables/ { print « SET FOREIGN_KEY_CHECKS=0;drop table
nom_base
. »$1 « ; »}’ | mysql -u rootCordialement
Merci pour l’astuce !
Bonjour,
votre solution fonctionne, mais me semble un peu compliquée, les options -s et -N de MySQL permettent d’obtenir tout de suite la liste des tables à passer à awk. Ainsi la version simplifiée (en omettant les paramètres de connexion à mysql pour être plus clair) serait :
mysql -s -N -e « show tables; » | gawk ‘{print « SET FOREIGN_KEY_CHECKS=0;drop table
. »$1 « ; »}’ | mysql
Il faut bien entendu passer le nom de la base à MySQL/MariaDB, ce que j’ai oublié dans la ligne que j’ai tapée qui débuterait donc par :
mysql -s -N Nom_de_la_ base -e « show tables; »