Upgrade von Reihe 6

  • Moin Zusammen,


    nutze auf allen Servern die Reihen 6. Nun brauche ich für gewisse Anwendungen min. MySQL 8. Auf welche Reihe ist es sinnvoll zu upgraden (eure Erfahrungen wären hier gut!).

    Laut SE-Update sind ja die Reihen 8 und 9 noch experimentell. Nutzt ihr diese produktiv?

    Reihe 7 macht für mich keinen Sinn, da ja MariaDB 10.2 bereits kurz vor EOL steht und ich mir dann mit den Upgrades evtl. doppelte Arbeit mache!


    Viele Grüße

  • Also ich nutze Reihe 4 und 6 und werde vorerst wohl auch nicht updaten. Denn beide laufen stabil und ohne Probleme. Wenn Du jetzt MySQL 8 brauchst dann würde ich auf Reihe 8 gehen, die lauft bei mir zum Testen schon länger und scheint stabil zu sein. Ich würde es aber trotzdem besser vorher mal testen mit Deiner Anwendung.

  • Ich habe kürzlich das Upgrade von Reihe 6 auf 8 gemacht. Benutzt habe ich dazu das Skript


    http://download.pd-admin.de/mysql_upgrade.sh


    Es gab dabei nur ein paar Fallstricke.


    In meiner my.cnf war query cache konfiguriert. Dies ist in MySQL 8 entfernt worden. Durch die enthaltenen Zeilen startete der MySQL Dienst nicht, was wiederum das Skript bzw. SE Update abbrach. Nachdem das behoben war, habe ich die letzten Schritte manuell ausgeführt.


    Dann wurden die Passwörter der DB Nutzer nicht richtig gesetzt. Es war kein Login möglich. Auch hier hatte ich nachgebessert und einmal bei allen Nutzern die Passwörter neu gesetzt.


    Letztlich wurden roundcubemail und phpmyadmin bei mir noch mit PHP 7.3 ausgeführt. PHP 7.3 hat Probleme mit caching_sha2_password. Nach Umstellung auf 7.4 war alles ok.


    Abgesehen davon läuft alles andere absolut problemlos.

  • Habe soeben das Upgrade auf Reihe 8 einmal via den beiden Dateien "mysql_privileges.pl" und "dump_databases_for_upgrade.sh" manuell versucht und einmal automatisiert via dem Skript "mysql_upgrade.sh", welches ja letztendlich beide oben genannten Dateien nutzt!


    Generell funktioniert das Upgrade bis zu einem bestimmten Punkt (ausgenommen spezifische Variablen, die in der my.cnf gesetzt worden sind, welche dann den Server nicht starten, müssen vorher entfernt werden):


    Der neue MySQL-Server startet, jedoch kann das alte root-Passwort nicht mehr so in neueren MySQL-Versionen gesetzt werden:


    MPW=$(cat /opt/pdadmin/etc/mysql_rootpw.conf)

    /usr/local/pd-admin2/bin/mysql -e "set password for root@localhost=password('$MPW');"


    Hier muss dann mit "ALTER USER" das Passwort gesetzt werden, was dann auch schließlich klappt!

    Gescheitert ist aber letztendlich das Upgrade, da das Skript "mysql_privileges.pl" nicht mit MySQL 8 kompatibel zu sein scheint. Beim Import der zuvor exportierten Dateien gibt es folgende Fehlermeldungen beim Import:


    Use of uninitialized value $exists in concatenation (.) or string at /root/mysql_privileges.pl line 121.

    vadmin localhost --

    -- create user 'vadmin'@'localhost' identified by 'fhajfh493^F*Yhvndkk-3i' --

    -- update mysql.user set Password=? where user=? and host=? --

    DBD::mysql::st execute failed: Unknown column 'Password' in 'field list' at /root/mysql_privileges.pl line 49.


    Daher ist mein Upgrade bisher an diesem Punkt gescheitert! Gibt es hier evtl. eine aktualisierte Version der Datei "mysql_privileges.pl" oder ne Idee?

    Denke du hattest das gleiche Problem (kein Login im DB-Server, fehlende Passwörter...), da das Skript nicht korrekt importiert hat!

  • Ich betreibe seit mehreren Monaten die Reihe 8 auf einem meiner Server und kann sagen:
    - Sie läuft soweit stabil

    - Die Datenbank-Performance ist mit herkömmlichen Festplatten wesentlich schlechter als mit MySQL 5.5
    (MySQL 8 ist wohl sehr stark auf SSDs optimiert

    -> Teilweise Abhilfe: innodb_buffer_pool_size sowie innodb_buffer_pool_instances so anpassen, das mher Arbeitsspeicher verwendet wird
    -> Update und Inserts sind trotzdem immer noch deutlich langsamer als mit MySQL 5.5)


    Muss man sich also seinen Use Case genau anschauen


    Zum Thema Update wurde ja schon in anderen Forenbeiträgen aufgezeigt, das man erst alle Datenbanken exportieren muss, um sie dann in einer neuen Installation wieder zu importieren. Die dafür von Daniel Bradler bereitgestellten Skripte haben bei mir soweit einwandfrei funktioniert.

  • MPW=$(cat /opt/pdadmin/etc/mysql_rootpw.conf)

    /usr/local/pd-admin2/bin/mysql -e "set password for root@localhost=password('$MPW');"


    Hier muss dann mit "ALTER USER" das Passwort gesetzt werden, was dann auch schließlich klappt!

    Das stimmt so nicht. SET PASSWORD kann bei MySQL 8 verwendet werden. Die Empfehlung lautet aber ALTER USER zu verwenden.

    Bei der MySQL 5.7 Dokumentation wird angeführt, dass SET PASSWORD mit =PASSWORD('auth_string') in MySQL 8.0 entfernt wird und dann nicht mehr zulässig ist. Dies ist so auch im Manual für MySQL 8.0 angegeben und erklärt dann auch den Fehler. Die Zeile ist für ein Upgrade auf MySQL 5.7 geeignet, nicht aber für ein Upgrade auf MySQL 8.0. Daraus resultieren dann auch Folgefehler... Dies fiel bei mir nicht auf, da eben der Dienst nicht richtig startete und ich danach alle weiteren Schritte händisch gemacht hatte.


    Use of uninitialized value $exists in concatenation (.) or string at /root/mysql_privileges.pl line 121.

    vadmin localhost --

    -- create user 'vadmin'@'localhost' identified by 'fhajfh493^F*Yhvndkk-3i' --

    -- update mysql.user set Password=? where user=? and host=? --

    DBD::mysql::st execute failed: Unknown column 'Password' in 'field list' at /root/mysql_privileges.pl line 49.

    Schaut man sich einmal MySQL 8 an, gibt es in der mysql.user Tabelle keine Spalte mit Password mehr. Diese lautet nun authentication_string, was dann auch die Fehlermeldung erklärt :)


    Es scheinen mir eher kleine Anpassungen notwendig, um ein automatisiertes Upgrade auf MySQL 8.0 durchführen zu können. Im Zweifelsfall sollten manuelle Schritte (wie hier) aber auch gehen.

  • Super! Habe eine ähnliche Änderung des Skripts temporär auch bei mir vorgenommen, dann hat der Import hier soweit funktioniert!


    Hast recht, hatte da nicht im Detail nachgeschaut. Habe es im Anschluss des SE-Upgrades auch mit "set password for root@localhost='$MPW';" gemacht, damit hat es dann auch funktioniert!


    Habe es nun auch soweit am laufen. Kurz zusammengefasst mein Feedback dazu.


    Problem war, dass MySQL 5.7 mit "mysql_native_password" arbeitet und Version 8 mit "caching_sha2_password". Somit funktionieren die importierten Passwörter aus der "mysql_privileges.pl" nicht. Eine Möglichkeit ist die default_authentication wieder auf "mysql_native_password" global zu setzen oder dieses entsprechend per user in der Datenbank.

    Habe mich für die neue Standard-Authentifizierung entschieden, musste aber entsprechend alle Passwörter der MySQL-Benutzer neu setzen (Benutzer waren durch das Perl-Skript ja bereits angelegt).

    Wichtig noch: Habe den root-Benutzer aus dem erstellten Export "mysql_user.yaml" vor dem Reimport entfernt, sonst wird beim Import dieser wieder überschrieben mit dem Hash aus 5.7 und es ist danach kein Login mehr in den MySQL-Server möglich.


    phpMyAdmin und Roundcubemail funktionierten nach dem Update auch nicht mehr (selbst auf einer aktuellen PHP-Version). Hier war in der .htaccess im Root-Verzeichnis noch ein SetEnv "PHP5_VERSION 7.3.99" gesetzt. Nach Aktualisierung hier aber alles Tiptop!


    Ansonsten konnte ich bisher keine gravierenden Fehler feststellen. Was mir aufgefallen ist, dass via PMA bei einem SQL-Benutzer keine globalen Rechte gesetzt werden können. PMA schmeißt hier dann einen SQL-Fehler. Aber dafür gibts ja zum Glück noch die CMD!