DbLog - neue Version mit Support MariaDB Perl Treiber und Netzwerk-Kompression

Begonnen von DS_Starter, 12 März 2024, 18:56:35

Vorheriges Thema - Nächstes Thema

DS_Starter

Die Version im contrib ist upgedated.
Die Klick-Links sind als Icons oder Text (Attribut headerLinks) umschaltbar. Die Textsprache ist von
der globalen Einstellung 'language' abhängig gestaltet.
Die Schreibfehler in der Hilfe habe ich beseitigt.

LG,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

RalfRog

Zitat von: DS_Starter am 15 März 2024, 19:58:42Nein, da gibt es normal ein Icon. Schau ich nochmal ob es das in den ausgelieferten Icons evtl. nicht gibt.
Ok, dass das ein ICON-Name ist darauf bin ich jetzt nicht gekommen.


Da localhost mit mySQL geht aber mit MariaDB nicht:
Conf-Zeile: connection => "mysql:database=fhem;host=localhost;port=3306",
024.03.15 19:19:05.359 2: DBLogging - ERROR: DBI connect('database=fhem;host=localhost;port=3306','fhemuser',...) failed: Connection error: port cannot be specified when host is localhost or embedded at ./FHEM/93_DbLog.pm line 2558.
Daher bin ich aufgrund der Meldung und nochmal überlegen hingegangen und habe mit der Loopbackadresse versucht, damit geht es. ;D   bei beiden Connection-Typen
Conf-Zeile: connection => "mysql:database=fhem;host=127.0.0.1;port=3306",
Du hast gleich die IP drin, daher fällt es nicht auf.
Zitat von: DS_Starter am 15 März 2024, 20:33:57@RalfRog,
hier meine cfg zum Vergleich

      connection => "MariaDB:database=fhemtest1;host=192.168.2.44;port=3306",
....

Zum Hinweis:
Zitat von: betateilchen am 15 März 2024, 20:43:45
ZitatERROR: DBI connect('database=fhem;host=localhost;port=3306','fhemuser',...) failed: Connection error: port cannot be specified when host is localhost or embedded
Das ist ein uraltes Problem in mysql Umgebungen. Mach mal bitte ein
select user,host from mysql.user where user='fhemuser' or user='';und poste die Ausgabe.

In der mySQL Umgebung gab es ja kein Problem. Hier aber das Ergebnis:
MariaDB [(none)]> select user,host from mysql.user where user='fhemuser' or user='';
+----------+------+
| User     | Host |
+----------+------+
| fhemuser | %    |
+----------+------+
1 row in set (0.172 sec)
Bedeutet "%" nicht, dass der User von jedem Host zugelassen ist?
Kommando dazu in der "db_create_mysql.sql" => <CREATE USER 'fhemuser'@'%' IDENTIFIED BY 'fhempassword';>

Scheint, dass "DBD::MariaDB" etwas anders macht  ???
Ist das Thema Port vielleicht der Hinweis?
Connection error: port cannot be specified when host is localhost
Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

DS_Starter

Moin Ralf,

habe ein bisschen gegoogelt und bin inzwischen der Meinung der MariaDB Treiber setzt das richtig um und der MySQL Treiber müsste 'eigentlich' auch den Fehler bringen.

Auf der MySQL Seite https://dev.mysql.com/doc/refman/5.7/en/connecting.html findet man:

ZitatClient programs determine what type of connection to make as follows:

    * If the host is not specified or is localhost, a connection to the local host occurs:

        * On Windows, the client connects using shared memory, if the server was started with the shared_memory system variable enabled to support shared-memory connections.

        * On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs: the client connects using a Unix socket file. The --socket option or the MYSQL_UNIX_PORT environment variable may be used to specify the socket name.

    * On Windows, if host is . (period), or TCP/IP is not enabled and --socket is not specified or the host is empty, the client connects using a named pipe, if the server was started with the named_pipe system variable enabled to support named-pipe connections. If named-pipe connections are not supported or if the user making the connection is not a member of the Windows group specified by the named_pipe_full_access_group system variable, an error occurs.

    * Otherwise, the connection uses TCP/IP.

Das heißt, ist localhost angegeben, geht der Client nicht über IP Adresse und den angegebenen Port, sondern eine Socket-Verbindung wenn Linux eingesetzt wird. Der Port ist dem Fall obsolet.

Vermutlich geht es auch wenn du in der .conf den Port weglässt:

      connection => "MariaDB:database=fhemtest1;host=localhost",
....

Ich habe eine remote DB und kann das nicht probieren, wäre aber logisch.

Siehe auch: https://stackoverflow.com/questions/50160128/why-wont-mysql-client-use-the-port-i-specify

ZitatOk, dass das ein ICON-Name ist darauf bin ich jetzt nicht gekommen.
Das Icon wird heute per Update ausgeliefert.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

ZitatDas heißt, ist localhost angegeben, geht der Client nicht über IP Adresse und den angegebenen Port, sondern eine Socket-Verbindung wenn Linux eingesetzt wird. Der Port ist dem Fall obsolet.

Dann wäre es aber doch sinnvoller, gleich die Socket-Variante in der .conf anzugeben?

(An der user-Konfiguration liegt es jedenfalls nicht, da müsste das Ergebnis aus der mysql.users anders aussehen)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

ZitatDann wäre es aber doch sinnvoller, gleich die Socket-Variante in der .conf anzugeben?
Da hast du auf jeden Fall Recht.
Ich wollte an dieser Stelle nur eine Erklärung für das Verhalten finden und verifizieren ob es so zutrifft.
Wenn Ralf den Test bestätigen kann passt es m.M. nach.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

Zitat von: DS_Starter am 16 März 2024, 09:05:42Ich wollte an dieser Stelle nur eine Erklärung für das Verhalten finden und verifizieren ob es so zutrifft.

Hm... hier die Ausgabe aus dem Hamburger:

connection => MariaDB:database=fhem;host=localhost;port=3306
Funktioniert bei mir problemlos. Eben extra umgebaut, um Deine Theorie zu testen.



Jetzt steht da wieder

connection => MariaDB:database=fhem;mariadb_socket=/run/mysqld/mysqld.sock
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Hmmm ...

Jetzt könnte man noch die Version von DBD::MariaDB mit Ralf vergleichen. Vllt. ergeben sich daraus Unterschiede.

Und wenn wenn du ";port=3306" weglässt, funktioniert es noch?
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

connection => MariaDB:database=fhem;host=localhost
Funktioniert hier auch ohne Portangabe.

ii  libdbd-mariadb-perl               1.21-3                         amd64        Perl5 database interface to the MariaDB/MySQL databases

ii  mariadb-client                    1:10.5.23-0+deb11u1            all          MariaDB database client (metapackage depending on the latest version)
ii  mariadb-client-10.5               1:10.5.23-0+deb11u1            amd64        MariaDB database client binaries
ii  mariadb-client-core-10.5          1:10.5.23-0+deb11u1            amd64        MariaDB database core client binaries
ii  mariadb-common                    1:10.5.23-0+deb11u1            all          MariaDB common configuration files
ii  mariadb-server                    1:10.5.23-0+deb11u1            all          MariaDB database server (metapackage depending on the latest version)
ii  mariadb-server-10.5               1:10.5.23-0+deb11u1            amd64        MariaDB database server binaries
ii  mariadb-server-core-10.5          1:10.5.23-0+deb11u1            amd64        MariaDB database core server files

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3347
Server version: 10.5.23-MariaDB-0+deb11u1 Debian 11
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Danke. Das war jetzt meine Erwartung dass es damit auch funktioniert.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

RalfRog

Ok da habt ihr schon kräftig rumgetestet.

Geht jetzt auch  ::)   mit localhost statt Loopback
connection => MariaDB:database=fhem;host=localhost;port=3306
Ich hatte heute Nacht nochmal ein "update" gemacht und danach deine "neue" Testversion eingespielt.
Welche der Aktionen dazu geführt hat, dass es nun geht weiss ich nicht.

Macht es Sinn nochmal zurück zu gehen und zu suchen?
An sich würde ich sagen: geht - alles gut!

Gruß Ralf

Edit, bin in den Versionen zurück:ii  libdbd-mariadb-perl                  1.21-3                           armhf        Perl5 database interface to the MariaDB/MySQL databases
ii  libmariadb3:armhf                    1:10.5.15-0+deb11u1              armhf        MariaDB database client library
ii  mariadb-client-10.5                  1:10.5.15-0+deb11u1              armhf        MariaDB database client binaries
ii  mariadb-client-core-10.5             1:10.5.15-0+deb11u1              armhf        MariaDB database core client binaries
ii  mariadb-common                       1:10.5.15-0+deb11u1              all          MariaDB common configuration files
ii  mariadb-server                       1:10.5.15-0+deb11u1              all          MariaDB database server (metapackage depending on the latest version)
ii  mariadb-server-10.5                  1:10.5.15-0+deb11u1              armhf        MariaDB database server binaries
ii  mariadb-server-core-10.5             1:10.5.15-0+deb11u1              armhf        MariaDB database core server files

Edit2, ohne Port geht auch
connection => MariaDB:database=fhem;host=localhost
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

DS_Starter

Hallo Ralf,

vielen Dank für deinen Einsatz. :)

Das passt alles soweit ich es sehe.
Wir können das Verhalten gut einschätzen und wissen auch wie MySQL/MariaDB mit der Angabe host=localhost umgeht.
Sollten User auf diese Fehlermeldung laufen, wissen wir dass man statt localhost besser gleich mit socket arbeiten kann.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

RalfRog

Alles klar, danke dir mal sowieso für deine Arbeit.

Es hat mir dann doch keine Ruhe gelassen ob ich nicht doch was falsch gemacht habe - mit der Testversion vom 13.

Da im Prinzip mit der Version vom 15. (23.x Uhr) alle Varianten (mit/ohne Port - mit/ohne localhost) liefen - man also quasi bei einem lokalen DB-Server aufgrund der Defaults in den Confs von /etc/mysql/ fast nix falsch machen kann habe ich die vorherige Testversion (13.) wieder aktiviert und nach "shutdown restart" LOG:
Version vom 13.
*** connection => MariaDB:database=fhem;host=127.0.0.1;port=3306
2024.03.17 17:24:28.729 3: DBLogging - DB connection parameters are stored in SubProcess
2024.03.17 17:24:28.901 3: DBLogging - DB connection parameters are initialized in the SubProcess
2024.03.17 17:24:29.826 3: DBLogging - SubProcess connected to fhem

*** connection => MariaDB:database=fhem;host=localhost;port=3306
2024.03.17 17:29:33.583 3: DBLogging - Rereadcfg requested.
2024.03.17 17:29:33.592 3: DBLogging - new DB connection parameters are transmitted ...
2024.03.17 17:29:33.855 3: DBLogging - Database disconnected by request. Stored DB params in SubProcess were deleted.
2024.03.17 17:29:33.912 3: DBLogging - DB connection parameters are stored in SubProcess
2024.03.17 17:29:33.919 3: DBLogging - DB connection parameters are initialized in the SubProcess
*** dauert eine Weile... aber dann
2024.03.17 17:39:31.610 2: DBLogging - ERROR: DBI connect('database=fhem;host=localhost;port=3306','fhemuser',...) failed: Connection error: port cannot be specified when host is localhost or embedded at ./FHEM/93_DbLog.pm line 2558.

*** connection => MariaDB:database=fhem;host=localhost
2024.03.17 17:46:17.871 3: DBLogging - Rereadcfg requested.
2024.03.17 17:46:17.880 3: DBLogging - new DB connection parameters are transmitted ...
2024.03.17 17:46:18.066 3: DBLogging - Database disconnected by request. Stored DB params in SubProcess were deleted.
2024.03.17 17:46:18.131 3: DBLogging - DB connection parameters are stored in SubProcess
2024.03.17 17:46:18.138 3: DBLogging - DB connection parameters are initialized in the SubProcess
*** geht, schreibt in DB
2024.03.17 17:55:29.475 3: DBLogging - SubProcess connected to fhem

Scheint, dass da in der Testversion (13.) etwas war...  localhost ohne Port geht / mit Port nicht
Wie gesagt jetzt klappts fast egal was man vorgibt (wenn es nichts bewusst Falsches ist)

Also alles gut jetzt  ;)

Gruß Ralf

PS:
Setzt man besser auf die Socket-Verbindung statt Host:Port - oder ist es eigentlich egal?
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

betateilchen

Zitat von: RalfRog am 17 März 2024, 18:18:26Setzt man besser auf die Socket-Verbindung statt Host:Port - oder ist es eigentlich egal?

Wenn der Server und der Client auf dem gleichen Rechner laufen, würde ich immer die socket-Verbindung nehmen.
Und wenn man der Dokumentation glauben darf, macht das ja MariaDB selbst auch so, wenn man localhost angibt.

Bei mir laufen zwei FHEM auf die gleiche Datenbank - das Produktsystem greift von zuhause aus auf den Server in Irland zu, mein FHEM-Testsystem läuft in Irland auf dem gleichen Server. Deshalb habe ich zuhause host:port angegeben (mit einer echten Domain) und auf dem Testsystem ist die Verbindung über socket konfiguriert.

"Egal" ist es m.E. nicht. Bei Angabe der Socketverbindung erspart man sich halt die Fehlersuche bei Problemen mit localhost-Angaben. Vermutlich ist es hinsichtlich des Datanbankusers auch berechtigungstechnisch einfacher.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DS_Starter

Hallo zusammen,

danke für euren konstruktiven Input und die ganzen Tests.
Werde die Version heute noch einchecken. Sollte doch noch etwas auftreten gibt es ja immer noch die Alternative des MySQL Treibers, bzw. muß man ja ohnehin bewußt den MariaDB Treiber wählen.
Die Templates im DbLog-contrib schaue ich mir auch an damit es keine Diskrepanzen gibt.

@betateilchen, da du eine DB bei einem Hyperscaler nutzt ... Interesse halber, hast du mal die Möglichkeit der Kommunikations-Kompression genutzt und wenn ja, konntest du irgendwelche Vorteile erkennen?

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

betateilchen

Zitat von: DS_Starter am 17 März 2024, 19:11:37@betateilchen, da du eine DB bei einem Hyperscaler nutzt ... Interesse halber, hast du mal die Möglichkeit der Kommunikations-Kompression genutzt und wenn ja, konntest du irgendwelche Vorteile erkennen?

Darüber hatte ich schon nachgedacht, aber mir ist kein Weg eingefallen, wie ich mögliche Vorteile erkennen sollte. Deshalb habe ich die Kompression bisher nicht genutzt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!