quiupu
Goto Top

2003: Cant connect to MySQL server on 127.0.0.1:3306

Hallo, ich habe folgendes Problem.

Es gibt einen UBUNTU 18.04 Server mit SSH und einer MYSQL Datenbank im Internet.

Ich kann mich über die Windows 10 Powershell anmelden.
MYSQL Workbench funktioniert auch.
screenshot1 2021-10-24 222103

Wenn ich mich mit Pycharm anmelden will dann bekomme ich folgende Fehlermeldung.

2003: Can't connect to MySQL server on '127.0.0.1:3306' (10061 Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte)
oder mit einer anderen IDE
2003: Can't connect to MySQL server on '127.0.0.1:3306' (111 Connection refused)

import paramiko
import mysql.connector

hostname = 'xxx.xxx.xxx.xxx'  
port = 22
user = "root"  
passwd = "xxx"  

try:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname, port=port, username=user, password=passwd)
    while True:

        mydb = mysql.connector.connect(
            host='127.0.0.1',  
            user='root',  
            password='xxx',  
            port='3306',  
            database='mysql'  
        )

        mycursor = mydb.cursor()
        mycursor.execute('Select * FROM users')  

        users = mycursor.fetchall()

        for user in users:
            print(user)
            print('username ' + user[1])  
            print('password ' + user[1])  



except Exception as err:
    print(str(err))

Die SSH Verbindung klappt, weil wenn ich z.B. das Passwort ändere ich eine andere Fehlermeldung bekomme, nämlich Authentication failed.
root hat alle Rechte auf allen Datenbanken
Ich sitze seit über einem Monat an diesem Fehler und komme einfach nicht mehr weiter.
Danke schonmal für eure Hilfe.

Content-ID: 1427009459

Url: https://administrator.de/contentid/1427009459

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

BirdyB
BirdyB 24.10.2021 um 22:50:39 Uhr
Goto Top
Moin,
für mich sieht es so aus, als würdest du bei paramiko nur eine SSH-Verbindung aufbauen, aber nicht das Port-Forwarding einrichten.
Du musst ja schon dafür sorgen, dass dein lokaler Port 3306 getunnelt wird.
Du müsstest es dann ungefähr nach dieser Beschreibung tun: https://www.py4u.net/discuss/13133
VG
Quiupu
Quiupu 25.10.2021 um 06:11:17 Uhr
Goto Top
Danke dir, das hört sich gut an. Ich werde mich heute Abend mal dran setzen, danke.
Quiupu
Lösung Quiupu 26.10.2021 um 02:52:27 Uhr
Goto Top
Hallo, die Verbindung klappt schon einmal, vielen Dank für den Tipp.
import paramiko
import pymysql as pymysql
from sshtunnel import SSHTunnelForwarder

ssh_hostname = 'xxx.xx6.xx5.xx3'  
ssh_port = 22
ssh_user = "root"  
ssh_passwd = "vxxxxx"  

sql_hostname = '127.0.0.1'  
sql_username = 'root'  
sql_password = 'cxxxxx'  
# sql_main_database = 'mysql' 
sql_port = 3306
ssh_host = 'xxx.xx6.xx5.xx3'  
ssh_user = 'root'  
ssh_port = 22
# sql_ip = '1.1.1.1.1' 

try:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(ssh_hostname, port=ssh_port, username=ssh_user, password=ssh_passwd)
    while True:
        print("Erfolgreich verbunden zu " + ssh_hostname)  

        with SSHTunnelForwarder(
                (ssh_host, ssh_port),
                ssh_username=ssh_user,
                ssh_password=ssh_passwd,
                remote_bind_address=(sql_hostname, sql_port)) as tunnel:
            conn = pymysql.connect(host='127.0.0.1', user=sql_username,  
                                   passwd=sql_password,  # db=sql_main_database,
                                   port=tunnel.local_bind_port)
        print("hat geklappt ohne fehler")  

        exit()

except Exception as err:
    print(str(err))