実現したいこと
同一サーバ上で動くPHPからMySQL(127.0.0.1)へとアクセスしたいです。
Apache:2.4.59
PHP:8.1.29(モジュール版)
MySQL:8.0.36
発生している問題・分からないこと
PHPからMySQLへアクセスしようとした際、ホスト名をlocalhostとした場合は問題なくアクセス可能ですが、127.0.0.1とするとエラーが発生します。
ただしサーバ上で直接MySQLクライアントから一度でもログイン(mysql -u ユーザ名 -p -h 127.0.0.1)すると、それ以降はPHPから127.0.0.1指定でもエラーが発生しなくなり、問題なくアクセス可能な状態になります。
なお上記で-hを指定しない場合や、mysql -u ユーザ名 -p -h localhost、とした場合はエラーは解消されず引き続きアクセスできないという状況です。
MySQLの設定では[mysqld]にskip-name-resolveを設定しています。
MySQLユーザがアクセス可能なhostは127.0.0.1、localhost共に許可しています。
エラーメッセージ
error
1Access denied for user 'ユーザ名'@'127.0.0.1' (using password: YES)
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
MySQLユーザのhostを%で全許可した場合も、同様にMySQL起動直後はPHPから127.0.0.1ではエラーになります。
ただし今度はサーバ上でのログイン時、ホストを指定しなくても(mysql -u ユーザ名 -p)一度ログインするだけで、上記同様にPHPからのMySQLアクセスも可能になります。
補足
以前、マイナーバージョンの違うMySQL:8.0.34で動かしていた時はこのような症状は出ていませんでした。
ただPHPやApacheのマイナーバージョンもその時より上がっているのでその辺りが影響している可能性も否定できません。
なお、コメントいただいたリンク先にあった下記を設定ファイルに追記してみても症状は変わらず、mysqldを再起動した直後はPHPからのアクセスはエラーが発生しました。
[mysqld] bind-address = 127.0.0.1
またfirewallについても正しく開放できている認識(firewall-cmdでmysqlサービス登録)でいますが、一度ログイン成功するとそれ以降はPHPからのアクセスでもエラーが発生しない症状から、firewallでブロックされている可能性も低いと思います。
![guest](/img/icon/icnUserSample.jpg)