42522


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

* * *

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

* * *

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

* * *

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


CC BY-SA 3.0
2018-03-20T02:13:11.663
42506
2018-03-21T09:01:51.603
2018-03-21T09:01:51.603
3060
7886
question
mysql network
localhostについて


サーバとクライアント、またはクライアント同士など他者とデータのやり取りを行うには宛先のアドレスやホスト名を知る必要がありますが、宛先が自分自身の場合に使用するのが
**localhost** (ループバックアドレス)です。

MySQLサーバへの接続には以下の構文で実行できますが、ホスト名のデフォルトは`localhost`なため、大抵の場合は省略することができます。

[code]

    $ mysql --host=localhost --user=myname --password=mypass mydb
    
[/code]

参考：  
[MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.2.2 MySQL
サーバーへの接続](https://dev.mysql.com/doc/refman/5.6/ja/connecting.html)

* * *

**補足**  
「サーバ」という単語は「サーバPC」「クライアントPC」の様に物理的なものを指す場合もあれば、「webサーバ」「SQLサーバ」などの様に役割・機能を指す場合もあるので、前者の物理的な端末を強調する意味で「ホスト」と私は呼ぶことが多いです。


CC BY-SA 3.0
2018-03-20T03:21:22.717
42508
2018-03-20T03:28:16.287
2018-03-20T03:28:16.287
3060
3060
42506
answer


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

ループバックアドレスは 「自分自身を表す仮想的なアドレス」です。  
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に接続できる状態です。


CC BY-SA 3.0
2018-03-20T08:23:57.230
42522
2018-03-20T08:23:57.230
5008
42506
answer


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 ソケットファイルを使用してローカルサーバーに接続しようとします


CC BY-SA 3.0
2018-03-21T01:29:35.200
42529
2018-03-21T01:29:35.200
3249
42506
answer