あなたが想像した簡単ではありません!mysql接続方式を設定する場合、localhostと127.0.0.1の違いがあります.

5357 ワード

語の解釈:
Framework:SwooleFramework、テスト時にユーザーに問い合わせる、文select*from user where UserName='abc'limit 1.
Host=localhost.port:portは、localhost:25158などの具体的な値です.これは、自分のクライアントに接続されているポート番号を表し、ここではportを統一的に使用します.port付きの接続は、TCPで接続されていることを証明し、socketで接続されているのはlocalhostのみで、後ろにポートportはありません.
hostファイルの役割はよく知られていないはずですが、主な役割はドメイン名とIPをマッピングすることです.winでもlinuxでも、初期インストール後はlocalhostと127.0.0.1の間でデフォルトでマッピングされますが、変更することはできますが、お勧めしません.したがって、通常、localhostを使用する場合は、hostを検索してマッピングされたIPを検索し、IPを利用して最後の接続を行います.
たまたまブログを見て、http://blog.csdn.net/xifeijian/article/details/12879395は、localhostが127.0.0.1より優れていると述べ、当時は自分の認識を覆し、間違っていると考え、反論証的なコメントを出した.実はこの博文の言う点は间违いなくて、ただとても详しくなくてと特定の条件を加えていないだけで、だから私は今日特に真実で、ここで特にテストと総括を続けました.
一、pingコマンド、またはブラウザなどのアプリケーションを使用して、localhostはまずhostファイルのマッピング構成を経て、IPを得て、それからIPを使って後続の使用をします.
ホストファイルを変更する前に:
[root@localhost /]# ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=23 ttl=64 time=0.169 ms
64 bytes from localhost (127.0.0.1): icmp_seq=24 ttl=64 time=0.050 ms
64 bytes from localhost (127.0.0.1): icmp_seq=25 ttl=64 time=0.093 ms
64 bytes from localhost (127.0.0.1): icmp_seq=26 ttl=64 time=0.091 ms

ホストファイルを変更した後:
[root@localhost /]# ping localhost
PING localhost (127.0.0.2) 56(84) bytes of data.
64 bytes from localhost (127.0.0.2): icmp_seq=1 ttl=64 time=0.103 ms
64 bytes from localhost (127.0.0.2): icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from localhost (127.0.0.2): icmp_seq=3 ttl=64 time=0.049 ms
64 bytes from localhost (127.0.0.2): icmp_seq=4 ttl=64 time=0.050 ms

信じないなら自分でテストを修正して見てもいいし、ブラウザで開けて見てもいいです.どうせ私は手紙です.
二、MySQLの*nixシステムへの接続方式は二つあります.それぞれSocketとTcp/ip方式です.Winの下にはTCP方式しかないはずです.考証しません.以下はCentos 7の下でテストした結果だけです.(恥ずかしい!開発してから7年も経ったというのに、MySQLのSocket接続方式が分からず、この構成を見ただけで、あまり注意していませんでした.)
まずコマンドifconfigを使用すると、2つのNICが動作しています.
[root@localhost /]# ifconfig
ens33: flags=4163  mtu 1500
        inet 10.0.0.19  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::20c:29ff:fe23:ccb  prefixlen 64  scopeid 0x20
        ether 00:0c:29:23:0c:cb  txqueuelen 1000  (Ethernet)
        RX packets 27050  bytes 2920042 (2.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10918  bytes 5431431 (5.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 0  (Local Loopback)
        RX packets 547  bytes 106047 (103.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 547  bytes 106047 (103.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Ens 33は正常な対外のネットカードで、loネットカードはシステムのループバックネットカードで、そのipが127.0.0.1であることに注意して、私达はちょうどloネットカードのオンとオフの状态のmysqlの接続をテストすることができて、もっと良い反证明mysqlのsocketの接続の作用.
前提環境:mysql.userテーブル内のデータ
Host		User
127.0.0.1	root
localhost	root
%		root

a)ifconfig lo up状態でmysqlのデフォルト設定(/etc/my.cnfで空に設定)を使用します.what the hell?mysqlコマンドはsocketを使用して正常に接続されていますが、FrameworkはTCP接続しか使用できません.なぜlocalhostのsocket接続を正常に使用できないのでしょうか.次のステップを見てください.
mysql -uroot -p   		:    		show full processlist;Host=localhost
Framework  localhost		:    
Framework  127.0.0.1		:    		show full processlist;Host=localhost.port
b)ifconfig lo up , /etc/my.cnf , , 。
[client]
socket=/tmp/mysql.sock

[mysql]
socket=/tmp/mysql.sock

[mysqld]
socket=/tmp/mysql.sock

[mysqld_safe]

[mysqladmin]
socket=/tmp/mysql.sock
この で をテストした 、mysqlコマンドとFrameworkはlocalhostを し、socket は に できますが、Framework 127.0.0.1の 、 としてTCP を しています.
mysql -uroot -p   		:    		show full processlist;Host=localhost
Framework  localhost		:    		show full processlist;Host=localhost
Framework  127.0.0.1		:    		show full processlist;Host=localhost.port

c)ifconfig lo down 、/etc/my.cnfは、ステップbの を する.loネットワークカードが になってもmysqlコマンドとFrameworkはsocket でmysqlデータベースを に できますが、127.0.0.1を すると が ではなく、loネットワークカードに しています.
mysql -uroot -p   		:    		show full processlist;Host=localhost
Framework  localhost		:    		show full processlist;Host=localhost
Framework  127.0.0.1		:    

d)ステップcを として、/etc/my.cnf が になっていると、Frameworkがsocket を できてもmysqlの ファイルを しく する があります.そうしないと、 に の が します.
mysql -uroot -p   		:    		show full processlist;Host=localhost
Framework  localhost		:    
Framework  127.0.0.1		:    

まとめ:MySQLには、TCPとSocket、mysql が-hオプションを しない 、/etc/myにかかわらず、2つの があります.cnfが しく されているかどうか、loネットワークカードが に されているかどうかにかかわらず、Socket でMySQLデータベースに できます.Frameworkで localhostを してSocket を するには、/etc/myを しく する があります.cnfですが、loネットワークカードが に されているかどうかにかかわらず、 じようにできます.MySQL でlocalhostを する はSocketl を しますが、NICを する はありません. は127.0.0.1よりも いはずです.これは のアプリケーションとは います.
しかし、localhostを するとどれだけ くなるかは かりません.その にはデータベースを しく する があります.そうしないと、 が からない が します.127.0.0.1を すると に はないはずですが、loネットワークカードが に されている り、 する は ないです. さんは の に わせて することができます.