DbLog Verbindungsproblem

Begonnen von jschmitt, 27 März 2014, 23:33:30

Vorheriges Thema - Nächstes Thema

jschmitt

Hallo,

ich habe Probleme mit DbLog. Ich kann mich nicht mit der Datenbank verbinden, das steht im logfile:
Can't connect to mysql:database=fhem;host=xxx.xxx.xxx.xxx;port=3306: Access denied for user 'fhem'@'xxx' (using password: YES)

Mit einem (Win)- Client geht das sehr wohl.

Ich habe fhem auf einem QNAP TS-219PII unter Optware installiert. Die Perl- Version ist 5.10.
Folgende Perl- Module sind installiert:
perl-dbd-mysql   4.006-1   4.006-1   DBD-mysql - The Perl Database Driver for MySQL
perl-dbi      1.620-1   1.620-1   DBI - The Perl Database Interface by Tim Bunce

meine db.conf sieht so aus:

#
# database configuration file
#
#
## for MySQL
################################################################
%dbconfig= (
        connection => "mysql:database=fhem;host=xxx.xxx.xxx.xxx;port=3306",
        user => "fhem",
        password => "fhem"
);
################################################################
#
## for PostgreSQL
################################################################
#%dbconfig= (
#        connection => "Pg:database=fhem;host=localhost",
#        user => "fhemuser",
#        password => "fhempassword"
#);
################################################################
#
## for SQLite (username and password stay empty for SQLite)
################################################################
#%dbconfig= (
#        connection => "SQLite:dbname=/opt/fhem/fhem.db",
#        user => "",
#        password => ""
#);
################################################################
~
~
~


in der Original- Beispiel- Datei db.conf ist in der Sektion "mysql" hinter
"***password => "fhempassword",***" ein Komma,
hinter denen der anderen aber keines.

Ich habe aber alles mit und ohne Komma ausprobiert, fhem immer neu gestartet, geht nicht.

Ich kann doch mit
LOG Ddefine DbLog /opt/fhem-5.4/db.conf  .*:.* aus dem Frontend das einrichten?
Dann kommt der Fehler oben. Oder muß ich das in fhem.cfg editieren und dann neu starten?
Oder stimmen die Perl- Module nicht?

Kann mir wer helfen?

Grüße,
Johannes
FHEM auf (QNAP TS-219P II, alt) HP T610 Thin Client : 1 x HM-CFG-LAN + 6 x HM-LC-Sw1PBU-FM (Rolladen) + 12 x  HM-Sec-SD (Rauchmelder) + 2 x HM-SWI-3-FM (diverses)

rudolfkoenig

ZitatKann mir wer helfen?
Ja, ein mysql-admin.

Wenn ich mich recht erinnere, spezifiziert man im mysql bei einem Account neben Benutzername und Passwort immer den Rechner auch mit, man kann ihn aber auch als * (oder so aehnlich) fuer alle Rechner eintragen.
-> Problem vermutlich nicht in der fhem Konfiguration, sonder in mysql zu suchen.

betateilchen

Mach mal folgendes:


mysql> select Host,User from mysql.user where user='fhem-dev';
+------+----------+
| Host | User     |
+------+----------+
| %    | fhem-dev |
+------+----------+
1 row in set (0.00 sec)


(fhem-dev natürlich durch den betreffenden Usernamen ersetzen!)

Wichtig ist, dass bei Host ein % Zeichen steht, damit es keine Einschränkung gibt, von welchem Host aus die Anfrage erfolgt.
Wenn das nicht hilft, würde ich in mysql das Logging aktivieren, um herauszufinden, warum der Verbindungsaufbau fehlschlägt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

jschmitt

So. Es geht jetzt (zumindest kann ich ein define xxx DbLog ohne Fehler absetzen).

Aber ich verstehe es immer noch nicht...

Hintergrund: alles läuft auf einer QNAP TS-219 PII mit mySQL Version 5.1.36

Die Datenbank ist erstellt mit dem script aus contrib/dblog/create....

Die legt den user an mit Rechten "@%". Und daran lag es.
Korrigiere ich die Rechte des users "fhem" von "%" auf "localhost", geht es.

Komischerweise konnte ich mich mit dem Windows- Client vorher problemlos verbinden ("%").

Jetzt habe ich einen user fhem@% UND einen fhem@localhost. Das geht.

Noch was: Eine andere Datenbank auf dem Server kann von python problemlos abgefragt werden:
con = MySQLdb.connect(host="xxx.xxx.xxx.xxx",user="data",passwd="xxx",db="xxx")

... geht problemlos.

Also in diesem Fall: Benutzerrechte explizit für user@localhost setzen.


Danke für die Antworten,

Viele Grüße,

Johannes

Noch was:

in der Original db.config in contrib steht:
#%dbconfig= (
#        connection => "Pg:database=fhem;host=localhost",
#        user => "fhemuser",
#        password => "fhempassword",
#);


ist das Komma hinter "fhempassword" nicht zuviel?
Ich habe es in meiner Konfiguration gelöscht.
Ich habe aber auch nicht getestet ob es Auswirkungen hat.
FHEM auf (QNAP TS-219P II, alt) HP T610 Thin Client : 1 x HM-CFG-LAN + 6 x HM-LC-Sw1PBU-FM (Rolladen) + 12 x  HM-Sec-SD (Rauchmelder) + 2 x HM-SWI-3-FM (diverses)

betateilchen

das Komma stört nicht.

Und das mit den Benutzerrechten die Du jetzt verbogen hast, ist auch nicht notwendig, das funktioniert auch mit dem % völlig korrekt. Wichtig ist nur, sowohl den Benutzernamen als auch das % wie in dem Beispielskript angegeben in Anführungszeichen zu setzen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!