🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

3219閲覧

DjangoのDBの接続先をさくらインターネットのphpMyAdminに繋げる方法がわかりません

Msk07

総合スコア26

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2019/12/12 15:40

編集2019/12/12 15:41

DjangoのDBの接続先をさくらインターネットのphpMyAdminに繋げる方法がわかりません・

▪️ 端末
Mac

▪️ 使用ドライバ
pymysql, mysqlclient ※ 両方試しました

▪️ 試したこと
現状試したことは、以下の通りです。

  1. mysqlのlocalhost接続 → 成功
  2. Sequel Proを用いた接続 → 成功
  3. さくらインターネットのphpMyadmineへの接続 → 失敗

▪️ setting.pyのデータベース接続文字列

python

1DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.mysql', 4 'NAME': 'データベース名', # phpMyAdminで作成したデータベース名を記載しています 5 'USER': 'ユーザ名', # [xxx.sakura.ne.jp]の[xxx]部分を記載しています 6 'PASSWORD': 'xxxxxxx', 7 'HOST': 'xxxxxx.xx.sakura.ne.jp', 8 'PORT': '' # ここは空にしています 9 } 10}

▪️ manage.py
manage.pyの行頭に以下2行を加えています

python

1import pymysql 2pymysql.install_as_MySQLdb()

▪️ エラー詳細

$ python manage.py migrate execute_from_command_line(sys.argv) File "/anaconda3/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line utility.execute() File "/anaconda3/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/anaconda3/lib/python3.7/site-packages/django/core/management/base.py", line 316, in run_from_argv self.execute(*args, **cmd_options) File "/anaconda3/lib/python3.7/site-packages/django/core/management/base.py", line 350, in execute self.check() File "/anaconda3/lib/python3.7/site-packages/django/core/management/base.py", line 379, in check include_deployment_checks=include_deployment_checks, File "/anaconda3/lib/python3.7/site-packages/django/core/management/commands/migrate.py", line 59, in _run_checks issues = run_checks(tags=[Tags.database]) File "/anaconda3/lib/python3.7/site-packages/django/core/checks/registry.py", line 71, in run_checks new_errors = check(app_configs=app_configs) File "/anaconda3/lib/python3.7/site-packages/django/core/checks/database.py", line 10, in check_database_backends issues.extend(conn.validation.check(**kwargs)) File "/anaconda3/lib/python3.7/site-packages/django/db/backends/mysql/validation.py", line 9, in check issues.extend(self._check_sql_mode(**kwargs)) File "/anaconda3/lib/python3.7/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode with self.connection.cursor() as cursor: File "/anaconda3/lib/python3.7/site-packages/django/db/backends/base/base.py", line 255, in cursor return self._cursor() File "/anaconda3/lib/python3.7/site-packages/django/db/backends/base/base.py", line 232, in _cursor self.ensure_connection() File "/anaconda3/lib/python3.7/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/anaconda3/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/anaconda3/lib/python3.7/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection self.connect() File "/anaconda3/lib/python3.7/site-packages/django/db/backends/base/base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "/anaconda3/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 227, in get_new_connection return Database.connect(**conn_params) File "/anaconda3/lib/python3.7/site-packages/pymysql/__init__.py", line 94, in Connect return Connection(*args, **kwargs) File "/anaconda3/lib/python3.7/site-packages/pymysql/connections.py", line 325, in __init__ self.connect() File "/anaconda3/lib/python3.7/site-packages/pymysql/connections.py", line 630, in connect raise exc django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'xxxxxx.xx.sakura.ne.jp' (timed out)")

▪️ 最後に
個人的にはSSHの設定をsetting.pyのデータベース設定に付け加えないといけないのではないかと考えているのですが、
記載方法がわかりません。

お手数をおかけしますが、どうかご教授のほどお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatamyiwathy

2019/12/13 02:56

「Sequel Proを用いた接続 → 成功」とはさくらインターネットのMySQLに接続が成功したということですか? 「さくらインターネットのphpMyadmineへの接続 → 失敗」というのはブラウザでphpMyAdminへの接続ができないということですか?
Msk07

2019/12/13 04:50

ご質問ありがとございます。 >「Sequel Proを用いた接続 → 成功」とはさくらインターネットのMySQLに接続が成功したということですか? はい、そうです。接続が成功し、SQLの実行も正常に行うことができました。 >「さくらインターネットのphpMyadmineへの接続 → 失敗」というのはブラウザでphpMyAdminへの接続ができないということですか? ブラウザではなく、migrationの実行でエラーとなります。 そのため、ブラウザも開くことができません。※ 掲題の件と同様の内容です。
tatamyiwathy

2019/12/16 09:33

Sequel Proで接続したときのデータベースのアカウント情報とsettings.pyのデータベースのアカウント情報は一致していますか?
Msk07

2019/12/21 08:28

ご質問ありがとうございます。 SSH設定を除くと、一致しています。 Sequel Proでは、SSH設定を行って接続していますが、 setting.pyではSSH設定の記載を行っておりません。 ただ、setting.pyでSSH設定の記載を行おうと思いましたが、 グーグル検索をしても、どのように記載をすれば良いかわからず、困っています。
Msk07

2019/12/24 13:34 編集

設定はしていません。 Mysqlで証明書の発行処理をした覚えがなく、どのような情報(ca, key, cert)を入力すれば良いのかがわかりませんでした... sequelProの方では、以下情報の入力で接続することができたので、こちらの情報を入力するのだろうと思いつつもどう設定するのかがわからずうまくいっていないです。 -------------sequelProで入力した情報---------------------------- ① MySQLホスト ② ユーザ名 ③ パスワード ④ データベース ⑤ SSHホスト ⑥ SSHユーザ ⑦ SSHパスワード -------------------------------------------------------------------------- setting.pyの設定では、SSHの部分のみ記載がない状態となっております。
tatamyiwathy

2019/12/23 03:17 編集

証明書を発行していないのであればca,key,certあたりの設定は不要です。 settings.pyのDATABASEの設定はこちらです。 ・`ENGINE'はデフォルトのまま ・'NAME'はデータベース名。MySQLでデータベースを作成しているはずなのでその名前です。 ・'USER''はMySQLアカウント名。 ・'PASSWORD'はMySQLアカウントのパスワード。 ・'HOST'はデータベースのあるホスト。MySQLとDjangoが動いているサイトは同じホストですか?そうであれば空欄でOKです。 ・`ポート`はデータベースのポート。デフォルトなら空欄。
Msk07

2019/12/24 13:44 編集

ご回答ありがとうございます >MySQLとDjangoが動いているサイトは同じホストですか? 同じホストと考えています。一応空欄も試してみましたがだめでした。 その他、記載をいろいろと変えて見ましたが、 やはり、うまく接続することができませんでした。 上記sequelproの接続情報とsetting.pyの接続設定を突き合わせると以下の通りになるのですが、何か間違っているのですかね... 'ENGINE': 'django.db.backends.mysql', 'NAME': # ④ データベース 'USER': # ② ユーザ名 'PASSWORD': # ③ パスワード 'HOST': # ① MySQLホスト 'PORT': '' # ここは空にしています ちなみに、sequelproでも⑤~⑦のSSH設定をしなければ繋がらないので、 ⑤~⑦の設定をしないといけないのではないかと考えているのですが違うのでしょうか?
tatamyiwathy

2019/12/25 01:36

MySQLとDjangoが同じサイトでホストされてるなら⑤~⑦は不要だと思うんですねよー。自分はその設定が必要になったことはありません。
tatamyiwathy

2019/12/25 01:54

MySQLはさくらインターネットのサイトでホストされていることが質問から判明しています。 「mysqlのlocalhost接続 → 成功」とあるlocalhostとはさくらインターネットのサイトで間違いないでしょうか。sshクライアントなどでさくらインターネットのサイトへコンソール接続して mysql -u root -p などでMySQLに接続できてるということでしょうか?
Msk07

2019/12/25 23:57 編集

> MySQLとDjangoが同じサイトでホストされてるなら すみません、記載を間違えていました。同じホストではないと考えています。Djangoはローカルで立ち上げているのでさくらインターネットのホストとは違うのかなと思っています。 > 「mysqlのlocalhost接続 → 成功」とあるlocalhostとはさくらインターネットのサイトで間違いないでしょうか こちらはローカルPCで立ち上げたMySQLのことを示しています。 こちらのコマンドで立ち上げたMySQLにつなぎました $ mysql.server start $ mysql -uroot ローカルホストに接続した際のsetting.pyの接続文字列は下記の通りです。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', 'USER': 'root', 'PASSWORD': '' 'HOST': '', 'PORT': '', } }
Msk07

2019/12/26 00:11

以下、コマンドでアクセスを試みて見ましたが、Djangoと同様のエラーとなりました。 ・コマンド mysql -h ①MySQLホスト -u ② ユーザ名 -p ・エラー名 ERROR 2003 (HY000): Can't connect to MySQL server on '①MySQLホスト' (60)
tatamyiwathy

2019/12/26 01:07

mysqlを実行したのはさくらインターネットのサイトですか?
Msk07

2019/12/26 04:13

いえ、pcのターミナル上で実行しました
tatamyiwathy

2019/12/26 04:50

なるほど。ではMySQLのホスト側でポート(デフォルトだと3306)がふさがってたりしないですかね?
Msk07

2019/12/26 14:19

>ではMySQLのホスト側でポート(デフォルトだと3306)がふさがってたりしないですかね? その線で調べて見たところ、さくらレンタルサーバの外部接続は遮断されているとのことでした...(>_<) https://help.sakura.ad.jp/206228781/ SeaquelProで接続できたのは、ポートフォワーディングという技術を用いているみたいです https://www.tam-tam.co.jp/tipsnote/program/post14579.html 下記のサイトにpythonでSSH接続するためのコードがありましたが、 Djangoでの接続を考えるとsetting.pyのdatabase設定などが難しそうですね... https://blog.honjala.net/entry/2016/06/25/013131
tatamyiwathy

2019/12/27 01:17

いまはDjango自体も手元のPCで動いているのですか? MySQLとDjangoがさくらインターネットのサイトで稼働するなら、MySQLとDjangoはローカルで通信するのでポートがふさがってても問題ありません。
Msk07

2019/12/27 04:26

>いまはDjango自体も手元のPCで動いているのですか? Django自体も手元のPCで動いており、Herokuを使用してデプロイをおこなっているので さくらインターネットのサイトで動作させることができなさそうです。 >MySQLとDjangoがさくらインターネットのサイトで稼働するなら、MySQLとDjangoはローカルで通信するのでポートがふさがってても問題ありません。 そうなんですね! ならDjangoをさくらインターネットのサイトにデプロイすることも考えてみます。 新味にご対応いただきありがとうございました! ずっと詰まっていた箇所だったので、本当に助かりました!
guest

回答1

0

自己解決

さくらレンタルサーバの外部接続は遮断されているとのことでした...(>_<)
https://help.sakura.ad.jp/206228781/

SeaquelProで接続できたのは、ポートフォワーディングという技術を用いているみたいです
https://www.tam-tam.co.jp/tipsnote/program/post14579.html

下記のサイトにpythonでSSH接続するためのコードがありましたが、
Djangoでの接続を考えるとsetting.pyのdatabase設定などが難しそうですね...
https://blog.honjala.net/entry/2016/06/25/013131

tatamyiwathyさん、ご協力ありがとうございました。

投稿2019/12/28 10:09

Msk07

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問