ConoHa VPSにMySQLを設置して外部からPythonでアクセスしてみる

MYSQL

クロールしたデータなどをVPSに置いてアクセスしたい

VPSでクロールして自分なりに加工したデータをデータベースに入れて、ローカルのコンピュータからアクセスできたらいいなと思いやってみました。

おおまかな流れ
  • ConoHaのVPSにMariaDB(MySQL)を設置して
  • セキュリティの設定
  • Pythonでアクセスしてみる

ConoHa VPSにMariaDBを設置

CentOS7で、最新版のMariaDBをインストールします。

普通にyum installをすると古いMariaDBがインストールされてしまうので、公式ページから最新版のリポジトリを登録するシェルスクリプトをダウンロードして実行します。

ターミナル $  curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash

curlでシェルスクリプトをダウンロードします。

-sSオプションは進捗は表示しないけどエラーがでたら表示します。

それをパイプ( | )でつないで、bashで実行します。

ターミナル$  yum install MariaDB-server MariaDB-client

yumでMariaDB-server MariaDB-clientをインストールします。

さきほどリポジトリを設定しているので最新版がインストールされます。

ターミナル$  rpm -qa | grep Maria

rpm -qaオプションでインストールされているパッケージ一覧を表示し、それをパイプで渡します。

grep Maria でパッケージ一覧から"Maria"が含まれているパッケージのみを検索して表示します。

ターミナルMariaDB-compat-10.3.10-1.el7.centos.x86_64
MariaDB-common-10.3.10-1.el7.centos.x86_64
MariaDB-server-10.3.10-1.el7.centos.x86_64
MariaDB-client-10.3.10-1.el7.centos.x86_64

10.3.10がインストールされています。

ターミナル$  systemctl start mariadb

mariadbをスタートします。

ターミナル$  systemctl enable mariadb

ログイン時にmariadbが自動的に起動されるようにします。

ターミナル$  mysql_secure_installation

 

ターミナル$  mysql -u root -p

 

ターミナル$  vim /etc/my.cnf

 

ターミナル$  systemctl restart mariadb

 

ターミナルmysql -u root -p

 

ターミナルfirewall-cmd --add-service=mysql --zone=public --permanent

 

ターミナルfirewall-cmd --list-services --zone=public --permanent

 

ターミナルfirewall-cmd --reload

 

ターミナルnetstat -ant

 

ターミナル$ mysql -u root -p
MariaDB [(none)]> grant all privileges on *.* to your@'%' identified by 'your_pass';
grant(許可するよ), all privileges(全ての権限) , on *.* (全てのデータベースで), to your(yourというユーザーに), @'%'(すべてのIPアドレスから), idenified by 'your_pass';( your_passというパスワードで)
という意味になります。
「your_passというパスワードを持ったユーザーyour(接続元のIPアドレスはどこからでもOK)にすべての権限を全てのデータベースに対して許可するよ」
ということになります。
これでVPSサーバー側の設定は終わりです。
実際にローカルからアクセスしてみます。

PythonでVPS上のMySQLにアクセスする

sqlalchemyというPython パッケージを使用します。

VPSのIPアドレスが140.64.124.44 (架空のIPアドレスですので自分のIPアドレスに変更してください)として接続してみます。

import urllib.parse import urlparse
from sqlalchemy import create_engine
import pandas
db_path = "mysql://your:your_pass@140.64.124.44:3306/mydb"
url = urlparse(db_path) 
conn = create_engine('mysql+pymysql://{user}:{password}@{host}:{port}/{database}'.format(host = url.hostname, port=url.port, user = url.username, password= url.password, database = url.path[1:]))
table = "mytable"                  #mytableというテーブルを読み込む
df = pd.read_sql("select * from {}".format(table), conn)
print(df)

コメント