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

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

ただいまの
回答率

91.35%

  • WordPress

    4784questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • MySQL

    4392questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Linux

    2702questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • CentOS

    2011questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • phpMyAdmin

    484questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Centos7 phpmyadmin,WordPress localhostだと接続できない(127.0.0.1はOK)

解決済

回答 2

投稿 2017/12/05 17:13 ・編集 2017/12/06 16:52

  • 評価
  • クリップ 1
  • VIEW 98

leo

score 1

前提・実現したいこと

phpMyAdminのconfig.inc.phpを設定することなく、ログインしたい。
($cfg['Servers'][$i]['host'] = 'localhost';での接続)

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

#2002 MySQL サーバにログインできません

centos7でmysqlとphpをソースインストールした際に、上記エラーとなりました。
centos6やdebian6,7ではこのようなことがなかったのですが、config.inc.phpの
$cfg['Servers'][$i]['host'] = 'localhost';
を
$cfg['Servers'][$i]['host'] = '127.0.0.1';
にすると接続できました。

socketの指定がうまくいってないのかと、my.cnfおよびphp.iniを確認しても問題なく
/tmp/mysql.sockが指定されてました。

ちなみにwordpressも同様でした。
wp-config.phpのdefine('DB_HOST', 'localhost');
だとうまく接続できず、
wp-config.phpのdefine('DB_HOST', '127.0.0.1');
だと接続できます。

該当のソースコード

ここにご自身が実行したソースコードを書いてください

試したこと

試しに、yumでphpとMySQLをインストールしなおすとconfig.inc.phpがなくても接続できました。
問題の切り分けのため、phpはソース、mysqlはyumにしても、接続できました。

なので、yumとソースインストールでMySQLのsocketの挙動が違うのではないかと想像できるのですが、
ソースインストールしたmysqlのどこを修正すればうまく動作するのかが不明でした。

補足情報(言語/FW/ツール等のバージョンなど)

CentOS Linux release 7.4.1708 (Core) 
PHP 7.1.10(php5.6系も同様でした。)
MySQL 5.6.38

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

恐らくターミナルからも

mysql -h 127.0.0.1 -u ユーザー名 -p


ではログイン可能で

mysql -h localhost -u ユーザー名 -p


ではログイン不可ではないかと思います。

MySQLサーバーにログインして

select user,host from mysql.user;

の結果が

+-----------+-----------+
| user      | host      |
+-----------+-----------+
| ユーザー  | 127.0.0.1 |
| ユーザー  | ::1       |
+-----------+-----------+


多分このようにlocalhostが無いのが原因だと思います。

なので

CREATE USER 'ユーザー名'@'localhost' IDENTIFIED BY 'パスワード';


を実行してlocalhostに対するユーザーを追加して以下のようになればlocalhostでログインできるようになると思います。

+-----------+-----------+
| user      | host      |
+-----------+-----------+
| ユーザー  | 127.0.0.1 |
| ユーザー  | ::1       |
| ユーザー  | localhost |
+-----------+-----------+

投稿 2017/12/06 17:42

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/12/06 21:32

    ご回答ありがとうございます!
    返事が遅くなり申し訳ありません。

    試したところ、
    mysql -h localhost -u ユーザー名 -p
    で接続ができており、
    以下のコマンドを実行したところ、
    mysql> select user,host from mysql.user;
    +-------------+-----------+
    | user | host |
    +-------------+-----------+
    | root | 127.0.0.1 |
    | root | ::1 |
    | | localhost |
    | test | localhost |
    | root | localhost |
    | | user2 |
    | root | user2 |
    +-------------+-----------+
    7 rows in set (0.00 sec)

    と、localhostの設定がある状態でございます。

    しかしながら、phpMyAdminで接続すると、#2002 MySQL サーバにログインできません
    のエラーが表示され、localhost接続ができてない状況でございました。

    ほかに確認事項や対象方法等ございましたら、ご教授いただけますでしょうか。
    よろしくお願いいたします。

    キャンセル

  • 2017/12/06 22:08

    違いましたか・・・

    エラー内容を書かれてたのですね。失礼しました。
    このサイトとか参考になりませんか?

    【phpMyAdmin】#2002 MySQL サーバにログインできませんのときの対処法
    http://tweeeety.hateblo.jp/entry/2015/07/11/191823

    キャンセル

  • 2017/12/06 23:47

    早速のご確認ありがとうございます。

    いただきました、リンク先ですが、既に確認済みの内容でございました。
    この手のエラーはこのリンクの問題で解決できているようで、
    グーグルで検索してもほぼこの情報しか見つけることができませんでした。

    根本的な原因は一緒なのかもしれませんが、php.iniもmy.cnfも
    実際稼働しているsocketの指定は同一の場所を指定してました。

    centos6では問題なく接続できること、Centos7の場合でも、yumだとうまくいくのがなぞで、何か設定でうまく動作すればと試してはいるのですがうまくいかな状況でございます。

    また、確認事項やアイデア等ございましたら、ぜひご教授くださいませ。
    よろしくお願いいたします。

    キャンセル

  • 2017/12/07 17:15

    >実際稼働しているsocketの指定は同一の場所を指定してました。
    この意味が分からないです。

    http://www.eastforest.jp/esthome/mysql/3600

    上記サイトを参考にMySQLをソースからインストールしてphpMyAdminを開いたら、確かにconfig.inc.phpがlocalhostではログインできず127.0.0.1に直すとログインできました。
    PHPは面倒だったのでremiの7.1です。
    以下の修正でlocalhostでログイン可能になりました。
    尚、my.cnfにsocketの指定はしていません。

    mysql.sockの場所を調べる
    # find / -name mysql.sock
    /usr/local/mysql/mysql.sock

    php.iniでsocketに何も未指定なので/usr/local/mysql/mysql.sockを指定
    # vi /etc/php.ini
    pdo_mysql.default_socket=
    mysqli.default_socket=

    pdo_mysql.default_socket= /usr/local/mysql/mysql.sock
    mysqli.default_socket= /usr/local/mysql/mysql.sock

    # systemctl restart httpd

    でもYUMでインストールしたMySQLの場合、何も触らなくてもlocalhostでアクセスできるのは何故か?となるんでしょうね?
    CentOSデフォルトのMySQLのインストール先が/var/lib/mysql/で、デフォルトでそれを見るようになっており、php.iniに指定が無ければ/var/lib/mysql/を見るんでしょう(多分)


    なので
    ディレクトリが無ければ作成
    # mkdir /var/lib/mysql

    シンボリックリンク作成
    # ln /usr/local/mysql/mysql.sock /var/lib/mysql/

    またはMySQLをコンパイルする際に/var/lib/mysql/にインストールするように指定するのが正しい方法なのかもしれませんが詳しくは分かりません。

    キャンセル

  • 2017/12/07 19:32

    >>実際稼働しているsocketの指定は同一の場所を指定してました。
    >この意味が分からないです。

    きちんと伝える文章になっておらずすみません。。

    ソースインストールの際にはmy.cnfにて/tmp/mysql.sockを指定しております。
    実際にも/tmp配下にmysql.sockができており、php.iniも/tmp/mysql.sockを指定して接続を試したのですが、うまくいかない状況でした。


    ご指摘いただいた、シンボリックリンク作成
    # ln /usr/local/mysql/mysql.sock /var/lib/mysql/

    で、php.iniの指定も/var/lib/mysql/mysql.sockを指定するとつながるようになりました。
    /tmp/mysql.sockだとなぜダメなのか不明ですが、一度この設定で様子を見ようと思います。

    Space-Monkeyさんのおかげで、やりたいことは実現できました。
    何度もお付き合いいただきありがとうございました。
    改めてお礼申し上げます。

    キャンセル

  • 2017/12/07 20:08

    シンボリックリンクを作れば多分php.iniのmysql.sockの指定は不要だと思います。
    色々試してみてください。

    キャンセル

  • 2017/12/07 23:14

    CentOS 7 で systemd 配下の httpd の場合、/lib/systemd/system/httpd.service で `PrivateTmp=true` となっていて、/var/tmp/, /tmp/ は独自のネームスペースとなるため、/tmp/mysql.sock にはアクセスできません。

    キャンセル

  • 2017/12/08 12:40

    Space-Monkeyさん、
    何度もコメントいただきありがとうございます!

    php.iniは消すと2022エラーがでましたので、php.iniのデフォルトは/tmp/mysql.sockあたりになっているのかなと思われます。で、/tmp/mysql.sockは指定してもうまく動かないため、/var/lib/mysql/mysql.sock等の指定が必要な感じでした。

    キャンセル

  • 2017/12/08 12:40

    TaichiYanagiyaさん
    ご回答ありがとうございます。

    Cent7のsystemdのserviceではそのような設定がなされていたのですね。勉強不足でした。
    試しにhttpd.serviceの設定をfalseにしたのですが、それだけだとうまく/tmp/mysql.sockを読み込んでくれないのか、これまで通り2022エラーとなっておりました。
    ちなみにfalseにした場合、デメリットや不都合な状況は発生するのでしょうか。であれば、falseにしない設定で調整が必要なのかなと思ってます。

    キャンセル

+1

/etc/hosts で localhost が ::1 (IPv6) に解決されるからだと思います。
::1 行の localhostlocalhost.localdomain を削除するといいと思います。

投稿 2017/12/06 17:04

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/12/06 23:48 編集

    ご回答ありがとうございます。
    返信が遅くなり申し訳ありません。

    /etc/hostsで
    ::1 localhost6 localhost6.localdomain6
    のようにして、localhost, localhost.localdomainを除外してみたのですが、#2002 MySQL サーバにログインできません
    のエラーが表示され、localhost接続ができてない状況でございました。

    yumでmysqlをインストールしたときは/etc/hostsは特にいじらずとも接続できたのですが。。。

    ほかに確認事項や対応方法はございますでしょうか。

    お手数おかけいたしますが、よろしくお願いいたします。

    キャンセル

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

ただいまの回答率

91.35%

関連した質問

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

  • WordPress

    4784questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • MySQL

    4392questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Linux

    2702questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • CentOS

    2011questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • phpMyAdmin

    484questions

    phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。