Aktualisierung interne MariaDB 5.5.57 auf MariaDB 10.4.x mit Entware-std

  • Liebe Community,


    für alle, die gern die interne MariaDB-Version 5.5.57 auf eine aktuelle 10.4.x anheben möchten, ohne Container zu installieren, hier ein Vorschlag:


    Voraussetzung: Entware-Std ist installiert. Dieses gibt es unter


    https://github.com/Entware/Entware/wiki/Install-on-QNAP-NAS


    Nach Installation des Paketes kann über SSH mit folgendem Befehl der aktuelle MariaDB10.4.x-Server und -Client installiert werden:


    Code
    opkg install mariadb-server-extra mariadb-client-extra nano

    Nach der Installation mit

    Code
    cd /opt/etc/mysql/conf.d/

    in das Konfigurationsverzeichnis wechseln.


    Nun die Konfiguration bearbeiten:


    Code
    nano 50-server.cnf

    Damit der MariaDB10.4.x-Server als Ersatz für den internen MariaDB-Server genutzt werden kann, müssen folgende Einträge angepasst werden:


    In meinem Beispiel habe ich einen separaten Ordner "databases" für die Datenbankfiles in der Systemsteuerung des NAS angelegt. Somit ist auch eine Sicherung der Datenbankdateien einfacher möglich.


    Sollte der Server nicht nur von "localhost" (127.0.0.1) erreichbar sein, so muss die folgende Zeile in der Konfiguration mit einem "#" auskommentiert werden:

    Code
    #bind-address = 127.0.0.1 


    Nun müssen ggf. noch die unter dem bisherigen SQL-Server genutzten Datenbanken gesichert werden. Hierzu folgenden Befehl ausführen:


    Code
    /usr/local/mariadb/bin/mysql -u root -p

    Das Passwort entspricht dem bei der Einrichtung des SQL-Servers über die Systemsteuerung vergebenen Passwort.


    Im SQL-Server können nun mit folgendem Befehl die genutzten Datenbanken abgefragt werden:


    Code
    SHOW DATABASES;

    Gesichert werden muss neben den eigentlichen Nutzerdatenbanken auch die Datenbank "mysql", die die Einstellungen und Nutzer beinhaltet.


    Die Sicherung kann z.B. mit folgendem Befehl in das Verzeichnis /share/Public erfolgen:


    Code
    /usr/local/mariadb/bin/mysqldump --single-transaction -h localhost -u root -p DATENBANKNAME >/share/Public/DATENBANKNAME.sql

    Nachdem alle Datenbanken gesichert sind, muss der eingebaute SQL-Server über die Systemsteuerung --> Anwendungen --> SQL-Server abgeschaltet werden.


    Nachdem der eingebaute SQL-Server nicht mehr läuft, kann der neue MariaDB10.4.x-Server gestartet werden:


    Code
    mysql_install_db --force
    /opt/etc/init.d/S70mysqld restart

    Nun muss als erstes die mysql-DB wieder importiert werden, damit die User-Einstellungen übernommen werden:

    Code
    mysql -h localhost -u admin -p       #ACHTUNG: hier noch ein leeres Passwort verwenden
    DROP DATABASE mysql;
    CREATE DATABASE mysql;
    quit
    mysql -h localhost -u admin -p mysql </share/Public/mysql.sql

    Ab hier gilt nun wieder das ursprüngliche Passwort für den "root"-Nutzer, welches beim internen SQL-Server vergeben war.


    Jetzt nur noch die Nutzerdatenbanken, die gemäß oben beschriebenem Vorgehen in /share/Public gesichert wurden, wieder einspielen:


    Code
    mysql -h localhost -u root -p -e "CREATE DATABASE DATENBANKNAME" 
    mysql -h localhost -u root -p DATENBANKNAME </share/Public/DATENBANKNAME.sql

    FERTIG!

    Die Konfiguration ist Reboot-fest, so dass ab sofort auch nach einem Reboot der MariaDB10.4.x-Server genutzt wird.


    Eine (regelmäßige) Aktualisierung kann mit folgenden Befehlen durchgeführt werden:


    Code
    opkg update
    opkg upgrade

    Empfehlenswert ist es, den Order mit den Datenbankdateien in das regelmäßige Backup einzubinden. Für noch mehr Sicherheit sollte ein Cron-Job angelegt werden, der regelmäßig mit folgendem Befehl die einzelnen Datenbanken sichert:


    Code
    mysqldump --single-transaction -h localhost -u root -p DATENBANKNAME> /share/Public/DATENBANKNAME.sql

    ...wobei natürlich der Pfad /share/Public/DATENBANKNAME.sql individuell angepasst werden sollte.

  • Das kann ich aufgrund der geringen Datenbanklast nicht beantworten. Allerdings ist die CPU-Auslastung bei Datenbankoperationen deutlich geringer. Und es wird eine Version eingesetzt, die noch im Support ist, was eine deutlich höhere Sicherheit bedeutet.


    NACHTRAG:

    Die Geschwindigkeit ist deutlich höher - meine Digikam-Installation mit MySQL-DB läuft deutlich flüssiger.

    Einmal editiert, zuletzt von lhsei ()

  • Code
    /usr/local/mariadb/bin/mysqldump --single-transaction -h localhost -u root -p DATENBANKNAME >/share/Public/DATENBANKNAME.sql

    Ich habe versucht, auf diese Weise meine Datenbanken zu sichern, scheitere aber kläglich.


    Ich habe mir mit "SHOW DATABASES;" meine Datenbanken anzeigen lassen. Zuerst habe ich versucht, die Datenbank "Baikal" zu sichern.

    Wenn ich den Befehl händisch eintippe, überschreibt sich die Befehlskette.

    Wenn ich oben zitierten Befehl kopiere, einfüge und DATENBANKNAME durch Baikal zu ersetzen, passiert gar nichts:


    /usr/local/mariadb/bin/mysqldump --single-transaction -h localhost -u root -p Baikal >/share/Public/Baikal.sql


    In Public taucht keinerlei neue Datei auf. Was mache ich falsch? Ich nutze WinSCP 5.17.10 und Putty (neueste Version).

  • Hallo,


    das mysqldump muss außerhalb von MariaDB aufgerufen werden. Dazu muss man MariaDB nach dem SHOW DATABASES; mit dem Befehl quit verlassen.


    Der Befehl mysqldump erwartet nach dem Start noch die Eingabe des Root-Passwortes des SQL-Servers.


    Falls etwas nicht klappt, einfach noch mal melden - ich helfe gern!

    Einmal editiert, zuletzt von lhsei ()

  • Falls etwas nicht klappt, einfach noch mal melden - ich helfe gern!

    Vielen Dank für das Angebot - das mit der Sicherung hat zunächst geklappt.

    Brauche ich alle Datenbanken? Ich habe:

    Baikal

    Nextcloud

    Owncloud

    data

    mysql

    performance_schema

    phpmyadmin


    Dann schreibst Du , daß die nano 50-server.cnf editiert werden muß:

    Code
    [client]
    socket          = /tmp/mysql.sock
    port            = 3306

    Die Abteilung [client] füge ich ganz am Anfang an, da die noch nicht in der conf-Datei existiert?

  • Hallo,


    die Datenbank performance_schema wird nicht benötigt, alle anderen meiner Meinung nach schon.


    Die Client-Section kommt an den Anfang der Datei, das ist korrekt.

  • Ok - soweit alles verstanden. Ist es möglich, auch wieder zum nativen Server zurückzuwechseln? Falls ja, wie wäre die Vorgehensweise?

    Ich verstehe es doch richtig, daß theoretisch beide MariaDB-Server vorhanden sind?

    Greift myphpadmin auch auf den neuen Server zu oder muß da auch noch was angepaßt werden?


    Ich als Laie versuche nur, das ganze Vorgehen und die Zusammenhänge zu verstehen - z.B. an welcher Stelle wird die neue Datenbank genutzt, wenn der alte Server deaktiviert wird.

    Oder was würde passieren, wenn er nicht deaktiviert wird - laufen dann beide Datenbanken?

    Woher "weiß" das NAS, daß jetzt der neue Server zu nutzen ist? Wo erfolgt dessen Aufruf?

    Sorry für die ganzen Fragen.

  • Hallo,


    ich versuche mal ein bisschen Licht ins Dunkel zu bringen:


    Der Wechsel zwischen externem MariaDB-Server und internem Server ist einfach. Es muss nur der externe Server beendet werden mit


    Code
    /opt/etc/init.d/S70mysqld stop

    Danach kann der interne Server über die Weboberfläche des NAS wieder aktiviert werden. Aber ACHTUNG: Natürlich müssten dann vorher die Datenbanken zurückgespielt werden - ansonsten arbeitet der interne Server mit dem Stand der Datenbanken vor der Abschaltung des internen Servers.


    In der von mir geposteten Konfiguration ersetzt der externe Server den internen Server lückenlos. Anwendungsprogramme (z.B. phpMyAdmin) erkennen keinen Unterschied, da der externe Server auf dem gleichen Port (TCP 3306) und dem gleichen Socket /tmp/mysql.sock lauscht. Damit muss keine Anwendung umkonfiguriert werden. Theoretisch ist es auch möglich, beide SQL-Server parallel zu betreiben - dazu muss nur in der 50-server.cnf der Port und der Socket geändert werden. Dann muss aber in jeder Anwendung der Server manuell konfiguriert werden. Außerdem belasten dann beide Server die CPU des NAS und meine Lösung war ja gerade dazu gedacht, den alten nicht mehr supporteten SQL-Server durch einen aktuellen sicheren Server zu ersetzen.


    Zum Thema myPhpAdmin kann ich auch nur empfehlen, das aktuelle Package von Github herunterzuladen und zu installieren. Dazu einfach das Zip-Package im Web-Ordner des NAS installieren.


    Und GANZ WICHTIG: Falls das NAS von extern erreichbar ist, sollte auf jeden Fall im phpMyAdmin-Verzeichnis eine .htaccess-Datei mit folgendem Inhalt erstellt werden, damit nur von intern zugegriffen werden kann:


    Code
    deny from all
    allow from 192.168.x.

    wobei das 192.168.x. durch Dein internes Netz ersetzt werden muss.

  • wobei das 192.168.x. durch Dein internes Netz ersetzt werden muss.

    Heißt das dann 192.168.1.0 für das ganze Netz?

  • Einen Befehl wie z.B.

    Code
    sudo -u httpdusr /mnt/ext/opt/apache/bin/php /share/CACHEDEV1_DATA/.qpkg/NextCloud/nextcloud/occ db:add-missing-indices

    kann/muß ich aber weiterhin genau so nutzen, oder?

  • Hallo,

    wenn ich


    Code
    mysql_install_db --force
    /opt/etc/init.d/S70mysqld restart

    eingebe, erhalte ich die Meldung:


    Code
    cat: /opt/var/run/mysqld/mysqld.pid: No such file or directory


    Der einzige Unterschied zu Deiner Config: Ich wollte die Datenbanken nicht nach "databases" sondern nach "/Public/Neue_Datenbanken" schreiben


    datadir = /share/Public/Neue_Datenbanken


    Hier meine conf-Datei:



    Darf die Conf-Datei nur die von Dir genannten Zeilen enthalten oder kann ich einfach die [client]-Section einfügen und die [mysqld}-Section anpassen und den Rest stehen lassen?


    Kann das mit den Bezeichnungen mysql und mysqld zu tun haben?

    Ich habe jetzt mehrfach Entware deinstalliert und wieder von neuem begonnen - auch mit diversen Datenbank-Ordnern.

    Ich komme einfach nicht weiter - immer bekomme ich die Meldung wie oben beschrieben :(

    4 Mal editiert, zuletzt von WeT-Klb ()

  • Hier noch mal meine 50-server.conf:


  • Ok - bin schon weiter...

    1. Die Fehlermeldung

    Code
    cat: /opt/var/run/mysqld/mysqld.pid: No such file or directory

    kommt nur beim 1. Mal. Ich vermute, der Fehler kommt wegen "restart", obwohl der Server noch gar nicht gestartet wurde


    2. Die Befehle

    Code
    mysql -h localhost -u admin -p       #ACHTUNG: hier noch ein leeres Passwort verwenden
    DROP DATABASE mysql;										
    CREATE DATABASE mysql;										
    quit										
    mysql -h localhost -u admin -p mysql </share/Public/mysql.sql

    funktionieren anscheinend auch. Die Frage nach dem Passwort habe ich einfach mit Enter übersprungen (das ist doch mit leerem Passwort gemeint, oder?)

    Wenn ich nun mysql -h localhost -u admin -p mysql </share/Public/mysql.sql eintippe, erhalte ich die Meldung

    Code
    mysql -h localhost -u admin -p mysql </share/Public/SQL-Sicherung/mysql.sql
    Enter password:
    ERROR 1045 (28000): Access denied for user 'admin'[user='70162']localhost[/user] (using password: YES)
    [~] # mysql -h localhost -u admin -p mysql </share/Public/SQL-Sicherung/mysql.sql
    Enter password:
    ERROR 1044 (42000): Access denied for user ''[user='70162']localhost[/user] to database 'mysql'
    [~] #

    abhängig davon, ob mit oder Passwort...

  • Richtig. Jetzt gilt wieder Dein bisheriges Passwort. Und damit auch wieder der bisherige Nutzer root.


    Daher bitte im Befehl auch den Nutzer admin durch root ersetzen. Dann klappt es.


    So habe ich es auch in meiner Anleitung in Post 1 beschrieben.

  • Ich bekomme trotzdem nach


    mysql -h localhost -u root -p -e "CREATE DATABASE Baikal"


    die Meldung


    Code
    mysql -h localhost -u root -p -e "CREATE DATABASE Baikal"
    Enter password:
    ERROR 1698 (28000): Access denied for user 'root'[user='70162']localhost[/user]

    Hier habe ich mein Passwort für root angegeben

  • Da stimmt das Passwort für den root-Nutzer nicht.


    Wenn Du es nicht mehr weißt, einfach den neuen MariaDB-Server stoppen, den alten Server über die Weboberfläche starten, das root-Passwort über die Weboberfläche zurücksetzen.


    Dann die mysql-DB noch mal neu exportieren, den internen Server stoppen, die Datenbanken des neuen Servers löschen und dann den neuen Server starten und die mysql-DB noch mal importieren.

  • Problem weiter eingegrenzt:


    Nachdem ich die mysql eingelesen habe, musste ich den Server neu starten.

    Danach konnte ich alle anderen Datenbanken einlesen.


    Aber natürlich kommt der nächste Fehler:

    Wenn ich jetzt phpmyadmin starte, kommt eine Fehlermeldung in der Weboberfläche:

    Code
    #1231 - Variable 'lc_messages' can't be set to the value of 'de_DE'


    pasted-from-clipboard.png

    Alles was ich in phpMyAdmin anklicke, führt mich automatisch wieder auf die Anmeldemaske von phpMyAdmin.