エックスサーバーで、mysql-connector-pythonを使ってMySQLに接続します。
ライブラリをインストールする
まず、MySQLに接続するために必要なライブラリをインストールします。
1 2 |
pip3 install mysql-connector-python pip3 install sshtunnel |
※Python3での実行を前提としているためpip3としていますが、Python2で実行する場合はpipやpip2でインストールすればOKです。
mysql-connector-pythonはMySQL純正のコネクタです。
また、エックスサーバーではセキュリティ上の理由から外部からのSQL接続は素のままではできない仕様になっています。
そのため、sshtunnelを利用してSSHポートフォワードを経由することで、MySQLへの接続を行います。
MySQLへの接続
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# -*- coding: utf-8 -*- from sshtunnel import SSHTunnelForwarder import mysql.connector as mydb port_num = 10022 # エックスサーバーではデフォルトでポート番号が10022に設定されている # ssh_username及びssh_passwordはSSHのものを。 # ssh_pkeyにはSSH秘密鍵の絶対パスを。 # remote_bind_addressにはMySQLのアドレスを。 with SSHTunnelForwarder( ('**********.xsrv.jp', port_num), ssh_username='**********', ssh_password='**********', ssh_pkey='/home/**********/**********.key', remote_bind_address=('mysql**********.xserver.jp', 3306) ) as server: # SQLへのコネクションの作成 # ユーザー名・パスワードはMySQLのものを。 # databaseにはデータベース名を。 conn = mydb.connect( host='mysql**********.xserver.jp', port='3306', user='**********', password='**********', database='**********' ) # コネクションが切れた時に再接続してくれるよう設定 conn.ping(reconnect=True) # 接続できているかどうか確認 print(conn.is_connected()) # Trueと表示されれば、正常に接続できています。 |
コメント
Python学習中の初心者です。
xserverでのmysql接続で躓いてこのブログに辿り着きました。
「MySQLへの接続」項目で記載されているソースは、
どこに設置すればよいのでしょうか。
(pip3コマンドでのライブラリインストールまではできました)
カルさん
レスポンスが遅くなってすみませんm(_ _)m
もう、解決されているかもしれませんが、mysqlに接続する時のコードはどこに設置して頂いても問題ないです!mysqlのアドレスを絶対パス的に指定して接続しているので。
接続できないようなら、
・keyの設置場所へのパスを見直す
・mysqlへのログイン情報とsshへのログイン情報を混同してないか見直す
・データベース名を見直す
あたりを試してみてください!