Il existe différentes raisons pour mettre à niveau vos bases de données. Il peut s'agir d'appliquer des correctifs de sécurité, d'utiliser de nouvelles fonctionnalités, de résoudre des problèmes de compatibilité ou simplement de maintenir votre système à jour. Cette mise à niveau peut être une mise à niveau majeure ou mineure, et selon la technologie, il existe différentes approches pour effectuer ce travail, mais si vous avez besoin que vos systèmes fonctionnent tout le temps sans temps d'arrêt, effectuer une mise à niveau progressive pourrait être la meilleure option. .
Dans ce blog, nous verrons quelques considérations à prendre en compte avant la mise à niveau et comment effectuer une mise à niveau progressive sur MySQL.
Améliorations mineures vs majeures
En général, les mises à niveau mineures sont sûres dans la mesure où vous pouvez facilement les rétrograder ou les annuler et doivent être compatibles avec les packages et fonctionnalités précédents.
La mise à niveau d'une version majeure implique certains risques tels que la suppression du package de base de données, la compatibilité de la configuration et des connecteurs, les fonctionnalités obsolètes, etc.
Ainsi, même lorsque les tests sont importants pour les deux scénarios, en cas de mises à niveau majeures, ils sont indispensables si vous souhaitez éviter de graves problèmes pour votre entreprise.
Avant la mise à niveau
Maintenant, voyons quelques considérations avant la mise à niveau, pour éviter de futurs problèmes.
Sauvegardes
Les sauvegardes sont toujours importantes, et encore plus si vous souhaitez mettre à jour votre base de données. Si quelque chose ne va pas et que d'autres options de récupération après sinistre échouent, vous aurez besoin d'une sauvegarde pour restaurer votre base de données. Donc, avant de commencer la tâche, effectuez une sauvegarde complète (physique ou/et logique) de votre base de données actuelle et conservez-la en lieu sûr jusqu'à ce que tout fonctionne correctement pendant quelques jours/semaines.
Examiner les fonctionnalités obsolètes
Si vous utilisez une fonctionnalité obsolète dans la nouvelle version, votre application peut échouer et vous devrez revenir en arrière pour récupérer vos systèmes, ce qui générera des temps d'arrêt (selon l'approche) et un perte de temps. Vérifiez la fonctionnalité obsolète et comparez-la à celles que vous utilisez pour éviter cette tentative de mise à niveau infructueuse.
Tests
Ceci est important non seulement pour les mises à niveau, mais également pour tout changement dans votre base de données ou votre application. Avoir un environnement de test qui réplique l'environnement de production peut vous faire gagner du temps et éviter des problèmes inattendus lors de toute mise à niveau ou modification de la base de données.
Restauration
Dans toute mise à niveau, il est important d'avoir une restauration prête à être utilisée si nécessaire pour que votre base de données soit opérationnelle dès que possible. Sinon, cela pourrait affecter votre RTO (Recovery Time Objective) au cas où vous auriez besoin de recréer le cluster à partir d'une sauvegarde ou d'une autre option de plan de récupération.
Gardez à l'esprit que parfois les rétrogradations ne sont pas possibles, vous devriez donc avoir un plan secondaire au cas où vous auriez besoin d'annuler vos modifications.
Vérifications des fournisseurs
Selon le fournisseur et la version, vous pouvez utiliser la commande mysqlcheck pour effectuer la vérification préliminaire de votre installation actuelle et confirmer que vous êtes prêt à commencer.
$ mysqlcheck -u root -p --all-databases --check-upgrade
Enter password:
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
sys.sys_config OK
Ceci est une première vérification à effectuer avant la mise à jour, et il vérifiera qu'il n'y a pas :
- Tableaux utilisant des types de données ou des fonctions obsolètes
- Fichiers frm orphelins
- Triggers avec un définisseur manquant ou vide ou un contexte de création non valide
Il y a quelques autres choses que vous devez vérifier, mais pour éviter un long article de blog, vous pouvez vous référer à la documentation officielle de MySQL pour cela.
Mises à jour manuelles pour MySQL
Il existe différentes approches pour effectuer une mise à niveau propagée. Il pourrait être en place, en utilisant la réplication, ou même un mélange de ceux-ci. Dans tous les cas, si vous souhaitez éviter les temps d'arrêt, vous ne devez pas effectuer de modifications dans votre application pendant la mise à niveau. Pour cela, vous pouvez ajouter un Load Balancer devant vos bases de données. Votre application se connectera à votre équilibreur de charge et redirigera le trafic vers les nœuds disponibles.
Supposons que vous ayez une réplication MySQL avec 1 nœud maître et 2 nœuds esclaves, et 1 nœud HAProxy devant eux :
Une manière simplifiée d'effectuer une mise à niveau progressive manuelle sur cet environnement pourrait être :
- Désactivez un nœud esclave de votre HAProxy
- Assurez-vous qu'il n'y a pas de trafic sur ce nœud esclave
- Mettre à jour le nœud esclave manuellement
- Vérifiez l'état de la réplication pour vous assurer qu'il est à jour
- Désactivez le nœud maître dans votre HAProxy
- Assurez-vous qu'il n'y a pas de trafic sur votre nœud maître
- Promouvoir le nœud esclave mis à jour
- Activez-le dans votre HAProxy
- Confirmer que le nouveau maître reçoit du trafic
- Reconfigurez votre deuxième esclave pour répliquer à partir du nouveau maître
- Désactivez le deuxième esclave de votre HAProxy
- Assurez-vous qu'il n'y a pas de trafic sur ce nœud esclave
- Mettre à jour le nœud esclave manuellement
- Vérifiez l'état de la réplication pour vous assurer qu'il est à jour
- Activez-le dans votre HAProxy
- Confirmer que le nœud esclave reçoit du trafic (si nécessaire)
- Reconfigurez votre ancien maître pour répliquer à partir du nouveau maître
- Mettre à jour manuellement l'ancien nœud maître
- Vérifiez l'état de la réplication pour vous assurer qu'il est à jour
- Activez-le dans votre HAProxy
- Confirmez que l'ancien maître (maintenant esclave) reçoit du trafic (si nécessaire)
Comme vous pouvez le voir, même de manière simplifiée, cette tâche nécessite de nombreuses étapes, et cela signifie plus de possibilités que quelque chose se passe mal.
Mises à niveau progressives de ClusterControl pour MySQL
La meilleure façon de réduire les risques d'échec consiste à automatiser toutes (ou presque toutes) ces étapes. À l'aide de ClusterControl, vous pouvez effectuer une mise à niveau progressive mineure de votre cluster MySQL en quelques clics seulement.
Pour ce faire, accédez à ClusterControl -> Sélectionnez Cluster -> Gérer -> Mises à niveau, où vous voyez l'option de mise à niveau.
Les mises à niveau sont en ligne et sont effectuées sur un nœud à la fois. Le nœud sera arrêté, le logiciel sera mis à jour, puis le nœud sera redémarré. Si un nœud ne parvient pas à se mettre à niveau, le processus est abandonné.
Si vous choisissez l'option Mettre à jour, vous verrez une confirmation concernant la version qui sera mise à jour :
Et il vous suffit d'appuyer sur Upgrade pour confirmer ce travail. Après cela, vous pouvez surveiller le processus de mise à niveau dans la section d'activité de ClusterControl :
En même temps, ClusterControl reconfigurera vos équilibreurs de charge pour envoyer le trafic aux nœuds disponibles.
ClusterControl ne prend en charge que les mises à niveau mineures, car, comme nous l'avons mentionné précédemment, une mise à niveau majeure est une tâche risquée qui nécessite des tests et des recherches pour s'assurer que votre application fonctionnera correctement sur la nouvelle version majeure.
Conclusion
La mise à niveau est une tâche importante dans toutes les entreprises et elle peut être risquée si vous ne prenez pas certaines précautions et ne suivez pas correctement toutes les étapes de mise à niveau.
Dans ce blog, nous avons mentionné quelques considérations à prendre en compte avant de mettre à niveau votre base de données, et nous avons montré la différence entre effectuer cette tâche manuellement et utiliser ClusterControl, qui vous aide à minimiser les risques d'échec.