Es gibt verschiedene Gründe für ein Upgrade Ihrer Datenbanken. Es kann sein, Sicherheitskorrekturen anzuwenden, neue Funktionen zu verwenden, Kompatibilitätsprobleme zu lösen oder einfach nur Ihr System auf dem neuesten Stand zu halten. Dieses Upgrade kann ein großes oder ein kleineres Upgrade sein, und je nach Technologie gibt es verschiedene Ansätze, um diese Aufgabe zu erledigen, aber wenn Sie möchten, dass Ihre Systeme die ganze Zeit ohne Ausfallzeiten laufen, könnte die Durchführung eines fortlaufenden Upgrades die beste Option sein .
In diesem Blog werden wir einige Überlegungen sehen, die vor dem Upgrade zu berücksichtigen sind, und wie man ein rollierendes Upgrade auf MySQL durchführt.
Kleine vs. große Upgrades
Im Allgemeinen sind kleinere Upgrades insofern sicher, als Sie sie leicht herunterstufen oder rückgängig machen können, und sollten mit den vorherigen Paketen und Funktionen kompatibel sein.
Das Upgrade einer Hauptversion birgt einige Risiken wie das Entfernen von Datenbankpaketen, Konfigurations- und Konnektorkompatibilität, veraltete Funktionen und mehr.
Auch wenn das Testen für beide Szenarien wichtig ist, ist es im Falle größerer Upgrades ein Muss, wenn Sie ernsthafte Probleme für Ihr Unternehmen vermeiden wollen.
Vor dem Upgrade
Sehen wir uns nun einige Überlegungen vor dem Upgrade an, um zukünftige Probleme zu vermeiden.
Sicherungen
Backups sind immer wichtig, und noch wichtiger, wenn Sie Ihre Datenbank aktualisieren möchten. Wenn etwas schief geht und andere Notfallwiederherstellungsoptionen fehlschlagen, benötigen Sie eine Sicherung, um Ihre Datenbank wiederherzustellen. Bevor Sie also mit der Aufgabe beginnen, erstellen Sie eine vollständige Sicherung (physisch oder/und logisch) Ihrer aktuellen Datenbank und bewahren Sie sie sicher auf, bis sichergestellt ist, dass für ein paar Tage/Wochen alles ordnungsgemäß funktioniert.
Überprüfen Sie veraltete Funktionen
Wenn Sie eine Funktion verwenden, die in der neuen Version veraltet ist, könnte Ihre Anwendung fehlschlagen, und Sie müssen ein Rollback durchführen, um Ihre Systeme wiederherzustellen, was zu Ausfallzeiten führt (abhängig vom Ansatz) und a Zeitverlust. Überprüfen Sie die veraltete Funktion und vergleichen Sie sie mit den von Ihnen verwendeten, um diesen fehlgeschlagenen Upgrade-Versuch zu vermeiden.
Testen
Dies ist nicht nur für Upgrades wichtig, sondern auch für jede Änderung in Ihrer Datenbank oder Anwendung. Mit einer Testumgebung, die die Produktionsumgebung repliziert, können Sie Zeit sparen und unerwartete Probleme während eines Upgrades oder einer Datenbankänderung vermeiden.
Zurücksetzen
Bei jedem Upgrade ist es wichtig, ein Rollback bereit zu haben, das bei Bedarf verwendet werden kann, damit Ihre Datenbank so schnell wie möglich einsatzbereit ist. Andernfalls könnte sich dies auf Ihre RTO (Recovery Time Objective) auswirken, falls Sie den Cluster aus einem Backup oder einer anderen Wiederherstellungsplanoption neu erstellen müssen.
Denken Sie daran, dass Downgrades manchmal nicht möglich sind, Sie sollten also einen sekundären Plan haben, falls Sie Ihre Änderungen rückgängig machen müssen.
Lieferantenprüfungen
Je nach Anbieter und Version können Sie den mysqlcheck-Befehl verwenden, um die Vorabprüfung Ihrer aktuellen Installation durchzuführen und zu bestätigen, dass Sie bereit sind.
$ 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
Dies ist eine erste Überprüfung, die vor dem Upgrade durchgeführt werden muss, und es wird überprüft, ob Folgendes nicht vorhanden ist:
- Tabellen mit veralteten Datentypen oder Funktionen
- Verwaiste FRM-Dateien
- Trigger mit fehlendem oder leerem Definierer oder einem ungültigen Erstellungskontext
Es gibt noch ein paar Dinge, die Sie überprüfen müssen, aber um einen ausführlichen Blogbeitrag zu vermeiden, können Sie sich dazu auf die offizielle MySQL-Dokumentation beziehen.
Manuelle fortlaufende Upgrades für MySQL
Es gibt verschiedene Ansätze, um ein rollierendes Upgrade durchzuführen. Es könnte vorhanden sein, Replikation verwenden oder sogar eine Mischung aus beidem. Wenn Sie Ausfallzeiten vermeiden möchten, sollten Sie in jedem Fall während des Upgrades keine Änderungen an Ihrer Anwendung vornehmen. Dazu können Sie Ihren Datenbanken einen Load Balancer vorschalten. Ihre Anwendung stellt eine Verbindung zu Ihrem Load Balancer her und leitet den Datenverkehr an die verfügbaren Knoten weiter.
Nehmen wir an, Sie haben eine MySQL-Replikation mit 1 Master- und 2 Slave-Knoten und 1 HAProxy-Knoten davor:
Ein vereinfachter Weg zur Durchführung eines manuellen fortlaufenden Upgrades in dieser Umgebung könnte sein:
- Deaktivieren Sie einen Slave-Knoten von Ihrem HAProxy
- Stellen Sie sicher, dass Sie keinen Datenverkehr auf diesem Slave-Knoten haben
- Aktualisieren Sie den Slave-Knoten manuell
- Überprüfen Sie den Replikationsstatus, um sicherzustellen, dass er aktuell ist
- Deaktivieren Sie den Master-Knoten in Ihrem HAProxy
- Stellen Sie sicher, dass Sie keinen Datenverkehr auf Ihrem Master-Knoten haben
- Bewerben Sie den aktualisierten Slave-Knoten
- Aktivieren Sie es in Ihrem HAProxy
- Bestätigen Sie, dass der neue Master Datenverkehr empfängt
- Konfigurieren Sie Ihren zweiten Slave neu, um vom neuen Master zu replizieren
- Deaktiviere den zweiten Slave von deinem HAProxy
- Stellen Sie sicher, dass Sie keinen Datenverkehr auf diesem Slave-Knoten haben
- Aktualisieren Sie den Slave-Knoten manuell
- Überprüfen Sie den Replikationsstatus, um sicherzustellen, dass er aktuell ist
- Aktivieren Sie es in Ihrem HAProxy
- Bestätigen Sie, dass der Slave-Knoten Datenverkehr empfängt (falls erforderlich)
- Konfigurieren Sie Ihren alten Master neu, um vom neuen Master zu replizieren
- Aktualisieren Sie den alten Master-Knoten manuell
- Überprüfen Sie den Replikationsstatus, um sicherzustellen, dass er aktuell ist
- Aktivieren Sie es in Ihrem HAProxy
- Bestätigen Sie, dass der alte Master (jetzt Slave) Datenverkehr empfängt (falls erforderlich)
Wie Sie sehen können, erfordert diese Aufgabe selbst in vereinfachter Form viele Schritte und bedeutet mehr Möglichkeiten, dass etwas schief geht.
Rollende ClusterControl-Upgrades für MySQL
Der beste Weg, die Wahrscheinlichkeit eines Fehlers zu verringern, besteht darin, alle (oder fast alle) dieser Schritte zu automatisieren. Mit ClusterControl können Sie mit nur wenigen Klicks ein kleineres fortlaufendes Upgrade Ihres MySQL-Clusters durchführen.
Um dies zu tun, gehen Sie zu ClusterControl -> Cluster auswählen -> Verwalten -> Upgrades, wo Sie die Upgrade-Option sehen.
Upgrades sind online und werden jeweils auf einem Knoten durchgeführt. Der Knoten wird gestoppt, die Software wird aktualisiert und dann wird der Knoten erneut gestartet. Wenn ein Knoten nicht aktualisiert werden kann, wird der Vorgang abgebrochen.
Wenn Sie die Upgrade-Option wählen, sehen Sie eine Bestätigung über die zu aktualisierende Version:
Und Sie müssen nur auf Upgrade klicken, um diesen Job zu bestätigen. Danach können Sie den Upgrade-Prozess im ClusterControl-Aktivitätsabschnitt überwachen:
Gleichzeitig konfiguriert ClusterControl Ihre Load Balancer neu, um den Datenverkehr zu senden zu den verfügbaren Knoten.
ClusterControl unterstützt nur geringfügige Upgrades, da, wie bereits erwähnt, ein größeres Upgrade eine riskante Aufgabe ist, die Tests und Recherchen erfordert, um sicherzustellen, dass Ihre Anwendung mit der neuen Hauptversion einwandfrei funktioniert.
ClusterControl unterstützt nur kleinere Upgrades. P>Fazit
Upgrade ist eine wichtige Aufgabe in allen Unternehmen und kann riskant sein, wenn Sie nicht bestimmte Vorsichtsmaßnahmen treffen und nicht alle Upgrade-Schritte korrekt befolgen.
In diesem Blog haben wir einige Überlegungen erwähnt, die Sie berücksichtigen sollten, bevor Sie Ihre Datenbank aktualisieren, und wir haben den Unterschied zwischen der manuellen Durchführung dieser Aufgabe und der Verwendung von ClusterControl aufgezeigt, wodurch Sie die Möglichkeit eines Fehlers minimieren können.