mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:3306' (111)

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
seum
User
Beiträge: 13
Registriert: Montag 4. August 2014, 14:11

Hallo zusammen!

Ich habe einen Ubuntu-Server 22.04.1 auf dem läuft mysql.

Ich kann mit PHP ganz normal auf die Datenbank zugreifen. Nur leider mit python3 nicht. Ich habe das Internet schon gewälzt, aber kein Lösungsansatz war richtig.

Hier mal mein Demoscript:

Code: Alles auswählen

#!/usr/bin/python3
import mysql.connector

mydb = mysql.connector.connect(
  host="127.0.0.1",
  user="root",
  password="meinpasswort",
  database="einedatenbank"
)
print(mydb)
Auf dem Raspberry hat das auch alles funktioniert. Auf dem Ubuntuserver leider nicht mehr.

Wenn ich anstatt der IP "localhost" angebe bringt das auch keine Änderung. Über die shell kann ich mich auch in die datenbank einloggen.

Hier die Fehlermeldung:

Traceback (most recent call last):
File "/usr/local/lib/python3.10/dist-packages/mysql/connector/connection_cext.py", line 308, in _open_connection
self._cmysql.connect(**cnx_kwargs)
_mysql_connector.MySQLInterfaceError: Can't connect to MySQL server on '127.0.0.1:3306' (111)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/var/www/html/mydb.py", line 22, in <module>
connection = conn.connect(host = '127.0.0.1',
File "/usr/local/lib/python3.10/dist-packages/mysql/connector/pooling.py", line 293, in connect
return CMySQLConnection(*args, **kwargs)
File "/usr/local/lib/python3.10/dist-packages/mysql/connector/connection_cext.py", line 129, in __init__
self.connect(**kwargs)
File "/usr/local/lib/python3.10/dist-packages/mysql/connector/abstracts.py", line 1237, in connect
self._open_connection()
File "/usr/local/lib/python3.10/dist-packages/mysql/connector/connection_cext.py", line 313, in _open_connection
raise get_mysql_exception(
mysql.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MySQL server on '127.0.0.1:3306' (111)

Code: Alles auswählen

netstat -lnp | grep mysql
ergibt folgendes:

Code: Alles auswählen

unix  2      [ ACC ]     STREAM     LISTENING     70679    13146/mysqld         /var/run/mysqld/mysqlx.sock
unix  2      [ ACC ]     STREAM     LISTENING     70116    13146/mysqld         /var/run/mysqld/mysqld.sock

Code: Alles auswählen

nmap -p3306 127.0.0.1 
ergibt folgendes:

Code: Alles auswählen

PORT     STATE  SERVICE
3306/tcp closed mysql
Ich hoffe hier kann mir jemand helfen.
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Datenbank laeuft nicht auf IP:port, sondern domain sockets. Ich habe keine mysql laufen, bekomme aber genau das gleiche, wenn ich nmap ausfuehre. Und dein netstat sagt ganz klar, dass mqsyld auf den domain-sockets lauscht.
Entweder laesst du Python also so laufen, dass es den socket verwendet (laut https://dev.mysql.com/doc/connector-pyt ... targs.html unix_socket), oder du re-konfigurierst die mysql so, dass sie auch wirklich auf dem Port und localhost lauscht.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Ausgabe ist doch eindeutig: Dein mysql-Server horcht nicht auf den Port 3306, state closed, sondern nur auf den Unix-Socket /var/run/mysqld/mysqld.sock.
Wenn Du TCP nutzen möchtest, mußt Du mysql entsprechend konfigurieren.
seum
User
Beiträge: 13
Registriert: Montag 4. August 2014, 14:11

Hallo zusammen.

Danke für die schnellen Hinweise! Jetzt funktioniert es. In der mysql conf war "skip-grant-tables" aktiviert!
Antworten