MySQL 8.0.16 - Upgrade im Automatik-Modus

zahnrad-1

Seit einiger Zeit sind In-Place Updates (also der Austausch von Binaries an Ort und Stelle) bei MySQL möglich. Der Prozess zum Upgrade bestand dabei schon immer nur aus wenigen Schritten und war recht einfach gehalten:

  1. Backup des Systems (ok, gehört nicht zum Update-Prozess, ist aber dennoch eine gute Idee ;-)
  2. Runterfahren des „alten" Servers
  3. Austausch der Binaries
  4. Starten des Servers
  5. Start des mysql_upgrade Kommandos / Clients
  6. Durchstarten des Servers und Freigabe für den Betrieb

In der Regel war diese Aufgabe in wenigen Minuten erledigt. Mit der Version 8.0.16 wurde dieser Prozess weiter vereinfacht. Ab sofort muss das System nur noch gestoppt, die Binaries getauscht und der Server wieder gestartet werden:

  1. Backup des Systems
  2. Runterfahren des „alten" Servers
  3. Austausch der Binaries
  4. Starten des Servers

Im unten dokumentierten Fall wurde eine MySQL-Datenbank der Version 5.7.20 gestoppt und das MySQL_HOME auf Binaries der Version 8.0.16 gelegt. Dann wurde der Server wieder gestartet:

2019-07-05T07:34:14.585984Z mysqld_safe Starting mysqld daemon with databases from /mysql/db01 2019-07-05T07:34:15.268944Z 0 [System] [MY-010116] [Server] /opt/mysql/mysql-8.0.16/bin/mysqld (mysqld 8.0.16) starting as process 16493 2019-07-05T07:34:15.311690Z 1 [System] [MY-011012] [Server] Starting upgrade of data directory.

2019-07-05T07:34:23.771280Z 2 [System] [MY-011003] [Server] Finished populating Data Dictionary tables with data.

2019-07-05T07:34:26.397207Z 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80016' started.

2019-07-05T07:34:41.605527Z 5 [System] [MY-013381] [Server] Server upgrade from '50700' to '80016' completed.

2019-07-05T07:34:43.550813Z 0 [System] [MY-010931] [Server] /opt/mysql/mysql-8.0.16/bin/mysqld: ready for connections. Version: '8.0.16'socket: '/tmp/mysql'port: 3306MySQL Community Server - GPL.

Im Bedarfsfall kann dieser Prozess aber auch manuell gesteuert werden. Für diesen Zweck wurde ein neuer Parameter eingeführt:

mysqld --upgrade (NONE | AUTO | MINIMAL | FORCE)

Im Normalfall (Default) ist der Wert „AUTO" aktiv. Mittels der Einstellung „MINIMAL" kann das alte Verhalten reproduziert werden und man muss den alten Upgrade-Prozess (siehe oben Schritt 01 - 06) manuell durchführen inkl. der Nutzung des „mysql_upgrade" Kommandos.

Vor jedem Upgrade sollte natürlich geprüft werden, ob ein direktes Upgrade auf die neue Version (in diesem Fall 8.0.16) In-Place möglich ist. Informationen zu den Upgrade-Pfaden befinden sich natürlich in der jeweils gültigen Dokumentation: https://dev.mysql.com/doc/refman/8.0/en/upgrading.html

Zusätzlich kann die MySQL-Shell („util"-Objekt) genutzt werden, um zu prüfen, ob ein direktes Upgrade auf die gewünschte Version funktioniert. Im folgenden Beispiel wird versucht, eine MySQL DB der Version 5.6.38 direkt nach 8.0.16 zu migrieren:

MySQLJS > \c root:@localhost:3306

Creating a session to 'root@localhost:3306' Fetching schema names for autocompletion... Press ^C to stop.

Your MySQL connection id is 6

Server version: 5.6.38-log MySQL Community Server (GPL) No default schema selected; type \use <schema> to set one.

MySQLlocalhost:3306JS > util.checkForServerUpgrade() The MySQL server at localhost:3306 will now be checked for compatibility issues for upgrade to MySQL 8.0...

MySQL version: 5.6.38-log - MySQL Community Server (GPL)

Util.checkForServerUpgrade: Upgrades to MySQL 8.0 requires the target server to be on version 5.7 (LogicError)

Ein direkter Upgrade ist in diesem Beispiel nicht möglich. Zunächst müsste hier ein GA-Release der Version 5.7 als Zwischenschritt installiert werden. Mit der neuen Version 8.0.16 werden Upgrades bei MySQL noch unkomplizierter. 

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/