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
Durchführung des Inplace-Upgrades
cmd> net stop mysql.service
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:
C:\Program Files\MySQL\mysql-8.0.19-winx64\bin>mysqld --console 2020-04-14T13:41:09.936877Z 0 [System] [MY-010116] [Server] C:\Program Files\MySQL\mysql-8.0.19-winx64\bin\mysqld.exe (mysqld 8.0.19) starting as process 4040 2020-04-14T13:41:13.117471Z 4 [System] [MY-013381] [Server] Server upgrade from '50700' to '80019' started. 2020-04-14T13:41:27.409577Z 4 [System] [MY-013381] [Server] Server upgrade from '50700' to '80019' completed. 2020-04-14T13:41:28.032553Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. 2020-04-14T13:41:28.226074Z 0 [System] [MY-010931] [Server] C:\Program Files\MySQL\mysql-8.0.19-winx64\bin\mysqld.exe: ready for connections. Version: '8.0.19' socket: '' port: 3306 MySQL Community Server - GPL. 2020-04-14T13:41:28.383479Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060
Siehe da: Ein Auto-Upgrade
2020-04-14T13:41:13.117471Z 4 [System] [MY-013381] [Server] Server upgrade from '50700' to '80019' started. 2020-04-14T13:41:27.409577Z 4 [System] [MY-013381] [Server] Server upgrade from '50700' to '80019' completed.
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:
mysql> select * from film where film_id = 1\G *************************** 1. row *************************** film_id: 1 title: ACADEMY DINOSAUR description: A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies release_year: 2006 language_id: 1 original_language_id: NULL rental_duration: 6 rental_rate: 0.99 length: 86 replacement_cost: 20.99 rating: PG special_features: Deleted Scenes,Behind the Scenes last_update: 2006-02-15 05:03:42 1 row in set (0.00 sec)
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.
C:\Program Files\MySQL\mysql-8.0.19-winx64\bin>mysqld --install Service successfully installed.
Sie haben Interesse an einer Weiterbildung oder Fragen zum Thema MySQL? Sprechen Sie uns an oder besuchen Sie einen unserer Kurse aus unserem Seminarshop:
Zu unseren MySQL Seminaren
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare