今日はMySQL接続エラー「SQLSTATE[HY000] [2002] Connection refused」が発生した時の対処法を記載します。
環境
まずは発生した環境を記載します。
| 環境 | バージョン |
| Windows10 HOME | – |
| Docker | Docker version 20.10.11, build dea9396 |
| PHP | 7.4 |
| MySQL |
5.7
|
エラー内容
エラー発生時のファイル
PHPファイルにMySQLに接続するためのファイル
- dbconnect.php
<?php
$dbn = 'mysql:dbname=test;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = '***';
try {
$db = new PDO($dbn, $user, $password);
} catch (PDOException $e) {
echo 'DB connect error'.$e->getMessage();
die();
}
?>
- registration.php
<?php
session_start();
require('dbconnect.php');
---以下省略----
?>
「registration.php」ファイルを表示すると以下のようなエラーが発生。
DB connect errorSQLSTATE[HY000] [2002] Connection refused
エラーを見ると「SQLSTATE[HY000] [2002] Connection refused」と書いてありました。
MySQLに上手く接続できてないようです。
対処法
ググっていると以下のサイトに対処方法が書いてありました。
サイトによるとMySQLのIPアドレスをを入力することで解決できると書いてましたので試してみます。
MySQLにログインして以下コマンドを入力します。
cat /etc/hosts
コマンドを入力すると次のように表示されましたので、IPアドレスを確認します。
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.18.0.2 45338232747d
今回の場合「172.18.0.2」がMySQLのIPであるため、先ほどの「dbconnect.php」ファイルの「$dbn = ‘mysql:dbname=test;host=127.0.0.1;charset=utf8’;」のhost部分を書き換えます。
修正後のファイル
- dbconnect.php
<?php
$dbn = 'mysql:dbname=test;host=172.18.0.2;charset=utf8';
$user = 'root';
$password = '***';
try {
$db = new PDO($dbn, $user, $password);
} catch (PDOException $e) {
echo 'DB connect error'.$e->getMessage();
die();
}
?>
修正後「registration.php」を表示すると正常にMySQLに接続でき、表示することができました。
今回は以上となります。ありがとうございました。

コメント