Casual Developers Note

エンジニアやデザイナー向けの技術情報・英語学習情報・海外留学情報・海外旅行情報を提供中。世界を旅して人生を楽しもう。

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • お問い合わせ
現在の場所:ホーム / アーカイブsg

2018年7月27日 By KD コメントを書く

MySQLで「ERROR 2003 (HY000): Can’t connect to MySQL server」と怒られた時の対処法

MySQLで「ERROR 2003 (HY000): Can’t connect to MySQL server」と怒られた時の対処法

WordPressを自前で構築する場合にMySQLの接続がうまくいかないことはよくある事象です。今回は、MySQLとの接続で「ERROR 2003 (HY000): Can’t connect to MySQL server」というエラーが発生した場合の対処法を紹介します。

はじめに

この記事に辿り着いているということは、MySQLの設定を終えたつもりで、外部のホストからMySQLのサーバ(X.X.X.X)にログインしようとした時に以下のエラーが出たのではないでしょうか。

$ mysql -h X.X.X.X -P 3306 -u wordpress -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'X.X.X.X' (111)

今回はAWS上に、WordPress用のEC2インスタンスとMySQL用のEC2インスタンスを構築した前提で、「ERROR 2003 (HY000): Can’t connect to MySQL server」エラーが発生した場合の対処法を紹介します。

対処法

考えられる原因は複数あるので、原因を一つ一つ潰す形で対処しましょう。

EC2のSecurity Groupの設定に問題は無いか?(AWS限定の問題)

EC2インスタンスはSecurity Group(仮想的なファイアーウォール)によって接続可能なIPおよびポートを許可しています。サーバーの構成にもよるのですが、WordPress用のEC2インスタンスからMySQLのEC2インスタンスにポート3306で接続したいとすると、MySQL用のEC2インスタンスのSecurity GroupのInboundの設定で、WordPress用のEC2インスタンスのIPからTCPの3306ポートの接続を許可してある必要があります。

以下はTCPの3306ポートを全てのIPに対して許可する場合のInboundの設定です。

Ec2 sg mysql

MySQLに慣れており、EC2に慣れていない人は、だいたいSecurity Groupの設定ミスが原因です。確認してみましょう。

EC2内のファイアーウォールの設定に問題は無いか?

単にAWSが提供しているイメージからEC2インスタンスを作っただけの場合は関係ありませんが、その後に自前でiptablesなどでファイアーウォールを設定した場合は、それが原因の可能性があります。設定を見直しましょう。

MySQLのポートは正しいか?

MySQLのデフォルトのポートは3306ですが、変更した覚えがあればそれが原因の可能性があります。以下のように確認してみましょう。

mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+

3306を想定しており、上記のように一致してればOKです。

MySQLに接続できるホスト設定に問題は無いか?

仮にwordpressというユーザを作ったとして、そのユーザがどのホストから接続できるようになっているかを確認しましょう。デフォルトでは「localhost」(ループバックアドレスなので同じホスト内のみ接続可能)となっているので、変更した覚えがなければそれが原因です。

mysql> select user, host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| wordpress        | %         |
| debian-sys-maint | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

「wordpress@”%”」の設定となっている場合は、全てのホストからwordpressユーザで接続できます。

MySQLの設定ファイルに問題は無いか?

「/etc/mysql/mysql.conf.d/mysqld.cnf」ファイルのbind-addressも確認しましょう。デフォルトでは「127.0.0.1」(ループバックアドレスなので同じホスト内のみ接続可能)となっているので、接続したいホストに応じてに変更する必要があります。例えば「0.0.0.0」に設定すれば全てのホストからの接続を許可できます。

$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
...
#bind-address            = 127.0.0.1
bind-address            = 0.0.0.0
...

ここまでくればエラーは解決したはずです。

おまけ

外部ホストからのMySQLの接続が成功したとして、WordPressの画面を表示しようとした場合に「Error establishing a database connection」というエラーが発生している場合があります。

このエラーの意味はWordPressとMySQLとの接続に問題があるという意味ですが、この記事で解決したエラーがなくなっている状態で発生している場合は原因はおそらく一つです。WordPressのDB_HOSTの設定を見直しましょう。

$ vi /var/www/wordpress/wp-config.php
...
define('DB_HOST', 'X.X.X.X');
...

今回の場合は、明示的にMySQL用のEC2インスタンスのプライベートIPを指定してあげる必要があります。

最後に

いかがでしたか?これでMySQLの接続問題は解決できたことでしょう。また、AWSを使っていなくても、AWS以外の部分はそのまま解決策になると思いますので、検索してこの記事にたどり着いた人は試して見て下さい。それでは。

カテゴリ : 技術 Tips & Tutorials タグ : aws, ec2, mysql, sg, wordpress

ブログ更新情報や海外の関連情報などを配信する無料メルマガ

Sponsored Links

About Author

KD

世界を旅し日本を愛するエンジニア。大学でコンピュータサイエンスの楽しさを学び、日本の大手IT企業で働く中で、新しい技術やスケールするビジネスが北米にある事に気づく。世界に挑戦するための最大の壁が英語であったため、フィリピン留学およびカナダ留学を経て英語を上達させた。現在は日本在住でエンジニアとして働きつつ、次の挑戦に備えて世界の動向を注視している。挑戦に終わりはない。このブログでは、エンジニアやデザイナー向けの技術情報から、海外に留学したい人向けの留学情報、海外に興味がある人向けの海外旅行情報など、有益な情報を提供しています。

https://casualdevelopers.com/

最近の投稿

  • 2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年JS周辺のバックエンド寄りの注目技術!ネクストNodeJSの「Deno」と分散型パッケージレジストリの「Entropic」の紹介

    2020年1月13日
  • 今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    今さら聞けないJavaによる関数型プログラミング入門 ~ラムダ式、ストリーム、関数型インターフェース~

    2019年11月4日
  • ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    ReactのためのEslintおよびPrettierの設定方法 ~Airbnb JavaScript Style Guideの適用~

    2019年10月30日
  • BashからZshに移行する方法(Mac編)

    BashからZshに移行する方法(Mac編)

    2019年10月21日
  • Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    Create React Appを使わないでゼロからReactの開発環境を構築する方法(Webpack/Docker編)

    2019年9月30日

カテゴリ

  • 技術 Tips & Tutorials (100)
  • 技術塾 (6)
  • ライフハック (26)
  • 海外留学 (12)
  • 英語学習 (3)
  • コラム (6)

アーカイブ

最高の学習のために

人気記事ランキング

  • MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
    MySQLで「ERROR 2003 (HY000): Can't connect to MySQL server」と怒られた時の対処法
  • Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
    Jupyter Notebookで「The kernel appears to have died. It will restart automatically.」というエラーが出た場合の原因と対処法
  • 爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
    爆速でJenkinsをマスターしよう(GitHubアカウント統合編) ~ JenkinsのGitHub Organizationの設定方法 ~
  • Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
    Expressで「Cannot set headers after they are sent to the client」と怒られた時の対処法
  • SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
    SAKURAのメールボックスで独自ドメインのメールを設定し、Gmail経由で送受信する方法
  • バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
    バンクーバー留学豆知識:バンクーバーのATMで日本の銀行のキャッシュカードを使ってお得にお金を引き出す方法
  • [tips][perl] Perlで文字コードをいい感じに処理する方法
    [tips][perl] Perlで文字コードをいい感じに処理する方法
  • PythonでWebスクレイピング入門(Scrapy+Selenium編)
    PythonでWebスクレイピング入門(Scrapy+Selenium編)
  • Amazon EC2インスタンスにSSHできなくなった時の対処法
    Amazon EC2インスタンスにSSHできなくなった時の対処法
  • SpringBootのProfile毎にプロパティを使い分ける3つの方法
    SpringBootのProfile毎にプロパティを使い分ける3つの方法

Bitcoin寄付 / BTC Donation

Bitcoinを寄付しよう

BTC
Select Payment Method
Personal Info

Donation Total: BTC 0.0010

このブログの運営のためにBitcoinでの寄付を募集しています。お気持ち程度の寄付を頂けると管理者の励みになります。

Bitcoin寄付について知りたい方はこちらの記事へ

ビットコイン取引ならここ

  • ホーム
  • 技術 Tips & Tutorials
  • 技術塾
  • ライフハック
  • 海外留学
  • 英語学習
  • コラム
  • サイトマップ
  • タグ一覧
  • プライバシーポリシー
  • お問い合わせ

Copyright © 2023 KD - Casual Developers Notes