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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Django

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

MySQL

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

2回答

8611閲覧

pythonでmysqlに接続できない

eto

総合スコア13

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Django

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

MySQL

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

2クリップ

投稿2017/07/08 09:51

編集2017/07/08 13:01

vagrantを使用してdjangoでpythonの開発をしようとしています。
デフォルトのDB接続がsqlite3だったので、mysqlに変えたいのですが、うまく行きません。

以下設定です。

[vagrant@localhost django_test]$ pip freeze
Django==1.11.3
django-bootstrap-form==3.2.1
mysql-connector-python==2.0.4
mysqlclient==1.3.10
PyMySQL==0.7.11
pytz==2017.2

settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangodb',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '',
'PORT': '',
}
}

先頭に
import pymysql
pymysql.install_as_MySQLdb()
を追加

sqlite3の設定だとdjangoのスタートページで「It worked!」と出るのですが、
mysqlに変えるとアクセスできなくなります。
何か他に設定が必要でしょうか?宜しくお願い致します。
Python 3.5.2

[vagrant@localhost django_test]$ ./manage.py migrate
Traceback (most recent call last):
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/base/base.py", line 189, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 274, in get_new_connection
conn = Database.connect(**conn_params)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/init.py", line 90, in Connect
return Connection(*args, **kwargs)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 706, in init
self.connect()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 932, in connect
self._request_authentication()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 1152, in _request_authentication
auth_packet = self._read_packet()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 1014, in _read_packet
packet.check_error()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 393, in check_error
err.raise_mysql_exception(self._data)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/err.py", line 107, in raise_mysql_exception
raise errorclass(errno, errval)
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "./manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/management/init.py", line 363, in execute_from_command_line
utility.execute()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/management/init.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/management/base.py", line 327, in execute
self.check()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/management/base.py", line 359, in check
include_deployment_checks=include_deployment_checks,
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/management/commands/migrate.py", line 61, in _run_checks
issues = run_checks(tags=[Tags.database])
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/checks/registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/core/checks/database.py", line 10, in check_database_backends
issues.extend(conn.validation.check(**kwargs))
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/mysql/validation.py", line 9, in check
issues.extend(self._check_sql_mode(**kwargs))
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/mysql/validation.py", line 13, in _check_sql_mode
with self.connection.cursor() as cursor:
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/base/base.py", line 254, in cursor
return self._cursor()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/base/base.py", line 229, in _cursor
self.ensure_connection()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/utils.py", line 94, in exit
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/base/base.py", line 213, in ensure_connection
self.connect()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/base/base.py", line 189, in connect
self.connection = self.get_new_connection(conn_params)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 274, in get_new_connection
conn = Database.connect(**conn_params)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/init.py", line 90, in Connect
return Connection(*args, **kwargs)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 706, in init
self.connect()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 932, in connect
self._request_authentication()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 1152, in _request_authentication
auth_packet = self._read_packet()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 1014, in _read_packet
packet.check_error()
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/connections.py", line 393, in check_error
err.raise_mysql_exception(self._data)
File "/home/vagrant/.pyenv/versions/3.5.2/lib/python3.5/site-packages/pymysql/err.py", line 107, in raise_mysql_exception
raise errorclass(errno, errval)
django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

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

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

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

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

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

miyahan

2017/07/08 11:56

ログを張って下さい
eto

2017/07/08 12:18

ログというか、画面上に
eto

2017/07/08 12:18

このサイトにアクセスできません 192.168.33.10 で接続が拒否されました。と出ます
miyahan

2017/07/08 12:19

ブラウザのログではありません。Djangoのログです。
eto

2017/07/08 12:34

すみません、まだそこまで行っていなくて上手くログが出ません。。
miyahan

2017/07/08 12:54

なるほど・・・。というかDB周りのトラブルなら確実にマイグレーションが失敗するような気がするのですが、./manage.py migrate の結果を張ってくれますか?
eto

2017/07/08 13:01

追記しました。
guest

回答2

0

root以外のユーザーを作成するとどうですか?

create database foo_db;
create user foo_user identified by 'foo_password';
grant all on foo_db.* to 'foo_user'@'%';
flush privileges;

投稿2017/07/24 02:58

Kentaro0919

総合スコア258

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

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

YuhoIto

2018/08/14 07:13

投稿者ではありませんが、こちらで解決しました。 root ユーザを利用した場合に起こる問題のようですね。
JackMaron

2020/04/27 01:24

同じ状況で大変困っていました。アドバスのとおり解決しました。ありがとうございました。
guest

0

ベストアンサー

1045, "Access denied for user 'root'@'localhost' (using password: YES) というデータベースへのログインが失敗したメッセージを出力しているので、MySQLサーバーが正常に起動していないか、単純にユーザー名・パスワードが誤っていると思われます。

まずはMySQL単体できちんと動作しているか確認をとってください。Djangoとの接続はそのあとです。

投稿2017/07/09 03:42

miyahan

総合スコア3095

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

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

eto

2017/07/09 08:09

rootユーザのパスワードが設定されていなかったので、設定して再度./manage.py migrateするのですが、 ConnectionRefusedError: [Errno 111] Connection refused というエラーで出て上手く接続出来ません。
miyahan

2017/07/09 08:20

MySQLサーバーには mysql コマンド等を使ってログインできますか?
eto

2017/07/09 15:26

はい、出来ます。
miyahan

2017/07/10 02:58

MySQLサーバーに接続し、SHOW VARIABLES LIKE 'socket'; のクエリを実行してソケットのパスを確認してください。次にそのパスを Django の設定ファイルの DATABASES の 'HOST' に書き込んで下さい。 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'djangodb', 'USER': 'root', 'PASSWORD': 'root', 'HOST': '/var/lib/mysql/mysql.sock', # ← ここ 'PORT': '', } } 接続できるようになりましたか?
eto

2017/07/10 14:19

出来ませんね。。 pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)") などと出ます
miyahan

2017/07/11 09:08

エラーの内容が Connection refused(接続失敗)から Access denied(接続したが認証失敗)に変わったので事象は進展したと思います。 あとはユーザー名・パスワード・DB名が違う(もくしは作成し忘れてる)くらいしか考えられないですね。。。お手上げです。
shimizukawa

2017/07/14 02:04

`'HOST': '',` のところを `'HOST': '127.0.0.1',` にするとどうですか?
eto

2017/07/15 12:50

miyahan ありがとうございました。 shimizukawaさん ダメですね。。
shimizukawa

2017/07/16 00:40

うーん、MySQLサーバー側でアカウントを作る時に接続元もlocalhsotや127.0.0.1など固定して作るので(どのサーバーからでも接続OKとする作り方もある)、そこを疑ったのですが、だめででしたか。少なくとも通信はできているようなので、ID,PW,DB名,接続元ホスト名,のどこかが間違えているのは確かだと思います(これも推測の域ではあります)。それらを1つ1つ確認したり、MySQL側のログを見たりして細かく見ないと解決できなそうな気がします。
eto

2017/07/23 01:27

そうですか。。 ありがとうございました、色々試してみます。
shimizukawa

2022/08/22 05:48

`'HOST': '',` のところを `'HOST': '127.0.0.1',` にしたうえで、MySQL側に `root@127.0.0.1` ユーザー(または `root@%` ユーザー)を作成すれば、おそらく接続できると思います。 参照: https://ja.stackoverflow.com/questions/43608/
shimizukawa

2022/08/23 00:48

追加調査したところ、Ubuntu-18.04 と MySQL-5.7.2 以降の組み合わせであれば、以下の様に行うのが正しいようです。 1. Ubuntu-18.04 に MySQL-5.7.2以降を apt install でインストールする 2. `sudo mysql` で(OSのrootで)接続する 3. `ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'newpassword';` を実行する 4. `mysql -u root --password newpassword -h 127.0.0.1` で接続確認する 私が調査した内容はこちらです [localhostで動作するMySQLにrootでtcp接続する - 清水川のScrapbox](https://scrapbox.io/shimizukawa/localhost%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8BMySQL%E3%81%ABroot%E3%81%A7tcp%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問