localhostについて


localhostの意味が分からないので調べているのですが

* * *

**Q1.分類すると「localhost」と「localhost以外」に分けられる？**  
・例えば「localhost以外」には何があるでしょうか？  
・外部ホスト？  
・localhost機以外のIPアドレス？

* * *

**Q2.家からサーバOSへSSH接続後、MySQLへログイン**  
・これは、一旦サーバOSへ接続しているからlocalhost扱い？

* * *

**Q3.外部ホストからアクセスとは具体的にどういう状況ですか？**  
・家からサーバOSへ接続せずに、MySQLへ直接ログイン？？




「ループバックアドレス」と「ホスト名」について理解するとわかってくると思います。

ループバックアドレスは 「自分自身を表す仮想的なアドレス」です。  
IPv4では「127.0.0.1」、IPv6においては「::1」(0:0:0:0:0:0:0:1)が使われます。

ホスト名は、IPアドレスに紐付けられた
任意の名前です。IPネットワークでは、各ホスト（ノードと言ったりします）のネットワークインターフェースには、固有のIPアドレスが設定されます。IPアドレスは人間には覚えにくいので
人間にわかりやすい ホスト名をつけます。ホスト名とIPアドレスの変換はOSが暗黙のうちに行うので、両方を覚える必用はありません。

慣習的に「127.0.0.1」のホスト名は「localhost」とつけられます。

[code]

    （ホスト名とIPアドレスの例）
    hostname     ip address
    ------------ --------------------
    www          172.16.1.10
    host1        192.168.0.1
    host2        192.168.0.2
    localhost    127.0.0.1   ←ループバックアドレス
    
[/code]

> Q1.分類すると「localhost」と「localhost以外」に分けられる？

→ Yes  
先述の通り ループバックアドレスは特殊なアドレスなのでそういった分類も可能だと思います。

> Q2.家からサーバOSへSSH接続後、MySQLへログイン

→サーバーOS上で起動しているMySQLであればYesです。  
localhostは自分自身なので、SSHでログインしたサーバー自身に接続します。

> Q3.外部ホストからアクセスとは具体的にどういう状況ですか？

→ Mysqlが動いているサーバー以外からのアクセス可能ということだと思います。  
つまり、あなたのPCやその他の環境から直接MySQLに接続できる状態です。




UNIX/Linux で MySQLの場合は `localhost` は特別な意味を持っています。mysqlコマンドの `--host` で指定する
`localhost` は `127.0.0.1` や `::1` のことではありません。

TCP/IPではなくUNIXソケット(`/tmp/mysql.sock`等)を使用してローカルホストのmysqldに接続することを意味します。

<https://dev.mysql.com/doc/refman/5.6/ja/connecting.html>

> Unix では、MySQL プログラムはホスト名 localhost
> を、ほかのネットワークベースのプログラムと比較して想定されるのとはおそらく異なる、特別な方法で扱います。localhost への接続で、MySQL
> プログラムは Unix ソケットファイルを使用してローカルサーバーに接続しようとします

