全然違います
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
あとがき
ソースを読めるって大切だよなぁって思います。
読みたくて読んでるわけじゃないけど、食べたくないけど食べないと体調悪くなるって感じと似てるよね。
だってそんなことしてるって思わないじゃない。
以上、メモでした