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

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

ただいまの
回答率

88.92%

PHPからMySQLに接続できない(Macローカル・Wordpress)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,703

miruka

score 13

前提・実現したいこと

まずMacにインストールされているApacheでローカルサーバーを動くようにしました。
そこでWordPress(5.1)が動くようにしようとしているところです。

データベースはインストールされていなかったので、
MySQL(8.0.15)をHomebrewでインストールしました。
そこから色々調べて試しましたが、WordPressのデータベース接続確立エラーを解消することができません。

何か大事なことが抜けているのかもしれません。
解決できるようアドバイスいただけると助かります。

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

ブラウザでWordPressにアクセスした際に下記のメッセージが出ます。

Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /Users/***/wordpress/wp-includes/wp-db.php on line 1612

wp-db.php の 1612行目は次の通りです。

mysqli_real_connect( $this->dbh, $host, $this->dbuser, $this->dbpassword, null, $port, $socket, $client_flags );

関係あるかわかりませんが、
/usr/local/var/***.local.err のログです。

[Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
[Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
[Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/usr/local/var/mysql' in the path is accessible to all OS users. Consider choosing a different directory.
[System] [MY-010931] [Server] /usr/local/Cellar/mysql/8.0.15/bin/mysqld: ready for connections. Version: '8.0.15'  socket: '/tmp/mysql.sock'  port: 3306  Homebrew.
[System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/tmp/mysqlx.sock' bind-address: '::' port: 33060

試したこと

  • mysql.sockを探してmy.cnfとphp.iniに記載するパスを揃える。
socket = /tmp/mysql.sock
pdo_mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
  • mysql.sockがちゃんと/tmp/にあるか確認。→lsコマンドであるのを確認できました。
  • MySQLを一度停止して起動。→「SUCCESS」と表示されます。
mysql.server stop
mysql.server start
  • ターミナルからWordPressに設定しているユーザでMySQLに接続。→rootや他のユーザでも入れました。
mysql -h localhost -u USER -p
  • wp-config.phpの設定を確認。→接続できた情報と同じか複数回確認しました。

他に試したこと

  • my.cnfでポートの設定などを消したり付けたり。→結果に変化はありませんでした。
[mysqld]
bind-address = 127.0.0.1
port=3306

[client]
port=3306
  • ホスト名を変える。→エラーメッセージが増えました。
/** MySQL のホスト名 */
define('DB_HOST', '127.0.0.1');
Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in /Users/***/wordpress/wp-includes/wp-db.php on line 1612
  • 別のDBやユーザを作成して試す。→結果に変化はありませんでした。
  • /var/log/mysqld.log を探すも見つからない。

phpinfo() の情報

※mysqlのキーワードがある部分を抜き出してきました。

PHP Version 7.1.23

mysqli
MysqlI Support enabled
Client API library version mysqlnd 5.0.12-dev - 20150407 - $Id: 38fea24f2847fa7519001be390c98ae0acafe387 $
Active Persistent Links 0
Inactive Persistent Links 0
Active Links 0
Directive Local Value Master Value
mysqli.allow_local_infile On On
mysqli.allow_persistent O On
mysqli.default_host localhost localhost
mysqli.default_port 3306 3306
mysqli.default_pw no value no value
mysqli.default_socket /tmp/mysql.sock /tmp/mysql.sock
mysqli.default_user admin admin
mysqli.max_links Unlimited Unlimited
mysqli.max_persistent Unlimited Unlimited
mysqli.reconnect Off Off
mysqli.rollback_on_cached_plink Off Off
mysqlnd
mysqlnd enabled
Version mysqlnd 5.0.12-dev - 20150407 - $Id:38fea24f2847fa7519001be390c98ae0acafe387 $
Compression supported
core SSL supported
extended SSL supported
Command buffer size 4096
Read buffer size 32768
Read timeout 31536000
Collecting statistics Yes
Collecting memory statistics No
Tracing n/a
Loaded plugins mysqlnd,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password,auth_plugin_sha256_password
API Extensions pdo_mysql,mysqli
mysqlnd statistics 0の項目は省略
bytes_sent 184
bytes_received 252
packets_sent 4
packets_received 4
protocol_overhead_in 16
protocol_overhead_out 16
active_connections 18446744073709551614
active_persistent_connections 18446744073709551614
PDO
PDO support enabled
PDO drivers mysql, pgsql, sqlite
pdo_mysql
PDO Driver for MySQL enabled
Client API version mysqlnd 5.0.12-dev - 20150407 - $Id:38fea24f2847fa7519001be390c98ae0acafe387 $
Directive Local Value Master Value
pdo_mysql.default_socket /tmp/mysql.sock /tmp/mysql.sock
PHP Credits
Module Authors
MySQL driver for PDO George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter
MySQLi Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel
MySQLnd Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlüter
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • miruka

    2019/03/06 09:23

    ありがとうございます。
    phpinfo()から関連のありそうな部分を質問に追記しました。

    キャンセル

  • gh640

    2019/03/06 13:17

    私は質問させていただいたのにお力になれずでしたが・・・ CHERRY さんの回答で無事解決されたようでよかったです :D

    キャンセル

  • miruka

    2019/03/06 14:23

    gh640さんもありがとうございました!

    キャンセル

回答 1

checkベストアンサー

+2

PHP info の結果を見て思い出しましたが...

Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]

のエラーが出ているのは、MySQL 8 で、デフォルトの認証方式 が変更になった影響ですね。

6.5.1.3 Caching SHA-2 Pluggable Authentication

インストールされている PHP が、MySQL の新しい認証方式に対応していないので、MySQL で、従来形式のパスワードを使うように設定した方が良さそうです。


mysql コマンドで、mysql データベースに接続してから、ユーザーに従来形式のパスワードを設定する。

ALTER USER 'root'@'localhost' identified WITH mysql_native_password BY 'パスワード';

次に my.cnf で、デフォルトを従来形式のパスワードを使うようにする

default_authentication_plugin=mysql_native_password

MySQL Server を再起動。

上記の設定するとどうなりますか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/03/06 12:14

    ありがとうございます!
    ご指摘通り、認証方式の違いが原因でした。

    wp-config.phpに設定するユーザの認証方式を
    mysql_native_password に変更することで解決いたしました。

    ただmy.cnfでの設定は逆にエラーが出たため、
    記載なしで試したところ問題なく接続できるようになりました。
    ```
    mysql: [ERROR] unknown variable 'default_authentication_plugin=mysql_native_password'.
    ```

    キャンセル

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

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

関連した質問

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