【问题标题】:how to connect to mysql via ssh by Python如何通过 Python 通过 ssh 连接到 mysql
【发布时间】:2020-10-10 13:50:26
【问题描述】:

我在 StackOverflow 中检查了这些答案,但它们对我不起作用:A1A2A3

我按照这些答案编写我的代码并得到'(1045, "Access denied for user 'root'@'localhost' (using password: YES)")'。这是为什么呢?

我的代码在这里:

第一次尝试:

from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
      ('****.ucd.ie', 22),
      ssh_password="***",
      ssh_username="s***",
      remote_bind_address=('127.0.0.1', 3306)) as server:

     con = pymysql.connect(user='root',passwd='***',db='dublinbus',host='127.0.0.1',port=3306)

第二次尝试:

from sshtunnel import SSHTunnelForwarder
import pymysql
import pandas as pd

tunnel = SSHTunnelForwarder(('****.ucd.ie', 22), ssh_password='***', ssh_username='s***t',
     remote_bind_address=('127.0.0.1', 3306)) 
tunnel.start()
conn = pymysql.connect(host='127.0.0.1', user='root', passwd='****', port=3306)
data = pd.read_sql_query("SHOW DATABASES;", conn)

第三次尝试:

from sshtunnel import SSHTunnelForwarder
import pymysql

with SSHTunnelForwarder(
    ('****.ucd.ie',22),  
    ssh_password='****',
    ssh_username='s****t',
    remote_bind_address=('127.0.0.1', 3306)) as server:  
 
    db_connect = pymysql.connect(host='127.0.0.1',  
                                 port=3306,
                                 user='root',
                                 passwd='****',
                                 db='dublinbus')
 
    cur = db_connect.cursor()
    cur.execute('SELECT stop_num FROM dublinbus.stops limit 10;')
    data=cur.fetchone()
    print(data[0])

他们都给了我:(1045, "Access denied for user 'root'@'localhost' (using password: YES)")

那么我怎样才能通过 SSH 连接到我的远程 Mysql?

此外,我在本地 mysql 工作台中使用相同的 'ssh hostname' 和 'mysql hostname' 'mysql server port'。不知道会不会有影响。

#我用***来代替一些私人信息。

【问题讨论】:

    标签: python mysql ssh jupyter-notebook


    【解决方案1】:

    这可行:

    from sshtunnel import SSHTunnelForwarder
    import pymysql
    import pandas as pd
    
    server = SSHTunnelForwarder(
    ssh_address=('****', 22),
    ssh_username="****",
    ssh_password="****",
    remote_bind_address=("127.0.0.1", 3306))
    
    server.start()
    
    con = pymysql.connect(user='root',passwd='***',db='****',host='127.0.0.1',port=server.local_bind_port)
    

    【讨论】:

    • 这对我也有用。虽然,为了帮助澄清,我不得不将我的远程 MySQL 服务器名称放在 remote_bind_address 参数中,而不是 127.0.0.1,并且我不得不将 127.0.0.1 留在 pymsql.connect 函数中。起初,我将两个 127.0.0.1 的值都更改为远程 MySQL 服务器名称,这一直给出超时错误。这篇文章最终帮助我解决了这个问题:pauldesalvo.com/…
    猜你喜欢
    • 1970-01-01
    • 2014-02-18
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 2014-03-21
    相关资源
    最近更新 更多