Von ORDIX AG auf Donnerstag, 30. Juli 2020
Kategorie: Data Management

MySQL unter Windows – Teil 3: Upgrade von 5.7 zu 8.0

Upgrade mittels GUI?

Innerhalb eines MySQL Major Releases (z.B. 5.7.26 -> 5.7.29) lässt sich auch ein GUI (Graphical User Interface)-gestütztes Upgrade mit Hilfe des MySQL Installers durchführen. Wird allerdings von einem Major Release auf ein anderes upgegradet, so kommen wir um ein Upgrade mittels CLI (Command Line Interface) nicht vorbei.

Im folgenden Artikel wird ein Upgrade von 5.7.29 auf 8.0.18 anhand der Beispieldatenbank Sakila durchgeführt.

Viele Wege führen nach Rom

Seit MySQL 5.7 wird auch offiziell die Möglichkeit des Inplace-Upgrades (1) unterstützt. Seit der Version 8.0.16 funktioniert dies sogar vollständig automatisch (vergl. Upgrade im Automatik-Modus). Diese Variante ist zwar mit einer Downtime des MySQL-Servers verbunden, reduziert aber den Speicherplatzbedarf, den ein Outplace-Upgrade (2) erfordert. 

Bei Variante 1 wird das bereits vorhandene Datenverzeichnis mit einer neuen MySQL-Version gestartet, während bei Variante 2 zunächst die Daten via mysqldump (o.ä.) exportiert und anschließend im neuen MySQL Server importiert werden.

Sicherheit vs. Zeit

Wie so oft im Leben muss man sich bei den Varianten zwischen Geschwindigkeit (1) und Sicherheit (2) entscheiden.

Während das Outplace-Verfahren zu jeder Zeit die Möglichkeit eines Fallbacks zur alten Version bietet, verändert das Inplace-Verfahren bei Ausführung des mysql_upgrade-Tools das originale Datenverzeichnis. Eine Rückkehr zur alten Version kann sich hierbei unter Umständen schwieriger gestalten und bedarf in jedem Fall eines Restores. Auf der anderen Seite dauert ein Outplace-Upgrade in der Regel deutlich länger.

Die Ausgangssituation

Die Sakila-Datenbank ist auf unserem MySQL-Server 5.7.29 bereits installiert. Das Datenverzeichnis liegt wie bei einer standardmäßigen Installation (siehe Artikel MySQL unter Windows Teil 1) unter C:\ProgramData\MySQL\MySQL Server 5.7\Data\, die eigentlichen Binaries entsprechend unter C:\ProgramFiles\MySQL\MySQL Server 5.7\.

Durchführung des Inplace-Upgrades

Ich entscheide mich heute für ein Inplace-Upgrade, fahre den Server runter und stelle sicher, dass der alte MySQL-Server beendet ist. Dafür können wir sowohl die Kommandozeile als auch die Windows-Dienste nutzen:

Anschließend stellen wir die neue Software mit Hilfe eines ZIP-Archives, anstelle des MySQL-Installers (siehe auch hierzu Artikel MySQL unter Windows Teil 1), zur Verfügung.

Die entpackte Software legen wir unter C:\Program Files\MySQL\mysql-8.0.19-winx64 ab und kopieren die ursprüngliche my.ini-Datei aus C:\Program Files\MySQL\MySQL Server 5.7\my.ini  in das neue Verzeichnis. In dieser neuen Kopie muss nun noch das Installationsverzeichnis (basedir) auf den neuen Pfad referenzieren:
basedir=:C\Program Files\MySQL\mysql-8.0.19-winx64

In unserem Fall setzen wir noch zusätzlich das Datenbankverzeichnis (datadir) um, da dieses aktuell die alte Version im Pfad beinhaltet:
datadir=C:\ProgramData\MySQL\MySQL 

Für das Datenbankverzeichnis empfiehlt sich bei diesem Schritt dann ein Pfad unabhängig von der Versionsnummer. Parallel hierzu wird das ursprüngliche Datenbankverzeichnis mit OS-Mitteln umbenannt, bevor der neue MySQL-Server mit einem Aufruf des mysqld-Binary gestartet werden kann:

Siehe da: Ein Auto-Upgrade

Durch die Option --console sehen wir zusätzliche Ausgaben beim Starten des Servers und können an dieser Stelle bei genauer Betrachtung feststellen, dass unsere MySQL-Datenbank durch den Start bereits upgegradet wurde:

Dies ist ein Feature seit Version 8.0.16, mit dem Oracle sogar die Ausführung von mysql_upgrade durch den DBA automatisiert hat (https://dev.mysql.com/downloads/mysql/).

In diesem Falle wurde sowohl das Data Dictionary (Performance-, Informations- und Teile des MySQL-Schemas) sowie die Systemtabellen, das SYS- und die Benutzer-Schemata aktualisiert. Soll ein solches Auto-Upgrade nicht beim Start des Servers durchgeführt werden, so muss die Option --upgrade=NONE übergeben werden. Zusätzlich gibt es die Möglichkeiten, mit --upgrade=MINIMAL nur das Data Dictionary, Performance- und Information-Schema upgraden zu lassen. Die Benutzer-Schemata bleiben in diesem Falle unberührt. 

Wir haben die Sakila-Datenbank nun durch die Bereitstellung einer neuen Software Inplace upgegradet und können wieder auf die Daten zugreifen:

Service, bitte!

Zum Schluss empfehle ich noch die Konfiguration eines entsprechenden Windows-Dienstes zum Starten und Stoppen des Servers. Da wir in diesem Fall die Software via ZIP-Archive zur Verfügung gestellt und nicht den MySQL-Installer verwendet haben, muss dieser Dienst noch nachträglich eingerichtet werden.

Hierzu muss der MySQL Server zunächst gestoppt werden und anschließend zwingend ein Kommandozeilenfenster als Administrator geöffnet werden.

Aus diesem Fenster heraus kann mysqld mit der Option --install aufgerufen werden:Anschließend kann der Dienst wie gewohnt gestartet und gestoppt werden:Zu guter Letzt sollte der alte Windows-Dienst entfernt bzw. deaktiviert werden:
Kommentare hinterlassen