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

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

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

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Q&A

解決済

2回答

1336閲覧

macプリインストールのapacheでlaravelをブラウザ表示するとSQLSTATE[HY000] [1045] Access denied for user ''@'localhost'

hiro..

総合スコア79

MySQL

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

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

0グッド

0クリップ

投稿2021/05/05 03:16

編集2021/05/05 08:12

お世話になっております。

macOS catalina :バージョン10.15.7
MacにプリインストールされているApache(2.4.41)
brewでインストールしたphp7.2
brewでインストールしたmysql5.7

にてLaravelのプロジェクトをブラウザで確認したいです。

昨日初めてプリインストールされているapacheに触り、設定につまずきこちらで質問させていただきました。
https://teratail.com/questions/336560

無事ブラウザでlaravelプロジェクトが読み込めているようなのですが、表題のようにmysqlのエラーが出てしまい、解決できずにおります。

エラーの全文は以下のとおりです

SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: NO) (SQL: select `template_id` from `template` where `date_display` <> 0000-00-00 00:00:00 and `date_display` <= 2021-05-05 11:49:28 order by `date_display` desc limit 1)

laravelの.envではこのように設定しています

DB_CONNECTION=mysql DB_DATABASE=DBの名前 DB_HOST=127.0.0.1 DB_USERNAME=root DB_PASSWORD=

ターミナルからはDBにログインして操作ができ、php artisanコマンドも通ります。
ブラウザ表示だけがダメなのでapacheの設定かと思い、

CakePHP ver 2.x の環境構築を行った際のメモ

こちらのmysqlとphpをつなげる項を参考にphp.iniを作成し、

pdo_mysql.default_socket= /tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock mysql.default_socket = /tmp/mysql.sock

を追加しました。
その際、mysql.default_socket = が私の環境では無かったため、参考サイトに合わせて追加いたしました。

そのあと、PDOを利用するためにコメントアウトをはずすはずなのですが、
php.iniに

;extension=php_mysql.dll ;extension=php_pdo_mysql.dll

はどちらもなく、php_mysql.dllの単語で検索しても出てこず、、どこを変更すればいいのかがわからない状態です。

現状Apacheを再起動しても、ブラウザでは同じエラーが出たままになっております。

Laravel側のログ

[previous exception] [object] (Doctrine\DBAL\Driver\PDOException(code: 1045): SQLSTATE[HY000] [1045] Access denied for user ''@'localhost' (using password: NO) at /Users/hiro/Works/test/ec/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php:31)

Apache側のアクセスログ

1609942904&theme=auto HTTP/1.1" 404 196 127.0.0.1 - - [05/May/2021:12:11:11 +0900] "GET / HTTP/1.1" 500 713756 127.0.0.1 - - [05/May/2021:12:11:12 +0900] "GET /_debugbar/assets/stylesheets?v=1609942904&theme=auto HTTP/1.1" 404 196 127.0.0.1 - - [05/May/2021:12:11:12 +0900] "GET /_debugbar/assets/javascript?v=1609942904 HTTP/1.1" 404 196 127.0.0.1 - - [05/May/2021:12:11:15 +0900] "GET /info.php HTTP/1.1" 200 109222

どなたか、お知恵をお借りできますでしょうか。
何卒よろしくお願いいたします。

======================
追記1

コメントいただいたファイルのパス・mysqlのユーザー権限を調べてみました。

mysql.sockへののパス

mysql> status -------------- mysql Ver 14.14 Distrib 5.7.34, for osx10.15 (x86_64) using EditLine wrapper Current user: root@localhost Server version: 5.7.34 Homebrew Connection: Localhost via UNIX socket UNIX socket: /tmp/mysql.sock

ユーザー一覧

mysql> SELECT user, host FROM user; +---------------+-----------+ | user | host | +---------------+-----------+ | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+-----------+

rootユーザーの権限

mysql> SHOW GRANTS for 'root'@'localhost'; +---------------------------------------------------------------------+ | Grants for root@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION | | GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+

上記を確認しまして、
・/tmp/mysql.sockのパスは合っている
・rootユーザーの権限は問題ない

のかなと思いました。

ただ改めてエラー文を読むと、Access denied for user ''@'localhost' となっており、
@の前のrootが抜けていることに気がつきました。正しく接続されていれば、'root'@'localhost'となるはずですよね。。?

そもそもrootで接続していないのでしょうか。。

======================
追記2

コメントいただき更に検証いたしました。

laravel .env を修正 #DB_HOST=127.0.0.1 DB_HOST=localhost
php artisan config:clear php artisan cache:clear

ここまででエラーは変わらず

mysqlで新しくユーザーを追加して、 laravelの.envを変更してみました。

mysql> SELECT user, host FROM user; +---------------+-----------+ | user | host | +---------------+-----------+ | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | shoku | localhost | +---------------+-----------+ ↑↑ 新しい shoku というユーザーを追加

権限を付与

mysql> SHOW GRANTS FOR shoku@localhost \G *************************** 1. row *************************** Grants for shoku@localhost: GRANT ALL PRIVILEGES ON *.* TO 'shoku'@'localhost'

新しいユーザー情報を .envに反映

DB_CONNECTION=mysql DB_DATABASE=test_DB DB_HOST=localhost DB_USERNAME=shoku DB_PASSWORD=secret

再びキャッシュ削除

php artisan config:clear php artisan cache:clear

念のため sudo apachectl restart でapache再起動

ここでブラウザ確認をしても、やはり

Access denied for user ''@'localhost' (using password: NO)

となって、laravelの.envが反映されていないようです。。

my.cnfは昨日 mysql5.7をインストールした際に変更しており、以下のようになっております。

hiro@Hiro apache2 % cat /usr/local/etc/my.cnf # Default Homebrew MySQL server config [mysqld] # Only allow connections from localhost bind-address = 127.0.0.1 default-time-zone = 'Asia/Tokyo' sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

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

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

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

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

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

guest

回答2

0

自己解決

解決いたしました。.envにて以下の空欄があったため、それが影響していたようです。

DB_USERNAME_RO=
DB_PASSWORD_RO=

apache達の設定は表題のエラーには関係なく・・・お騒がせいたしました。

回答くださった方、ありがとうございます!!

投稿2021/05/07 22:56

hiro..

総合スコア79

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

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

0

mysql.sock はPHPとMySQLとの通信に使うための空ファイルとなるので、MySQLの出力場所と合わせる必要があります。

MySQLのソケットファイルの出力パスと合ってるか確認してみてください。

[mysqld] socket=/tmp/mysql.sock

おそらくはデータベースに接続するための接続情報に誤りがあると思われます。

まずはLaravelでデータベースに接続する以前にMySQLコマンドでデータベースに接続できて、テーブル作成や挿入権限が割り当てられていることを確認してください。(rootユーザーであれば権限は大丈夫ですが本番環境では推奨はされていません。)

投稿2021/05/05 03:51

ucan-lab

総合スコア888

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

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

hiro..

2021/05/05 04:41

ありがとうございますm(__)m mysql statusで確認しまして、socketのパスは大丈夫そうでした。 >MySQLコマンドでデータベースに接続できて、テーブル作成や挿入権限が割り当てられていることを確認してください。 rootユーザーでmysqlにログイン・権限も問題ないと確認できたのですが、 表題のエラー文には rootユーザーが書かれていないことに気がつきました。 これはそもそもrootでアクセスしていないということでしょうか。。? (Docker環境のキータ何度も参考にさせていただいております。ありがとうございます!m(__)m)
ucan-lab

2021/05/05 05:18 編集

''@'localhost' となってるので、rootユーザーでアクセスされていない感じがありますね。 一応キャッシュが関係ないことを確認したいので、 php artisan config:clear して動作を確認してみて欲しいです。 あとlocalhostと127.0.0.1は別ユーザーになるので、 DB_HOST=localhost とした方がいいかもしれません。 my.cnfでskip-name-resolveが有効になっていれば127.0.0.1でも大丈夫なはずです。 my.cnfの設定情報も捕捉に追加してもらえたらと思います。 あとはMySQLで一般ユーザーを作成して、そのユーザーで接続を試みるとどうなるかとか???? ハッキリと原因がわからないので、考えられそうなことを試していくしかなさそうです。
hiro..

2021/05/05 08:06

度々ありがとうございますm(__)m いただいた内容を1づつ試してみたのですが、どうしても ''@'localhost' は変わらず .envが全く反映されていないようです。。 プリインストールのApacheを初めて触ったため自分で何かおかしなことをしてしまったのかもしれませんが、もし何か他にお気づきの点がございましたらご教示いただけますと幸いですm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問