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

MYSQL

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

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

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

ConoHa VPSにMariaDBを設置

MariaDBはMySQLとほぼほぼ同じです。ライセンスの関係でMySQLから派生したオープンソースプロジェクトです。

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アドレスに変更してください)として接続してみます。

from urllib.parse import urlparse
from sqlalchemy import create_engine
import pandas as pd
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の詳細をみる

⇩⇩⇩各社VPSを徹底比較した記事を書きました。もしよかったらどうぞ!

https://applingo.tokyo/article/491

コメント