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-Key: 1427009459

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

Printed on: April 24, 2024 at 18:04 o'clock

Member: BirdyB
BirdyB Oct 24, 2021 at 20:50:39 (UTC)
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
Member: Quiupu
Quiupu Oct 25, 2021 at 04:11:17 (UTC)
Goto Top
Danke dir, das hört sich gut an. Ich werde mich heute Abend mal dran setzen, danke.
Member: Quiupu
Solution Quiupu Oct 26, 2021 at 00:52:27 (UTC)
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))