FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: DerFrickler am 08 Februar 2017, 21:28:08

Titel: an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 08 Februar 2017, 21:28:08
Wie hat eine mySQL Tabelle für configDB auszusehen? In der Comandref steht lediglich das diese leer sein muss. Aber ich gehe mal davon aus dass ich neben einem

CREATE DATABASE `configDB` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

die Rechte (GRANT) für den fhemuser noch erweitern muss? Oder? ein

GRANT SELECT, INSERT, DELETE, UPDATE ON `configDB`.* TO 'fhemuser'@'%';

aus der DbLog Einrichtung wird da doch sicherlich nicht ausreichen?

Danke,
Karsten
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: budy am 08 Februar 2017, 21:46:25
Moin Karsten,

wenn ich mich recht entsinne, dann hat configDB alles von alleine angelegt gehabt und auch komplett automatisch befüllt.
Ich habe jedenfalls keine einzige der Tabellen angelegt, die hinterher drin waren... ;)

Gruß,
Stephan
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 08 Februar 2017, 22:24:15
ein direktes

configdb migrate

führt zu folgendem Log-Eintrag

DBI connect('database=configDB;host=localhost;port=3306','fhem',...) failed: Unknown database 'configDB' at configDB.pm line 677.

und einem Absturz von FHEM
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DeeSPe am 09 Februar 2017, 00:20:39
Zitat von: DerFrickler am 08 Februar 2017, 21:28:08
Wie hat eine mySQL Tabelle für configDB auszusehen? In der Comandref steht lediglich das diese leer sein muss. Aber ich gehe mal davon aus dass ich neben einem

CREATE DATABASE `configDB` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

die Rechte (GRANT) für den fhemuser noch erweitern muss? Oder? ein

GRANT SELECT, INSERT, DELETE, UPDATE ON `configDB`.* TO 'fhemuser'@'%';

aus der DbLog Einrichtung wird da doch sicherlich nicht ausreichen?

Danke,
Karsten

Laut commandref sollte das ausreichen.
ZitatThe database tables will be created automatically.

Die configDB.conf Datei hast Du entsprechend Deiner Datenbank eingerichtet?

Gruß
Dan
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: chris1284 am 09 Februar 2017, 07:16:43
Zitat von: DerFrickler am 08 Februar 2017, 21:28:08
In der Comandref steht lediglich das diese leer sein muss.
das ist falsch. in der cmd-ref steht auch You must have access to a SQL database. somit must DU dich um den zugriff auf die db kümmern.
den kannst du ja auch erstmal ohne fhem testen, wenn das geht prüfe mal dein configDB.conf auf den richtigen pfad, rechtw und den richtigen inhalt

ZitatIMPORTANT:
    This file must be named "configDB.conf"
    This file must be located in the same directory containing fhem.pl and configDB.pm, e.g. /opt/fhem
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 06 Juli 2017, 23:08:52
Hallo zusammen,

ich möchte das Thema noch mal aufgreifen, da ich hier leider nicht zu einem Ergebnis gekommen bin.

Es bleibt beim Fehler:
DBI connect('database=configDB;host=localhost;port=3306','fhem',...) failed: Access denied for user 'fhem'@'%' to database 'configDB
' at configDB.pm line 691.

Während es mit sqlite3 ein Kinderspiel ist, macht mir mySQL zu schaffen. Laut Commandref heisst es:

You must have access to a SQL database.

Was bedeutet das jetzt genau? Müssen der MySQL root-user und der fhem-user identisch sein? Soll heissen dass ich den MySQL root-user in der configDB.conf angeben muss? Der fhem-user ist in MySQL wegen DBLog bereits bekannt, natürlich nicht für die table configdb die ja erzeugt werden soll.

Vielen Dank für Eure Hilfe.

Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: CoolTux am 07 Juli 2017, 05:05:40
Hast Du denn überhaupt einen User eingerichtet? Wenn ja, hast du dem User gleich ein Passwort mitgegeben?
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: Benni am 07 Juli 2017, 07:36:41
Zitat von: DerFrickler am 06 Juli 2017, 23:08:52
DBI connect('database=configDB;host=localhost;port=3306','fhem',...) failed: Access denied for user 'fhem'@'%' to database 'configDB
' at configDB.pm line 691.

Du musst auf deiner MySQL-Instanz ein leeres Datenbank-Schema (eine Datenbank) mit Namen 'configDB' anlegen.
Dann musst du auf der Datenbank einen User anlegen, der bspw. fhemuser heißt und ihm ein Passwort geben.
Wichtig ist du solltest den User so einrichten, dass er nicht nur von localhost aus Zugriff auf die Datenbank haben darf, sondern von überal her (fhemuser@%)
Weiterhin benötigt dieser User entsprechnde Berechtigungen auf das oben angelegte Datenbank-Schema: SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER sollten genügen. Du kannst dem User aber zur Not auch alle Berechtigungen auf das Schema geben (Achtung: Nicht global! Nur für dieses Schema!)

Dann sollte das mit der, in der commandref angegebenen configDB.conf für MySQL funktionieren.
Host, ggf. Port und natürlich Passwort des oben angelegten Datenbank-Users  noch korrekt eintragen!

%dbconfig= (
connection => "mysql:database=configDB;host=db;port=3306",
user => "fhemuser",
password => "Passwort des Datenbank-Users",
);


Das ist keine Raketenwissenschaft!

Gruß Benni.

Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 09:56:20
Danke, möglicherweise sollte man diese Ausführungen mal in den Beschreibungen ergänzen.

Soweit so gut.. Gibt es bezüglich der Längen der Datenwörter Einschränkungen?

2017.07.07 10:18:44 1: PERL WARNING: DBD::mysql::st execute failed: Data too long for column 'DEVICE' at row 1 at configDB.pm line 705.
DBD::mysql::st execute failed: Data too long for column 'DEVICE' at row 1 at configDB.pm line 705.

Gruß und Danke!

Edit:

aus der configDB
   DEVICE   varchar(64)   utf8_bin

auf der fhem (DbLog)
   DEVICE   varchar(64)   utf8_bin   

Demnach frage ich mich wo da ein Problem auftauchen kann?
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: CoolTux am 07 Juli 2017, 10:45:59
https://svn.fhem.de/trac/browser/trunk/fhem/contrib/dblog/db_create_mysql.sql

Eventuell wäre es hilfreich wenn man sich vorher ein wenig mit den Grundlagen einer MySQL Datenbank beschäftigt.
Oder WENIGSTENS sich die Scripte einmal anschaut und was man nicht versteht in eine Suchmaschine ein gibt.



Grüße
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 10:49:56
Wenn in einer Anleitung beschrieben steht dass alles von selbst erledigt wird und es dennoch einiges an Vorarbeit gibt, dann darf man schon mal etwas verwirrt sein. Zudem glaube ich das aktuelle Problem eingrenzen zu können, was jetzt nichts mehr mit der Datenbank selbst zu tun hat.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: CoolTux am 07 Juli 2017, 10:57:27
Zitat von: DerFrickler am 07 Juli 2017, 09:56:20
aus der configDB
   DEVICE   varchar(64)   utf8_bin

auf der fhem (DbLog)
   DEVICE   varchar(64)   utf8_bin   

Demnach frage ich mich wo da ein Problem auftauchen kann?

Dann schaue doch einfach mal wie Dein Schema tatsächlich angelegt wurde. Eventuell passt da was nicht.
http://mizine.de/mysql/mysql-tabellenstruktur-anzeigen-lassen/
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 11:06:33
Das werde ich gleich noch mal explizit auf der console nachschauen. Die Daten aus dem vorherigen Post stammen aus phpMyAdmin, sollten dann aber hoffentlich auch korrekt sein. Ich vermute (da ich wirklich lange device Namen benutze) dass es irgendwo einen device Namen in meiner config gibt, der nicht über DbLog erfasst wird und demnach nie Probleme gemacht hat. Die FB-DECT Geräte sind solche Kandidaten. Sqlite3 hat diesbezüglich nie Problem gemacht. Das war aber auch schon eine Phänomen was bei dem DbRep Modul aufgedeckt wurde.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: CoolTux am 07 Juli 2017, 11:11:17
Zitat von: DerFrickler am 07 Juli 2017, 11:06:33
Das werde ich gleich noch mal explizit auf der console nachschauen. Die Daten aus dem vorherigen Post stammen aus phpMyAdmin, sollten dann aber hoffentlich auch korrekt sein. Ich vermute (da ich wirklich lange device Namen benutze) dass es irgendwo einen device Namen in meiner config gibt, der nicht über DbLog erfasst wird und demnach nie Probleme gemacht hat. Die FB-DECT Geräte sind solche Kandidaten. Sqlite3 hat diesbezüglich nie Problem gemacht. Das war aber auch schon eine Phänomen was bei dem DbRep Modul aufgedeckt wurde.

Ach so, das was Du da angegeben hattest war schon ein Auszug aus der Tabellenstruktur direkt aus der MySQL Datenbank? Nur halt eben mit phpmyadmin angeschaut?
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 11:13:33
genau.

Jetzt halt der Gedankengang was Datenmässig in der einen stehen kann und was in der anderen. Demnach muss ich mal alle Devices aus der hem.cfg der Länge nach überprüfen. Ist jetzt hat etwas Fleissarbeit.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: CoolTux am 07 Juli 2017, 11:21:05
Zitat von: DerFrickler am 07 Juli 2017, 09:56:20

2017.07.07 10:18:44 1: PERL WARNING: DBD::mysql::st execute failed: Data too long for column 'DEVICE' at row 1 at configDB.pm line 705.
DBD::mysql::st execute failed: Data too long for column 'DEVICE' at row 1 at configDB.pm line 705.


Die Meldung müsste relativ oft kommen, oder? Eigentlich immer wenn er in die DB schreiben will/muß.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: kadettilac89 am 07 Juli 2017, 11:22:31
Zitat von: DerFrickler am 07 Juli 2017, 11:13:33
Jetzt halt der Gedankengang was Datenmässig in der einen stehen kann und was in der anderen. Demnach muss ich mal alle Devices aus der hem.cfg der Länge nach überprüfen. Ist jetzt hat etwas Fleissarbeit.

mach ein "list .*" im Eingabefeld, damit sollest du alle Devices als Liste bekommen.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 11:22:47
aktuell nur einmal bei dem Versuch der Migration. Nach der ersten Meldung wird abgebrochen. Wie schon angemerkt werde ich mich heute mal auf die Suche machen.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 11:24:20
Zitat von: kadettilac89 am 07 Juli 2017, 11:22:31
mach ein "list .*" im Eingabefeld, damit sollest du alle Devices als Liste bekommen.

und ich wollte schon die fhem.cfg durchstöbern. Das passiert wenn man mal 1-2 Monate sich nicht mit der Thematik fhem befasst, danke!
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 11:33:40
Den Übeltäter habe ich identifiziert. Was macht jetzt das "deviceRename"? Werden damit auch die Abhängigkeiten zu "structure" und die peers zu anderen Geräten angepasst?
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: CoolTux am 07 Juli 2017, 11:40:23
Meinst Du FHEM rename oder tatsächlich das set deviceRename ?
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 12:16:27
ich meine das set deviceRename
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: CoolTux am 07 Juli 2017, 12:16:58
noch nie probiert. bilde mir aber ein das es klappt.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 12:19:06
Zitat von: CoolTux am 07 Juli 2017, 12:16:58
noch nie probiert. bilde mir aber ein das es klappt.

gut, ich werde es dann später mal ausprobieren, meine mich aber daran erinnern zu können es mal im Zusammenhang mit weiteren Abhängigkeiten erfolgreich genutzt zu haben. Ich melde mich wenn ich es angepasst habe.

Vielen Dank!

Edit:
set deviceRename hat alle Abhängigkeiten geändert.
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: DerFrickler am 07 Juli 2017, 12:42:57
Die Migration auf MySQL war erfolgreich.

Danke!
Titel: Antw:an die mySQLer unter Euch (configDB)
Beitrag von: Manul am 07 Juli 2017, 13:21:43

for d in $(grep define fhem.cfg|cut -d" " -f2); do n=$(echo $d | wc -c); echo "$n $d"; done|sort -g