mysql 不指定 ip 的串連預設都是 localhost

來源:互聯網
上載者:User

問題情境

在本地使用 docker 啟動了一個 mysql 容器,並把本地的 33067 連接埠映射到容器內 mysql 的 3306 ,我們假設容器的 ip 地址是 172.17.0.2 ,使用本地的 mysql 用戶端嘗試串連容器內部的 mysql 服務。

方法 1

由於是綁定本地的 33067 連接埠,所以在串連時指定連接埠號碼即可。

mysql -uroot -P33067
此時 mysql-client 實際上進入了本地的 mysql 服務,使用 status 命令可以查看

Connection id:      49
Current database:  
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.52-0ubuntu0.14.04.1 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         1 hour 35 min 41 sec
connecttion 資訊是本地的 unix socket,這樣的串連並沒有串連到容器內的 mysql。

方法 2

嘗試指定對應 host 和映射的本地連接埠,由於映射的是本地連接埠,所以 host 為 localhost

mysql -uroot -hlocalhost -P33067
依然串連的是本地的 mysql 服務。

方法 3

直接使用容器的的 ip 地址,預設連接埠是 3306

mysql -uroot -h172.17.0.2
串連成功,進入容器內部的 mysql 服務。

方法 4

使用 127.0.0.1 地址,並指定本機對應的連接埠 33067

mysql -uroot -h127.0.0.1 -P33067
串連成功,進入容器內部的 mysql 服務。

分析

方法 1 和 方法 2 串連的 host 其實都是 localhost(不指定 host,預設是 localhost),此時不論連接埠指定什麼,mysql-client 都嘗試使用 unix socket 的通訊方式,也就是本地的 socket ,所以如果要串連指定 ip 的 mysql 服務,必須要指定 ip ,即使該 ip 映射的是 localhost。

如上的情境由於容器內的 mysql 服務連接埠映射到本地的特定連接埠,即使是這種情況,串連依然需要指定本地 ip 127.0.0.1,而不是本地的 hostname localhost,因為一旦使用了 localhost,mysql-client 就嘗試使用本地的 unix socket 串連本地的 mysql 服務。

因而可以得知,mysql 不指定 ip 的串連預設都是 localhost,嘗試串連的是本地 mysql 服務,無論連接埠是什麼

Beware that by default, the mysql client tries to connect using a unix socket when you tell it to connect to localhost. So do use 127.0.0.1 and not localhost:

$ mysql -h 127.0.0.1 -P 3306 -u root

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.