Ce mémo a été publié le 20 mars 2014 et peut contenir des informations qui peuvent être incomplètes, non mises à jour voir erronées du fait de son ancienneté.
N'hésitez pas à compléter votre recherche sur des articles plus récents.
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; »