概要
現在制作しているラインボットにデータベースを使った機能を追加しようと思い、Herokuを用いてMySQLへの接続を試みましたが、かなり躓いた所がありました。
結果としては諦めたのですが、私と同じような初学者の方に少しでも参考になればと思い、念の為まとめておこうと思います。
環境
- macOS
- python3.7.1
- MySQL5.6.47
- mysqlclient1.4.6
この記事で書かないこと
- MySQLの詳細なクエリの使い方
手順
1.MySQLのインストール
MySQLそのものをpip install mysql
でインストールします。
2.コネクタのインストール
コネクタのインストールを行います。
正直役割がよく理解できていませんが、名前の通りMySQLのサーバーとの接続の為に必要だと思われます。
コネクタには目的や使用言語等でいくつもの種類がありますが、自分はmysqlclient
を使用しています。
こちらもpip install mysqlclient
でインストールします。
3.Herokuでの準備
自分の場合は後述のMySQLの準備などを全て終えた後に、いざ動作確認をしようとHerokuへコードをプッシュし動かしてみたのですが、MySQLのインポートエラーが出てしまいました。
原因は二つあったのですが、まず一つ目がプッシュしたファイルの内、requirements
の記載です。
こちらにMySQLのコネクターを記載していなかった為、エラーが発生しました(因みに、最初はよくわからずMySQL自体のバージョンを記載していたのですが、これだとプッシュした時点でエラーが発生します)。
二つ目は、HerokuでMySQLを使う際はClearDBというものを使うらしく、そこから作ったアカウントが必要になります。
詳しい登録方法は割愛しますが、注意点として殆どのClearDBについての記事で、登録した後環境変数のCLEARDB_DATABASE_URL
をコピーして先頭をmysql2に変更してDATABASE_URL
に設定すると書いてありますが、こちらの操作はRubyの場合にのみ必要みたいです。
その為、今回はheroku addons:create cleardb:ignite
でClearDBを追加した際のCLEARDB_DATABASE_URL
のアカウントをそのまま使用しMySQLに接続することにしました。
CLEARDB_DATABASE_URL
にmysql://[username]:[password]@[hostname]/[db_name]?reconnect=true
の形で記載されているので、ターミナル上でmysql --host=[hostname] --user=[username] --password=[password] [db_name]
と入力すれば接続することができます。
4.MySQLでの準備
無事MySQLに入ることができたら必要なテーブルなどを作成していくのですが、ここで問題が発生。
普通にテーブルを作ろうとモニタでクエリを打ち込んだのですが、ERROR 2013
というエラーがでました。
その後に直ぐもう一度同じクエリを入力すると、別のエラーが出るものの実行自体はされました。
このことから、恐らくtimeout系の設定を変えなければならないと思ったのですが、変える為のコマンドは受け付けてくれませんでした。
色々調べた結果、根本的な原因としてDBの設定を変更するためにマイグレーションをしなければならないという結論になりました。
しかし、Flaskのマイグレーションのやり方を調べたものの全くと言っていいほど理解できませんでした。
元々MySQL自体にこだわっていたわけでは無かったので、一旦諦めてHerokuの標準DBであるpostgresqlを使うことにしました。
エラーメッセージで調べてみると、connect_timeout
などの数値を大きくすれば解決するようでしたが、根本的な解決策ではないというのとrootユーザーで入れば問題なく処理ができることから、ClearDB特有の問題があるのではないかと考えました。
そこで、ClearDBのサイトをよく見てみると、
データベースの編集等を行う際は、MySQL Workbench,Sequel Pro for Mac OS X,Navicatなどの使用を推奨します。
という旨の記載を発見。
これらは、直接クエリを入力せずにMySQLの操作を行うことができるGUIツールらしく、以前どなたかの記事でMySQL Workbenchを使っているのを見たのでこちらを試すことに。
詳しい操作方法などはこちらの記事を参考に、無事必要なテーブルを作成することができました。
余談ですがMySQLの練習がてら初めてrootユーザーでMySQLに入ろうとした際、パスワードがいくら探しても分かりませんでした。
MySQLをインストールしたときの所定のファイルに初期パスワードが記載してあるということまでは分かったのですが、いくら手順通りにやってもこのファイルを見つけることができませんでした。
結果としてこちらの記事を参考に何とかMySQLに入ることができました。
まとめ
長々と書きましたが要約すると
- MySQLのインストール
- コネクタのインストール
- HerokuでClearDBの登録(requirementsにコネクタのバージョンを記載)
-
MySQL WorkbenchでClearDB内の編集マイグレーション?
となります。
今回、データベースという新しい分野に挑戦してみて、今までやってきたコードを正確に書くということとは別の視点が必要になりとても勉強になりました。
ベータベースはほぼ全てのサービスで必須らしいので、今回を機にしっかりと知識を身に着け自分のスキルの幅を広げたいと思います。