153
121

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLでlocalhostと127.0.0.1の違い

Last updated at Posted at 2014-06-25

全然違います

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

あとがき

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

以上、メモでした

153
121
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
153
121

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?