AllInfo

Comment automatiser les migrations de bases de données MySQL avec Skeema

Skeema est un outil CLI open source qui vous permet de synchroniser les schémas de base de données MySQL sur plusieurs hôtes. Il fonctionne avec des fichiers SQL simples contenant des instructions CREATE TABLE.

Les migrations de bases de données sont l'un des défis les plus courants dans le processus de développement logiciel. Comment versionner votre schéma et appliquer les modifications à tous vos environnements ?

Skeema aide à atténuer ce problème en vous permettant de gérer votre schéma en tant que SQL standard. Il n'y a pas de syntaxe ou de format de fichier de configuration particulier à apprendre. Lorsque vous transférez votre schéma vers un hôte, Skeema récupère les définitions des tables sur cet hôte et les compare à vos fichiers locaux. Il calculera ensuite les instructions CREATE, ALTER et DROP pour que l'hôte distant corresponde à vos fichiers SQL.

Vous devrez utiliser les tables InnoDB pour tirer le meilleur parti de Skeema. Il peut fonctionner avec les tables MyISAM, mais toutes les fonctionnalités ne sont pas prises en charge et vous pouvez rencontrer des problèmes.

Mise en route

Skeema est disponible pour Linux et Mac. Des packages DEB et RPM sont proposés, ainsi que des binaires autonomes pré-construits. Prenez le téléchargement approprié pour votre système et installez le package ou extrayez le binaire dans un répertoire qui se trouve dans votre chemin.

Publicité

La première étape de l'utilisation de Skeema consiste à récupérer le schéma existant de votre base de données. Si vous avez déjà une collection de fichiers SQL avec des instructions CREATE TABLE, vous pouvez les utiliser tels quels. Sinon, exécutez la commande skeema init pour obtenir le SQL représentant une base de données active.

La CLI de Skeema accepte les mêmes arguments que la commande mysql normale. Utilisez les indicateurs -h, -u et -p pour spécifier votre hôte MySQL, votre nom d'utilisateur et votre mot de passe. L'utilisateur MySQL doit avoir un accès administratif à vos schémas ; sinon, Skeema pourrait ne pas être en mesure de les inspecter ou d'appliquer toutes les modifications. Skeema déposera vos fichiers SQL dans un nouveau répertoire au sein de votre répertoire de travail ; ajoutez l'indicateur -d pour choisir son nom.

skeema init -h example.com -u root -p -d my-sql

Skeema exporte par défaut le SQL pour tous les schémas sur l'hôte. Chaque schéma aura son propre sous-répertoire dans le dossier my-sql. Utilisez l'indicateur –schema pour indiquer un schéma spécifique à exporter. Il sera placé directement dans my-sql, sans aucune imbrication de sous-répertoire.

Schémas de synchronisation

Une fois que vous avez votre SQL, vous êtes prêt à le synchroniser avec un autre hôte. Utilisez la commande push skeema pour comparer votre SQL local à un autre serveur MySQL. Skeema appliquera automatiquement tous les changements qu'il détecte.

cd my-sql skeema push -h example.com -u root -p -d my-sql

Essayez de modifier l'une des instructions CREATE TABLE dans votre SQL. Ajoutez une nouvelle colonne ou modifiez le type d'une colonne existante. Lorsque vous poussez skeema, Skeema génère une instruction ALTER TABLE qui met à jour la table distante pour qu'elle corresponde.

Les opérations potentiellement destructrices telles que la suppression d'une table ou la modification du type de données d'une colonne sont désactivées par défaut. Cela vous permet d'éviter les pertes de données involontaires si vous exécutez Skeema accidentellement ou si vous spécifiez un serveur incorrect. Les opérations destructrices sont activées en ajoutant l'indicateur –allow-unsafe aux commandes push de skeema.

Utilisation de plusieurs environnements

Une utilisation courante de Skeema consiste à synchroniser plusieurs environnements. Si vous avez des serveurs locaux, de développement et de production, Skeema vous permet de les nommer afin que vous puissiez facilement pousser et tirer entre eux.

Publicité

Modifiez le fichier .skeema dans votre répertoire de schéma pour activer cette fonctionnalité. Il s'agit d'une structure de configuration de type INI où chaque section définit un nouvel environnement nommé. Vous n'aurez qu'un seul environnement de production, ajouté par skeema init, pour commencer.

Spécifiez les détails de connexion de chaque serveur afin que vous puissiez pousser et tirer pour que tout reste synchronisé. Les clés en haut du fichier, en dehors de toute section, sont des paramètres globaux appliqués à tous les environnements.

default-character-set=utf8mb4 default-collation=utf8mb4_general_ci generator=skeema:1.5.2-community schema=example-db [production] saveur=mysql:8.0 host=example.com port=3306 password=example user=mysql [local] saveur=mysql:8.0 host=localhost port=3306 password=example user=mysql

Vous pouvez désormais facilement synchroniser les modifications entre les environnements :

skeema pull local skeema push production

Cette séquence de commandes met d'abord à jour vos fichiers SQL sur disque pour qu'ils correspondent au schéma de votre serveur local. Les modifications sont ensuite appliquées à l'environnement de production en direct. Alternativement, vous pouvez éditer manuellement le SQL sur disque, puis le pousser à la fois en local et en production.

Cette approche rend les migrations de bases de données simples, reproductibles et moins sujettes aux erreurs. Vous pouvez incorporer Skeema dans un pipeline CI pour déployer les modifications de la base de données en production dans le cadre de votre flux de déploiement régulier.

Dry Runs and Lints

< p>Parfois, vous voudrez peut-être vérifier les changements dont un environnement a besoin sans les appliquer réellement. Dans ce cas, utilisez skeema diff pour comparer un environnement nommé à vos fichiers SQL sur disque. Skeema vous montrera les différences afin que vous puissiez anticiper les effets d'un push de skeema.

Publicité

Skeema dispose également d'un outil de peluchage intégré. Exécutez skeema lint pour analyser vos fichiers SQL et trouver les problèmes possibles. Plusieurs règles configurables sont prises en charge. Ceux-ci vous aident à vous assurer que votre SQL est cohérent, pris en charge et compatible avec les meilleures pratiques MySQL modernes. Les résultats de Lint sont également affichés pendant les commandes skeema push et skeema pull.

Plus d'options

Les commandes Skeema ont plusieurs indicateurs partagés qui vous permettent de personnaliser les opérations. Voici quelques-uns des plus importants :

Ces options vous donnent plus de contrôle sur Skeema’ s opérations. Ils vous permettent de configurer la connexion à la base de données pour qu'elle corresponde exactement à la configuration MySQL de votre application.

Conclusion

Skeema simplifie les migrations de base de données en fournissant une automatisation et la compatibilité avec les pipelines de déploiement CI/CD. Il intègre un linter SQL intégré, un outil de comparaison et un mécanisme de synchronisation.

Une version premium ajoute des fonctionnalités supplémentaires, notamment la possibilité de travailler avec des vues et des déclencheurs. Skeema Premium est une offre commerciale construite sur le noyau open source de la communauté Skeema. Il coûte 99 $/mois et prend également en charge les systèmes Windows.

L'adoption de Skeema vous permet de partager plus facilement les changements de schéma de base de données avec votre équipe, en gardant tous vos environnements synchronisés. C'est un choix plus sûr que de partager manuellement des instructions ALTER TABLE qui pourraient être égarées et qui ne créent pas une représentation canonique de votre schéma actuel.

Exit mobile version