echo "SET FOREIGN_KEY_CHECKS = 0;" > ./temp.sql mysqldump --add-drop-table --no-data -u root -p db_name | grep 'DROP TABLE' >> ./temp.sql
on a une base avec plein de vieilles tables pourries, ici pour l'exemple on va chercher le motif lime_old_.*
#!/bin/bash # Configuration DB_USER="votre_utilisateur" DB_PASS="votre_mot_de_passe" DB_NAME="nom_de_votre_base" TABLE_PATTERN="lime_old_%" # 1. Récupérer la liste des tables TABLES=$(mysql -u "$DB_USER" -p"$DB_PASS" -D "$DB_NAME" -N -e \ "SELECT table_name FROM information_schema.tables WHERE table_schema='$DB_NAME' AND table_name LIKE '$TABLE_PATTERN';") # Vérification si des tables ont été trouvées if [ -z "$TABLES" ]; then echo "Aucune table ne correspond au motif '$TABLE_PATTERN'." exit 0 fi echo "Les tables suivantes vont être supprimées :" echo "$TABLES" read -p "Confirmez-vous la suppression ? (oui/non) : " CONFIRM if [ "$CONFIRM" != "oui" ]; then echo "Opération annulée." exit 0 fi # 2. Supprimer les tables for TABLE in $TABLES; do echo "Suppression de $TABLE..." mysql -u "$DB_USER" -p"$DB_PASS" -D "$DB_NAME" -e "DROP TABLE $TABLE;" if [ $? -eq 0 ]; then echo "✓ Table $TABLE supprimée." else echo "✗ Erreur lors de la suppression de $TABLE." fi done echo "Terminé."
-- 1. Définir les variables SET @db = 'nom_de_votre_base'; SET @pattern = 'lime_old_%'; -- 2. Sélectionner explicitement la base de données USE nom_de_votre_base; -- 3. Générer la commande de suppression dynamique SELECT GROUP_CONCAT(CONCAT('DROP TABLE ', table_name) SEPARATOR '; ') INTO @sql_command FROM information_schema.tables WHERE table_schema = @db AND table_name LIKE @pattern; -- 4. Vérifier la commande générée (Optionnel mais recommandé pour sécurité) -- Affiche la commande qui va être exécutée. Si le résultat est NULL, aucune table ne correspond. SELECT @sql_command; -- 5. Exécuter la suppression si la commande n'est pas NULL PREPARE stmt FROM @sql_command; EXECUTE stmt; DEALLOCATE PREPARE stmt;