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の設定を行います。 設定が終わったらmysqlに入ってみます。

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

パスワードを聞かれますので、mysql_secure_installationで設定したパスワードを入力します。

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

/etc/my.cnfを変更します。

[mysqld] character-set-server=utf8mb4 [client] default-character-set=utf8mb4

を追記します。

ターミナル$  systemctl restart mariadb

mariadbを再起動します。

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

firewall-cmdでmysqlが外部からアクセスできるようにします。

ターミナルfirewall-cmd --list-services --zone=public --permanent
dhcpv6-client ssh-2525 http https mysql

のように、mysqlが結果に含まれていればfirewalldの設定はうまくいっています。 外部からmysqlに接続できるようになりました。

ターミナル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アドレスですので自分のVPSの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)
 

ConoHa VPSは一番使いやすくてオススメなVPSです

↓ConoHa VPSはVPSの中で一番使いやすくてオススメです!

ConoHa VPSの詳細をみる

コメント