Help us understand the problem. What is going on with this article?

MySQLでlocalhostと127.0.0.1の違い

More than 5 years have passed since last update.

全然違います

windows環境でCygWin入れてると怒られますよね?
※ Linuxでもとても難解な問題が出てくるので環境依存関係無いです(バグです)
mysql -uroot -p して怒られます。

ekaneko@hoge ~
$ mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql.sock' (2)

こんな感じで怒られます。
省略した場合は localhost が暗黙で使用されるためです。
※ MySQL5.6.19 ソースより
127.0.0.1でやってみます。

ekaneko@hoge ~
$ mysql -h 127.0.0.1 -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.6.19-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| ************       |
| ************       |
| mysql              |
| mytest             |
| performance_schema |
| ************       |
| test               |
| world              |
| ************       |
| ************       |
+--------------------+
11 rows in set (0.00 sec)

mysql>

問題なくOKです。

違いは接続方法

ホスト名が localhost だった場合、パフォーマンスのためなのかソケットが暗黙で使用されます。
ですが。Windowsにはそんなの用意されてません。
その場合 127.0.0.1 を使うとTCP/IP接続が同PCであっても使用され問題なくTCP経由で接続できます。

覚える意味があるのか?

MySQLデーモンを二重化してポートをそれぞれに割り振った場合、面倒な事になります。
localhostを接続先ホストに指定すると、ポート指定のオプションを無視しsocket経由で接続しようとします。
Windowsの場合はつながらないだけですが、Linuxの場合はデフォルトソケット(ini記載かも?)に繋がってしまい、訳わからない状況になります。

mysql -h localhost -uroot -p --port=3307 こうやった場合でもポート指定が無視されちゃいます。
mysql -h 127.0.0.1 -uroot -p --port=3307 この場合はすんなり接続されるはずです(もう忘れました)

ソケット接続する場合は、事前にソケットを作成して、
それぞれのデーモンにソケットをそれぞれ割り当てちゃんと指定すれば動きます。たぶん。
mysql -uroot -p --socket=/var/run/mysql01.sock
mysql -uroot -p --socket=/var/run/mysql02.sock

あとがき

ソースを読めるって大切だよなぁって思います。
読みたくて読んでるわけじゃないけど、食べたくないけど食べないと体調悪くなるって感じと似てるよね。
だってそんなことしてるって思わないじゃない。

以上、メモでした

TanukiTam
ライセンスについて: 投稿内容について、無償にて利用(複製、複写、改変、第三者への再許諾その他のあらゆる利用を含む。)する権利を許諾するものとします。 ※ Qiitaライセンスも参照下さい
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした