Admin/Dev

15
Avril
2023

Astuce MySQL/MariaDB : Réaliser un dump de toutes les bases de données disposant d'un préfixe identique

Publié par sky

Aujourd'hui, j'ai eu besoin d'exporter toutes les bases de données MariaDB d'un projet. Le de nom des bases de données de ce projet est préfixé afin de les retrouver rapidement.

J'ai donc tester de faire un export avec le caractère * pour essayer de récupérer uniquement ces bases.

mysqldump --databases "skymac_*" > skymac_dbs.sql

Malheureusement, le résultat obtenu n'est pas celui attendu. J'ai obtenu l'erreur :

mysqldump: Got error: 1049: "Unknown database 'skymac_*'" when selecting the database

Visiblement, l'outil mysqldump ne support pas les caractères "wildcard" pour déterminer les bases de données à récupérer.

Il a fallut que je trouve une solution.

Bien sur, nous pourrions faire un export de toutes les bases de données et faire le tri ensuite, mais cela n'est pas très optimal.

La bonne solution serait d'obtenir de la part de MariaDB, la liste des bases de données à exporter puisque c'est lui qui les connait. Puis de la fournir à mysqldump.

Cela se fait tout simplement, en demandant à la commande mysql d'exécuter une commande, basée sur SHOW DATABASES afin d'obtenir la liste souhaitée.

mysql -e "SHOW DATABASES LIKE 'skymac_%';"

Le résultat est

+----------------------+
| Database (skymac_%) |
+----------------------+
| skymac_main          |
| skymac_pr1           |
| skymac_pr2           |

Cela correspond bien à ce que l'on veut, il faut désormais le rendre lisible par mysqldump. Il suffit d'ajouter, à la commande, les paramètres -B et -N

mysql -BN -e "SHOW DATABASES LIKE 'skymac_%';"

Et hop, voilà quelque chose de parfaitement exploitable

skymac_main
skymac_pr1
skymac_pr2

Le paramètre -B renvoie le résultat en mode batch, donc sans le formatage "boite" de mysql. Tandis que le paramètre -N retire l'en-tête.

Il n'y a plus qu'à combiner l'ensemble, avec la commande mysqldump telle que

mysqldump --databases `mysql -BN -e "SHOW DATABASES LIKE 'skymac_%';"` > skymac_dbs.sql

Attention, si vous utilisez sudo pour accéder aux bases en tant que root, il faudra l'ajouter 2 fois

sudo mysqldump --databases `sudo mysql -BN -e "SHOW DATABASES LIKE 'skymac_%';"` > skymac_dbs.sql

Enfin, cela fonctionne aussi avec les suffixes évidemment. Il est même possible de combiner les deux, voir de faire une recherche complètement différente sur le nom des bases.

 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer