Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

MariaDB von 10.4 auf 10.5 updaten

MariaDB v10.5 Datenbankserver starten

Der Saal wurde gemietet und das Orchester bestellt. Wird Zeit herauszufinden, ob wir auch tanzen können…

Starten wir unseren neuen Datenbank-Server:

docker-compose -f ~/docker/maria105master/docker-compose.yml up -d

Die Datenbank kommt hoch.

Überprüfen wir, ob sie auch wirklich vernünftig läuft:

docker ps -a

mariadb:10.5  "docker-entrypoint.s…"   24 seconds ago        Up 24 seconds  127.0.0.1:3306->3306/tcp  mariadb

So oder so ähnlich sollte die Ausgabe aussehen. Wichtig ist die Version „10.5“ und der Status „Up“.

Kontrollieren wir noch das Log:

docker logs -f --tail="50" mariadb

2020-07-11 13:00:40+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.5.4+maria~focal started.
2020-07-11 13:00:41+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2020-07-11 13:00:41+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.5.4+maria~focal started.
2020-07-11 13:00:41 0 [Note] mysqld (mysqld 10.5.4-MariaDB-1:10.5.4+maria~focal) starting as process 1 ...
2020-07-11 13:00:41 0 [Note] InnoDB: Using Linux native AIO
2020-07-11 13:00:41 0 [Note] InnoDB: Uses event mutexes
2020-07-11 13:00:41 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2020-07-11 13:00:41 0 [Note] InnoDB: Number of pools: 1
2020-07-11 13:00:41 0 [Note] InnoDB: Using SSE4.2 crc32 instructions
2020-07-11 13:00:41 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)
2020-07-11 13:00:41 0 [Note] InnoDB: Initializing buffer pool, total size = 134217728, chunk size = 134217728
2020-07-11 13:00:41 0 [Note] InnoDB: Completed initialization of buffer pool
2020-07-11 13:00:41 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2020-07-11 13:00:42 0 [Note] InnoDB: 128 rollback segments are active.
2020-07-11 13:00:42 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2020-07-11 13:00:42 0 [Note] InnoDB: Setting file './ibtmp1' size to 12 MB. Physically writing the file full; Please wait ...
2020-07-11 13:00:42 0 [Note] InnoDB: File './ibtmp1' size is now 12 MB.
2020-07-11 13:00:42 0 [Note] InnoDB: 10.5.4 started; log sequence number 1876490264; transaction id 4125097
2020-07-11 13:00:42 0 [Note] Plugin 'FEEDBACK' is disabled.
2020-07-11 13:00:42 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2020-07-11 13:00:42 0 [Note] Server socket created on IP: '::'.
2020-07-11 13:00:42 0 [Warning] 'proxies_priv' entry '@% root@eeb03b4e749b' ignored in --skip-name-resolve mode.
2020-07-11 13:00:42 0 [Note] Reading of all Master_info entries succeeded
2020-07-11 13:00:42 0 [Note] Added new Master_info '' to hash table
2020-07-11 13:00:42 0 [Note] mysqld: ready for connections.
Version: '10.5.4-MariaDB-1:10.5.4+maria~focal'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution
2020-07-11 13:00:42 0 [Note] InnoDB: Buffer pool(s) load completed at 200711 13:00:42

Sieht so weit alles gut aus. Die neue Datenbank ist startklar…

In den Container unserer MariaDB v10.5 teleportieren und dort das „mysql_update“ Script laufen lassen

Bitte nicht gleich wieder die Dienste starten, sondern erst die Datenbanken an die neue Version anpassen… Das *kann* Probleme machen, wenn wir diesen Schritt überspringen.

Die Macher von MariaDB empfehlen, bei einem Versionswechsel *immer* ein Update-Script über alle Datenbanken laufen zu lassen, welches Protokolländerungen und sonstige Neuerungen in die „alten“ Datensätze einpflegt.

Damals beim Upgrade von 10.3 auf 10.4 hat das Log sogar gemeint, dass ein paar Tabellen nicht mehr den aktuellen Gepflogenheiten entsprechen. Bei 10.4 auf 10.5 ist mir das nicht aufgefallen, da scheint das ohne größere Änderungen abgegangen zu sein…

Zur Referenz: https://mariadb.com/kb/en/upgrading-from-mariadb-104-to-mariadb-105/

Und genau das machen wir jetzt, indem wir uns in den „mariadb“-Container teleportieren, dort das Script ausführen und nach erfolgreichem Durchlauf diesen Container mit „exit“ wieder verlassen:

docker exec -it mariadb /bin/bash

mysql_upgrade --password
### Das root-Passwort von MariaDB eingeben...

Phase 1/7: Checking and upgrading mysql database
Processing databases
mysql
mysql.column_stats                                 OK
mysql.columns_priv                                 OK
<...>
Phase 2/7: Installing used storage engines... Skipped
Phase 3/7: Fixing views
mysql.user                                         OK
Phase 4/7: Running 'mysql_fix_privilege_tables'
Phase 5/7: Fixing table and database names
Phase 6/7: Checking and upgrading tables
Processing databases
<...>
Phase 7/7: Running 'FLUSH PRIVILEGES'
OK

exit

Das Script hat bei mir nur ein paar Sekunden benötigt. Gut, auf dem Testserver liegen auch nicht so viel Daten…

Und damit haben wir unsere Datenbank-Dateien im Verzeichnis „/var/maria105masterdata“ protokollgemäß auf die neue Version von MariaDB v10.5 angepasst und können nun unsere Dienste wieder „sicher“ darauf zugreifen lassen.

Anzeige *

2 Kommentare zu „MariaDB von 10.4 auf 10.5 updaten“

  1. Guten Abend Peter,
    ich hoffe wir hören von Dir – gerade in der Coronazeit – ein wenig.

    FYI: Ich habe jetzt Traefik 2.3 in einem Step hochgezogen, ohne Probleme. Wichtig: alles genau lesen!

    Bei Deinem Datenbank Update ist mir folgendes schon aufgefallen, wo Du ursprünglich die Datenbank in Version 10.4 installiert hast. Die Versionsnummern sind bei Dir hart verdrahtet. Ich habe da eine Idee, die eigentlich gehen könnte.

    Du installierst alles z.B. nach ~/docker/maria104master
    Danach machst Du aber einen Symlink: ln -s ~/docker/maria104master ~/docker/mariadbmaster
    In den ganzen YAML Dateien gibst Du dann immer diesen Pfad an: ~/docker/mariadbmaster

    Wenn dann das Update auf die 105 kommt, brauchst Du nur den Symlink einmal löschen und mit dem neuen Pfad erzeugen lassen. Die ganzen YAML Config Datei bleiben unberührt. (Soweit die Theorie)

    Noch eine Frage: Kann man das Datenbank Update nicht auch direkt vom Host laufen lassen. Da ist doch der neue Client auch installiert?

    1. Was die wenigsten wissen, dass ich im „Haupterwerb“ eine Cocktailbar betreibe. Und die fällt mir zu Corona-Zeiten mächtig auf die Füße und ich muss ackern wie ein Besessener, um das Ding im Leerlauf halten zu können. Ich komm momentan auf eine 70 – 80 Stunden Woche. Selbst und Ständig… Daher hab ich während Corona leider so gut wie gar keine Zeit, nebenbei mit dem Stack zu spielen.

      Der Symlink ist eine gute Idee, das muss ich auf dem Testserver einfach ausprobieren.
      Alternativ hab ich mir die Variablen in der docker-compose.yml genauer angesehen. Da könnte was gehen. Aber das Setup, das ich will, ist natürlich wieder behaftet mit diversen Workarounds und anderen Schikanen :/
      https://docs.docker.com/compose/environment-variables/
      Aber wenigstens die ständige Neubenennung der Router von Traefik kann man damit elegant lösen…

      Du hast recht: Das könnte man auch über den Host machen. Haha, da war ich schon so drin, dass ich komplett vergessen hab, dass ich mich damals auch aus genau dem Grund für eine „Zentraldatenbank“ entschieden hab. Silly me…
      Andererseits hat das Werkeln direkt im Container nicht geschadet. Da war ich dann schon einigermaßen fit, als das bei Nextcloud spruchreif geworden ist.

      Aber ich seh schon: Es ist noch viel zu tun ;)

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top