Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment effectuer des mises à niveau progressives pour MySQL

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.