質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
Django

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

MySQL

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1239閲覧

django、ソケットを介してローカルMySQLサーバーにアクセスできない

saku__

総合スコア1

Django

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

MySQL

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/05/14 06:35

編集2021/05/14 15:25

######django、ソケットを介してローカルMySQLサーバーにアクセスできません

前提・実現したいこと

runserverした時にローカルホストへアクセス出来るようにしたい。

djangoで作ったアプリをGAEをGoogle App Engineにデプロイしようと思っています。
その際にApp Engineスタンダード環境での Djangoの実行を参考に

gcloud sql instances describe [YOUR_INSTANCE_NAME]

に事前に作っておいたCloud SQL インスタンスの接続名を入れMySQLへ接続しました。
特に問題は無かったのですが、その後のpython manage.py runserverをしたところ
とエラーになってしまいました。以前runserverしていた時は問題なくローカルホストへアクセス出来ていました。

発生している問題・エラーメッセージ

python manage.py runserverした時のエラーメッセージが以下になります。

django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/cloudsql/プロジェクト名:us-central1:〇〇-instance(作成したCloud SQL インスタンス)' (2)")

またGCP、App EngineのアプリケーションエラーにOperationalError: (2003, "Can't connect to MySQL server on '127.0.0.1' (111)")とありました。
同じくGCPのオペレーションロギングのクエリ結果には

{ "textPayload": "Traceback (most recent call last): File \"/layers/google.python.pip/pip/lib/python3.8/site-packages/django/db/backends/base/base.py\", line 219, in ensure_connection   self.connect() File \"/layers/google.python.pip/pip/lib/python3.8/site-packages/django/utils/asyncio.py\", line 26, in inner   return func(*args, **kwargs) File \"/layers/google.python.pip/pip/lib/python3.8/site-packages/django/db/backends/base/base.py\", line 200, in connect   self.connection = self.get_new_connection(conn_params) File \"/layers/google.python.pip/pip/lib/python3.8/site-packages/django/utils/asyncio.py\", line 26, in inner   return func(*args, **kwargs) File \"/layers/google.python.pip/pip/lib/python3.8/site-packages/django/db/backends/mysql/base.py\", line 234, in get_new_connection connection = Database.connect(**conn_params) File \"/layers/google.python.pip/pip/lib/python3.8/site-packages/MySQLdb/__init__.py\", line 130, in Connect return Connection(*args, **kwargs) File \"/layers/google.python.pip/pip/lib/python3.8/site-packages/MySQLdb/connections.py\", line 185, in __init__ super().__init__(*args, **kwargs2) MySQLdb._exceptions.OperationalError: (2003, \"Can't connect to MySQL server on '127.0.0.1' (111)\")", "insertId": "609e8e320002a0e6b9e5b86d", "resource": { "type": "gae_app", "labels": { "version_id": "20210514t234717", "project_id": "really-site-313406", "zone": "asia-northeast1-1", "module_id": "default" } }, "timestamp": "2021-05-14T14:50:26.172262Z", "severity": "ERROR", "labels": { "clone_id": "00c61b117ce871cd7450a677b50311234c543f9dc2eb4c0e51c522002311a23d7343c4599c7151cf66b51fac54e3f9f612601bc56ab269bcfad519e0c5941986adebd2b409d5d9f23adfefbb53ed" }, "logName": "projects/really-site-313406/logs/stderr", "receiveTimestamp": "2021-05-14T14:50:26.268170929Z" }

とあり、127.0.0.1のMySQLサーバーに接続できませんと言われてしまいました。

該当のソースコード

setting.py

if os.getenv('GAE_APPLICATION', None) is None: #GAE 本番環境 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': os.environ['DB_NAME'], 'USER': os.environ['DB_USERNAME'], 'PASSWORD': os.environ['DB_USERPASS'], 'HOST': '/cloudsql/{}'.format(os.environ['DB_CONNECTION']), } } else: #開発環境 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': os.environ['DB_NAME'], 'USER': os.environ['DB_USERNAME'], 'PASSWORD': os.environ['DB_USERPASS'], 'HOST': '127.0.0.1', 'PORT': '3306', } }

試したこと

MySQLで"Can't connect to local MySQL server through..."って出た時の対処法
Django の runserver 立ち上げたら "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)" とかなる場合のメモに書かれているようにsetting.pyに'HOST': '127.0.0.1',を記述したり、mysql.server restartをしましたが変わらず。

補足情報(FW/ツールのバージョンなど)

macOS Big Surです。
python3.8.5 pyenv+venv環境です。
私自身、初心者でしてdjangoでアプリを作るのもデプロイするのも今回が初めてになります。
私の力では解決できず、皆さんのお力を借りたいと思い質問させていただきました。
拙い文章になりますが、解決法をどうか教えていただきたいです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/05/14 22:28

おはようございます。 問題文拝見しました。 以下のことを確認いただけますか? 1. if os.getenv('GAE_APPLICATION', None) is None: のelse内でprint文をして、接続先としてローカルmysqlが選ばれているのか? 2. if elseせずに、開発環境データベースのみをコードに記載して、python manage.py runserver は立ち上がるのか? ご確認のほど、よろしくお願いいたします。????‍♂️
saku__

2021/05/15 02:22

ありがとうございます。 1の「if os.getenv('GAE_APPLICATION', None) is None: のelse内でprint文をして」というのは具体的にどう記述すればいいでしょうか?
退会済みユーザー

退会済みユーザー

2021/05/15 09:28

if os.getenv('GAE_APPLICATION', None) is None: ... else: print('hoge') とかして、elseの方に向いているのか、知りたいイメージです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問