質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Q&A

解決済

4回答

2101閲覧

pythonからssh接続をしてMySQLに接続できない

uraco

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

0グッド

1クリップ

投稿2018/08/14 07:01

編集2018/08/14 12:38

友人が、レンタルサーバー上にLinuxでMySQLの設定をしました。
そこにSSHで接続し、MySQLへの接続を試みているのですが、接続できません。。
以下のようなコードで実行しております。
SSH接続に関する知識もMySQLに関する知識も少なく、というかないので、手がかりを探しております・・・。

サーバー側のMySQLではユーザーの権限や接続IPアドレスの追加など、考えつくことはしてもらったつもりです。

ちなみに、ローカルのMySQL Workbenchからは接続できていることを確認しております。

念のため、ライブラリはアップデートをしてみました。

コードに原因があるのでしょうか?

補足が必要な場合はご指摘願います!

環境:macOS10.13.6
Python3.6.0
JupyterNotebook使用
MySQL Workbench version6.3.10

python3

1 2from sshtunnel import SSHTunnelForwarder 3import pymysql 4 5port_num = ***** 6with SSHTunnelForwarder( 7 ("ip_address", port_num), 8 ssh_username='username', 9 ssh_password='userpassword', 10 ssh_pkey='/Users/username/Desktop/id_rsa', 11 remote_bind_address=('127.0.0.1', 3306) 12) as server: 13 conn = pymysql.connect(host='127.0.0.1', 14 user='root', 15 password='password', 16 database='dbname' 17) 18 cursor = conn.cursor() 19 sql = "show tables" 20 cursor.execute(sql)

error

1(省略) 2OperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' ([Errno 61] Connection refused)")

また、pythonからもSSHでの接続はできているようです。
以下を実行した場合は結果が返ってきます。

python3

1 2port_num = ***** 3with SSHTunnelForwarder( 4 ("ip_address", port_num), 5 ssh_username='username', 6 ssh_password='userpw', 7 ssh_pkey='/Users/username/Desktop/id_rsa', 8 remote_bind_address=('127.0.0.1', 3306) 9) as server: 10 11 print(server.local_bind_port) 12

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

with文のあとに、「server.start()」のコードを追加することで接続できました!
MySQLへの接続の知識が不足していることによるものでした。。。

以下は書き換えたコードです。

python3

1from sshtunnel import SSHTunnelForwarder 2import pymysql 3 4port_num = ***** 5with SSHTunnelForwarder( 6 ("ip_address", port_num), 7 ssh_username='username', 8 ssh_password='userpassword', 9 ssh_pkey='/Users/username/Desktop/id_rsa', 10 remote_bind_address=('127.0.0.1', 3306) 11) as server: 12 server.start() 13 conn = pymysql.connect(host='127.0.0.1', 14 user='root', 15 password='password', 16 database='dbname' 17) 18 cursor = conn.cursor() 19 sql = "show tables" 20 cursor.execute(sql) 21 server.stop()

投稿2018/08/15 04:35

uraco

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

レンタルサーバの提供会社のQAにMySQLへの接続方法などありませんか?
一旦それを見てその方法で接続できるか試してみてください。

その上で接続が確認できた設定値をPythonのコードに反映すると良いでしょう。

投稿2018/08/15 03:18

namda

総合スコア705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uraco

2018/08/15 04:36

ありがとうございます! 友人のMySQLからもサーバーに接続できたとのことで、問題の切り分けができました。
guest

0

http://blog.honjala.net/entry/2016/06/25/013131

ポート番号の指定が必要なのでは?
マッピングされたポート番号が以下で参照できる様ですので、mysqlにconnectする際に指定すれば良いのではないでしょうか。

server.local_bind_port

投稿2018/08/15 03:15

t_obara

総合スコア5488

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uraco

2018/08/15 04:39

ありがとうございます! 今回は「port=server.local_bind_port」のままで接続できました。 ちなみに質問内容に記載したコードでprint(server.local_bind_port)にすると、毎回違うポート番号が返ってきて、「どのポート?」という結果でした。友人に伝えると、「そのポートは使用していない」ということで。 このあたりは未解決のままではあります。。
guest

0

MySqlにpythonから接続してデータ操作することが目的なのであれば、mysql-connecor-python-rfというモジュールを使ってはいかがでしょうか?
これであればpythonの知識でアクセスできるので調べる手間が減ります。さらに、このモジュールの情報もネットにそこそこあるので、ご希望のSSH経由よりなんとかなりそうな気がします

投稿2018/08/14 21:52

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uraco

2018/08/15 04:41

ありがとうございます! mysql-connecor-python-rfというモジュールもあるのですね。。 pymysqlともまた違うのですかね、調べてみます! 今回はSSHを経由しての接続は必須でしたので、MySQLのデータを扱うときに参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問