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

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

ただいまの
回答率

87.49%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 239

score 32

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

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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

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

DB_USERNAME_RO=
DB_PASSWORD_RO=

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

[mysqld]
socket=/tmp/mysql.sock

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/05/05 13:41

    ありがとうございますm(__)m
    mysql statusで確認しまして、socketのパスは大丈夫そうでした。

    >MySQLコマンドでデータベースに接続できて、テーブル作成や挿入権限が割り当てられていることを確認してください。
    rootユーザーでmysqlにログイン・権限も問題ないと確認できたのですが、
    表題のエラー文には rootユーザーが書かれていないことに気がつきました。

    これはそもそもrootでアクセスしていないということでしょうか。。?

    (Docker環境のキータ何度も参考にさせていただいております。ありがとうございます!m(__)m)

    キャンセル

  • 2021/05/05 14:16 編集

    ''@'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で一般ユーザーを作成して、そのユーザーで接続を試みるとどうなるかとか🤔

    ハッキリと原因がわからないので、考えられそうなことを試していくしかなさそうです。

    キャンセル

  • 2021/05/05 17:06

    度々ありがとうございますm(__)m

    いただいた内容を1づつ試してみたのですが、どうしても ''@'localhost' は変わらず .envが全く反映されていないようです。。

    プリインストールのApacheを初めて触ったため自分で何かおかしなことをしてしまったのかもしれませんが、もし何か他にお気づきの点がございましたらご教示いただけますと幸いですm(__)m

    キャンセル

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

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

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