Closed henni123abc closed 4 years ago
@PeterLaemmle vielleicht magst du da nochmal einen Blick drauf riskieren? (#426)
Hallo @henni123abc, was wird denn in phpMyAdmin bei "Allgemeine Einstellungen" (gleich auf dem Startbildschirm nach dem Anmelden) als "Zeichensatz/Kollation der MySQL-Verbindung" angezeigt?
Hallo @PeterLaemmle, beim Start stand der Zeichensatz auf utf8mb4_general_ci. Mein erster Versuch war, das über Adminer auf utf8 zu ändern. Das alleine brachte aber keinen Erfolg. Jetzt steht der Zeichensatz auf utf8_general_ci und in Kombination mit der Anpassung der MySQL.py kommen wieder Daten durch.
Da ich die MySQL/Adminer Installation quasi 2 Jahre nicht angefasst habe, kann es eigentlich nur durch die Änderung in der MySQL.py kommen, oder?
Bei mir steht bei den allgemeinen Einstellungen als Kollation utf8mb4_general_ci. Die Datenbank (boswatch) und die einzelnen Tabellen (z.B. bos_pocsag) stehen ebenfalls auf utf8mb4_general_ci. Bei einem Update auf BOSWach v2.5 muss das geändert werden, siehe boswatch.sql.
...beim Start stand der Zeichensatz auf utf8mb4_general_ci. <
Bei mir stand das auch auf utf8mb4_general_ci. Da ich damit aber die o. g. Fehlermeldung bekommen habe, habe ich in der Reihenfolge erst den Zeichensatz in der Datenbank auf utf8 geändert -> kein Erfolg und im Anschluss daran die MySQL.py modifiziert -> erfolgreich
Unterm Strich hab ich ja nur konsequent von utf8 auf utf8mb4 umgestellt. Dachte eigentlich, die Änderungen in meinem Pull Request spiegeln das wider... Im PlugIn selbst ist das nur die Änderung bei der Datenbankverbindung von utf8 nach utf8mb4. Damit das funktioniert, muss die Datenbank selbst entsprechend vorbereitet sein. Ich wage also zu behaupten, bei deiner DB ist nocht nicht alles umgestellt.
Danke für dein kurzfristiges Hilfsangebot. Ich bin gerade noch unterwegs aber ich schaue mir am Wochenende meine Datenbank noch einmal genauer an! Danke!
Ich bekomm es leider nicht mehr ganz zusammen. Wichtig waren glaub:
ALTER DATABASE boswatch CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci
SET NAMES utf8mb4
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
@PeterLaemmle Wenn ich die DB aber vom SQL File frisch aufsetze sollte es direkt gehen oder? @henni123abc Ist das so schon versucht worden? Rein aus Interesse?
Ich hab jetzt mal probeweise BOSWatch direkt vom Repository mit einer separaten Test-DB neu aufgesetzt. Sowohl der Start als auch der Betrieb funktionieren bei mir einwandfrei. Meine Umgebung: MariaDB 5.5, Python 2.7, mysql-connector 2.2.9
Was ich jetzt erfolglos probiert habe:
pip install mysql-connector-python==8.0.19
- mit pip install ... hatte ich weiterhin eine Uralt-Version. Ist für den ein oder anderen vielleicht auch interessant)Was ich nicht verstehe, sind die anderen Datenbanken, die von MariaDB angelegt werden (s. Bild). Die beiden Datenbanken bekomme ich einfach nicht auf utf8mb4 umgestellt, weil mir die Zugriffsrechte fehlen. Sowohl mit einem Extra-User, der alles darf als auch lokal mit root kann ich die nicht mit "ALTER DATABASE......" umstellen. Kann das vielleicht noch die Ursache sein? Ich bin mir mittlerweile sicher, dass alles nur an meiner Konfiguration liegt.
Mit dem neuen Connector ändert sich die Fehlermeldung ein wenig:
18.04.2020 18:36:03 - MySQL [DEBUG ] cannot connect to MySQL
Traceback (most recent call last):
File "/opt/boswatch/plugins/MySQL/MySQL.py", line 94, in run
connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset='utf8mb4')
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/__init__.py", line 219, in connect
return MySQLConnection(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 104, in __init__
self.connect(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/abstracts.py", line 964, in connect
self._post_connection()
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/abstracts.py", line 936, in _post_connection
self.set_charset_collation(self._charset_id)
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/abstracts.py", line 895, in set_charset_collation
charset_name, collation_name))
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 978, in _execute_query
self.cmd_query(query)
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 598, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 486, in _handle_result
raise errors.get_exception(packet)
DatabaseError: 1273 (HY000): Unknown collation: 'utf8mb4_0900_ai_ci'
18.04.2020 18:36:03 - MySQL [DEBUG ] close MySQL
mysql-connector-python
ist das Nachfolgepaket. Bei mir tut es mit dem alten mysql-connector
. Ich teste aber bei Gelegenheit mal das neuere Paket.
Du musst tatsächlich nur die Datenbank boswatch
auf den korrekten Zeichensatz und die richtige Kollation umstellen. Die Standarddatenbanken einfach so lassen, wie sie sind.
Was mich ja sehr wundert ist das utf8mb4_0900_ai_ci
. Das musst du ja irgendwo bei dir so konfiguriert haben.
Das Problem hängt mit der Standardkollation für utf8mb4
bei MySQL 5.x (utf8mb4_general_ci
) und 8.x (utf8mb4_0900_ai_ci
) zusammen. Mit mysql-connector-python
muss ich utf8mb4_general_ci
daher explizit angeben. Ansonsten kommt der bei @henni123abc gesehene Fehler, da der Server die Kollation utf8mb4_0900_ai_ci
noch nicht unterstützt.
Bitte mal folgende Zeile in der MySQL.py testen:
connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset = 'utf8mb4', collation = 'utf8mb4_general_ci')
Diese Änderung funktioniert auch mit dem alten mysql-connector
.
Hallo und danke für die Mühen, bekomme immer noch Fehler. Hier der LOG: 19.04.2020 12:00:24 - pluginLoader [DEBUG ] load plugin: MySQL 19.04.2020 12:00:24 - pluginLoader [ERROR ] cannot load plugin: MySQL 19.04.2020 12:00:24 - pluginLoader [DEBUG ] cannot load plugin: MySQL Traceback (most recent call last): File "/opt/boswatch/includes/pluginLoader.py", line 106, in loadPlugin return imp.load_module(plugin["name"], plugin["info"]) File "/opt/boswatch/plugins/MySQL/MySQL.py", line 94 connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset = 'utf8mb4' collation = 'utf8mb4_general_ci') ^ SyntaxError: invalid syntax 19.04.2020 12:00:24 - pluginLoader [ERROR ] error loading plugin: MySQL 19.04.2020 12:00:24 - pluginLoader [DEBUG ] error loading plugin: MySQL Traceback (most recent call last): File "/opt/boswatch/includes/pluginLoader.py", line 32, in loadPlugins plugin = loadPlugin(i) File "/opt/boswatch/includes/pluginLoader.py", line 106, in loadPlugin return imp.load_module(plugin["name"], plugin["info"]) File "/opt/boswatch/plugins/MySQL/MySQL.py", line 94 connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset = 'utf8mb4' collation = 'utf8mb4_general_ci') ^ SyntaxError: invalid syntax
Sorry, da fehlt ein Komma. Hab meinen Post aktualisiert.
Danke Dir!
Jetzt kommt folgendes: 19.04.2020 12:21:08 - pluginLoader [DEBUG ] load plugin: MySQL 19.04.2020 12:21:08 - pluginLoader [ERROR ] cannot load plugin: MySQL 19.04.2020 12:21:08 - pluginLoader [DEBUG ] cannot load plugin: MySQL Traceback (most recent call last): File "/opt/boswatch/includes/pluginLoader.py", line 106, in loadPlugin return imp.load_module(plugin["name"], plugin["info"]) File "/opt/boswatch/plugins/MySQL/MySQL.py", line 95 cursor = connection.cursor() ^ IndentationError: unexpected unindent 19.04.2020 12:21:08 - pluginLoader [ERROR ] error loading plugin: MySQL 19.04.2020 12:21:08 - pluginLoader [DEBUG ] error loading plugin: MySQL Traceback (most recent call last): File "/opt/boswatch/includes/pluginLoader.py", line 32, in loadPlugins plugin = loadPlugin(i) File "/opt/boswatch/includes/pluginLoader.py", line 106, in loadPlugin return imp.load_module(plugin["name"], plugin["info"]) File "/opt/boswatch/plugins/MySQL/MySQL.py", line 95 cursor = connection.cursor() ^ IndentationError: unexpected unindent
Da hast du vermutlich in Zeile 94 einen Fehler gemacht. Zur Not die MySQL.py nochmal frisch aus dem Repo ziehen und nur den connect um die Kollation ergänzen.
Bitte mal folgende Zeile in der MySQL.py testen: connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset = 'utf8mb4', collation = 'utf8mb4_general_ci')
@PeterLaemmle Danke, mega! Danke! Die Ergänzung der collation behebt das Problem bei mir!
Okay, nächster Anlauf: in der mysql.py: " # Connect to MySQL # logging.debug("connect to MySQL") connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset = 'utf8mb4', collation = 'utf8mb4_general_ci') cursor = connection.cursor() except: "
bringt folgenden Fehler: "19.04.2020 14:21:54 - MySQL [DEBUG ] cannot connect to MySQL Traceback (most recent call last): File "/opt/boswatch/plugins/MySQL/MySQL.py", line 94, in run connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset = 'utf8mb4', collation = 'utf8mb4_general_ci') File "/usr/local/lib/python2.7/dist-packages/mysql/connector/init.py", line 44, in Connect return MySQLConnection(*args, kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 107, in init self.connect(kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 341, in connect self.config(**kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 220, in config collation)[0] File "/usr/local/lib/python2.7/dist-packages/mysql/connector/constants.py", line 742, in get_charset_info raise ProgrammingError("Character set '%s' unknown." % (charset)) ProgrammingError: Character set 'utf8mb4' unknown. 19.04.2020 14:21:54 - MySQL [DEBUG ] close MySQL "
Ich nutze: phpMyAdmin 4.9.5 mit Apache/2.4.38 (Raspbian) Datenbank-Client Version: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $ PHP-Erweiterung: mysqliDokumentation curlDokumentation mbstringDokumentation PHP-Version: 7.3.14-1~deb10u1
Datenbank | Kollation boswatch | utf8mb4_general_ci Tabellen bos_pocsag fms zvei... | utf8mb4_unicode_ci
Beim Versuch den MySQL Connector von 1.0.9 zu updaten, mit dem Befehl von henni, bekomme ich einen Fehler, da er anscheinend die alte systemrelevante Version nicht überschreiben / deinstallieren kann...
Ich verzweifel bald :(
@maeweee, ich tippe auf den MySQL-Connector. Der Installer von BOSWatch zieht sich eine recht alte Version (1.0.9) des Archivs direkt von mysql.com.
Versuch mal im Installer die Quelle auf http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-8.0.19.tar.gz
zu ändern.
Alternativ installiertst du per pip install mysql-connector-python
das neueste Paket direkt aus dem PyPI.
@Schrolli91, warum wird das überhaupt während dem Setup außerhalb der Kontrolle von Python installiert?
Danke für die Tipps! :)
Habe es jetzt händisch geschafft auf 8.0.19 zu updaten und nun sieht die Fehlermeldung wie folgt aus: 19.04.2020 16:19:49 - MySQL [DEBUG ] cannot connect to MySQL Traceback (most recent call last): File "/opt/boswatch/plugins/MySQL/MySQL.py", line 94, in run connection = mysql.connector.connect(host = globalVars.config.get("MySQL","dbserver"), port = globalVars.config.get("MySQL","dbport"), user = globalVars.config.get("MySQL","dbuser"), passwd = globalVars.config.get("MySQL","dbpassword"), db = globalVars.config.get("MySQL","database"), charset = 'utf8', collation = 'utf8mb4_general_ci') File "/usr/local/lib/python2.7/dist-packages/mysql/connector/init.py", line 219, in connect return MySQLConnection(*args, kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/connection.py", line 104, in init self.connect(kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/abstracts.py", line 957, in connect self.config(**kwargs) File "/usr/local/lib/python2.7/dist-packages/mysql/connector/abstracts.py", line 431, in config collation)[0] File "/usr/local/lib/python2.7/dist-packages/mysql/connector/constants.py", line 713, in get_charset_info raise ProgrammingError("Collation '{0}' unknown.".format(collation)) ProgrammingError: Collation 'utf8mb4_general_ci' unknown.
Ich glaube, es wird... :)
MySQL.py Zeile 94 charset = 'utf8'
nach charset = 'utf8mb4'
ändern.
Hups, das hat sich dann wieder eingeschlichen... Vielen lieben Dank, mit dem neuen Connector läuft es! :)
@Schrolli91, warum wird das überhaupt während dem Setup außerhalb der Kontrolle von Python installiert?
Keine Ahnung - Meine Ausrede ist: Historisch gewachsen ... :-D Kann im Installer aber gerne mal angepasst werden auf eine Version die per pip kommt zB
Hallo,
ich bin auf das gleiche Problem gestoßen.
Datenbank manuell auf utf8mb4_unicode_ci
umstellen => selbe Fehlermeldung.
Anpassung plugins/MySQL/MySQL.py
Zeile 94
auf charset='utf8mb4'
=> selbe Fehlermeldung.
Anpassung plugins/MySQL/MySQL.py
Zeile 94
auf charset = 'utf8mb4', collation = 'utf8mb4_general_ci'
=> selbe Fehlermeldung.
Auf mysql-connector-python
Version 8.0.19 Updaten mittels pip
war zwar Erfolgreich aber brachte die selbe Fehlermeldung erneut.
pip list
listet auch die Version 8.0.19 welche aber anscheinend nicht benutzt wird.
Ich musste die Version 8.0.19 manuell downloaden und installieren. (analog dem install Script)
Anschließend noch per pip
die Pakete: dnspython
und protobuf
installlieren/aktualisieren.
Nun funktioniert es.
Btw: Gibt es auch ein BOSWatch update Script? Erneute Installation überschreibt die Settings.
@maeweee @henni123abc Bitte kurz testen und Issue schließen falls behoben
@bbtimx sollte nich so sein - siehe: https://github.com/Schrolli91/BOSWatch/blob/6054a38ff56a978ae5df730543fb844c68e8122d/install.sh#L63
Die alte config sollte also dann unter ./old liegen: https://github.com/Schrolli91/BOSWatch/blob/6054a38ff56a978ae5df730543fb844c68e8122d/install.sh#L235
Da kann man dann problemlos ein Diff mit dem neuen Config machen
Version MySQL: 5.5.5-10.1.44-MariaDB-0+deb9u1 Adminer 4.3.1
genutzte Plugins MySQL Pushover
Fehlerbeschreibung POCSAG Meldungen werden nicht mehr nach MySQL übertragen. Ein Characterset wird nicht unterstützt
Logfile (Auszug)
Kurzfristige Abhilfe In Datei "/opt/boswatch/plugins/MySQL/MySQL.py" Line 94: Ändern von "utf8mb4" in "utf8" Dann werden allerdings keine Emojis mehr angezeigt!