アナコンダ+jupyter+mysql+ssh
アナコンダ環境作ろう。
[本日ゴール]
・サーバーにjupyter-notebook を入れる
・そこからDBサーバーにSSH接続
・pandasでデータ表示する
[環境]
Ubuntu 16.04.4 LTS
※さくらのVPS借りて、今しがたセットアップしたばっかりの環境。
vimだけ入れた(sudo apt-get install vim)
ではやりませうか。
1)アップデート
sudo apt-get update
sudo apt-get upgrade -y
2)アナコンダ
wget https://repo.continuum.io/archive/Anaconda3-5.1.0-Linux-x86_64.sh
※2018/02/25の最新がこれでした。
bash Anaconda3-5.1.0-Linux-x86_64.sh
※いろいろ聞かれるけど、気にせず「yes」でいきましょうか。
source ~/.bashrc
conda update conda
3)外部からのjupyter-notebook への接続設定
jupyter-notebook --generate-config
$ ipython3
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:xxxxxxxxxxxxxxx
vim ~/.jupyter/jupyter_notebook_config.py'
最下部に以下を追加
c.IPKernelApp.pylab = 'inline'
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8888
c.NotebookApp.password = u'sha1:xxxxxxxxxx'
jupyter-notebook &
これで http://xxxxx:8888/ でjupyter-notebookにアクセスできます。
4)ライブラリ追加
SSH接続
conda install -c conda-forge sshtunnel
MySQL接続
conda install -c https://conda.anaconda.org/anaconda mysql-connector-python
5)DBサーバーにSSH接続
まずDBサーバーにSSH接続する。
jupyter-notebookを開いて、以下を入力
from sshtunnel import SSHTunnelForwarder
server = SSHTunnelForwarder(
(SERVER_IP, SSH_PORT),
ssh_host_key = None,
ssh_username = SSH_USERNAME,
ssh_password = SSH_PASSWD,
ssh_pkey = None,
remote_bind_address = ( '127.0.0.1' , MYSQL_PORT),
local_bind_address = ('127.0.0.1', LOCAL_PORT)
)
server.start()
今回は、「jupyter-notebookのサーバー」から直接「DBサーバー」にアクセスする。どちらもサクラVPSで、SSH接続で認証はユーザー名とパスワード。
パラメータは以下を参考に変更のこと。
SERVER_IP : DBサーバーのホスト名 or IP
SSH_PORT : DBサーバーのSSHポート。通常22
SSH_USERNAME: DBサーバーのSSHのユーザー名
SSH_PASSWD :DBサーバーのSSHのユーザー名
MYSQL_PORT :DBサーバーのmysqlのポート。通常3306
LOCAL_PORT :任意。なんでものいので3307とか。
ちなみに、もし、
「jupyter-notebookのサーバー」から「Webサーバー」を介して「DBサーバー」にアクセスする場合は
server = SSHTunnelForwarder(
(SERVER_IP, SSH_PORT),
ssh_host_key = None,
ssh_username = SSH_USERNAME,
ssh_password = SSH_PASSWD,
ssh_pkey = None,
remote_bind_address = ( DB_SERVER_IP , MYSQL_PORT),
local_bind_address = ('127.0.0.1', LOCAL_PORT)
)
server.start()
パラメータは以下を参考に変更のこと。
SERVER_IP : Webサーバーのホスト名 or IP
SSH_PORT : WebサーバーのSSHポート。通常22
SSH_USERNAME: WebサーバーのSSHのユーザー名
SSH_PASSWD :WebサーバーのSSHのユーザー名
DB_SERVER_IP : DBサーバーのホスト名 or IP
MYSQL_PORT :DBサーバーのmysqlのポート。通常3306
LOCAL_PORT :任意。なんでものいので3307とか。
6)MySQLに接続
import mysql.connector
dbh = mysql.connector.connect(
host='localhost',
port=LOCAL_PORT
db = DB_NAME
user = DB_USER,
password = DB_PASSWD,
charset='utf8')
パラメーターは任意に変更のこと
LOCAL_PORT:SSHの時に指定したポート。3307とか。
DB_NAME :データベースの名前
DB_USER :データベースのユーザー
DB_PASSWD:データベースのパスワード
7)クエリー発行する
import numpy as np
import pandas as pd
sql = "SELECT * from XXXX;"
table_df = pd.read_sql(sql, dbh)
できた。
片付けも忘れずに。
dbh.close()
server.stop()
この記事が気に入ったらサポートをしてみませんか?