ConoHa VPSにMySQLを設置して外部からPythonでアクセスしてみるクロールしたデータなどをVPSに置いてアクセスしたい VPSでクロールして自分なりに加工したデータをデータベースに入れて、ローカルのコンピュータからアクセスできたらいいなと思いやってみました。 おおまかな流れ ConoHaのVPSにMari
ConoHa VPSにMySQLを設置して外部からPythonでアクセスしてみる
クロールしたデータなどを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 -pMariaDB [(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)