Networking
如何編寫我的 /etc/host 以使來自區域網路的其他機器可以訪問 MySQL
**編輯:**我正在嘗試從遠端主機訪問 Mysql:
mysql -u root -p -h 192.168.56.147
但我有這個消息:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.56.147' (111)
我已經在我的目標機器上完成了這個:
iptables -I INPUT -j ACCEPT
當我做一個 netstat 時,我有這個:
root@opencv:/# netstat -ntlp | grep LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1268/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1249/sshd tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1482/0 tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 1552/1 tcp6 0 0 :::22 :::* LISTEN 1249/sshd tcp6 0 0 ::1:6010 :::* LISTEN 1482/0 tcp6 0 0 ::1:6011 :::* LISTEN 1552/1
看來我的伺服器只在內部收聽,而不是從外部收聽。
這是我的主機文件:
127.0.0.1 localhost 127.0.1.1 opencv # The following lines are desirable for IPv6 capable hosts #::1 localhost ip6-localhost ip6-loopback #ff02::1 ip6-allnodes #ff02::2 ip6-allrouters
這是我的 hosts.allow :
# /etc/hosts.allow: list of hosts that are allowed to access the system. # See the manual pages hosts_access(5) and hosts_options(5). # # Example: ALL: LOCAL @some_netgroup # ALL: .foobar.edu EXCEPT terminalserver.foobar.edu # # If you're going to protect the portmapper use the name "rpcbind" for the # daemon name. See rpcbind(8) and rpc.mountd(8) for further information. # ALL: 192.168.0.0
telnet 也不起作用:
root@DEBIANBASE:~# telnet 192.168.56.147 3306 Trying 192.168.56.147... telnet: Unable to connect to remote host: Connection refused
根據 Alexander K 的評論,這裡是我的 mysql 配置的詳細資訊:
root@opencv:/# find . -name "my.cnf" ./var/lib/dpkg/alternatives/my.cnf ./etc/mysql/my.cnf ./etc/alternatives/my.cnf
但在每個文件中,沒有“綁定地址”選項或“跳過網路”選項的行(我在 Ubuntu 16.10 中)
深入研究後,文件在這裡:
nano /etc/mysql/mysql.conf.d/mysqld.cnf
我編輯有這個:
# Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. #bind-address = 127.0.0.1
然後我有了這個:
root@DEBIANBASE:~# mysql -u root -p -h 192.168.56.147 Enter password: ERROR 1045 (28000): Access denied for user 'root'@'192.168.56.153' (using password: YES)
通過在我的本地 MySQL 伺服器上執行此操作添加遠端使用者後:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.153' IDENTIFIED BY 'YOUR PASSWORD' WITH GRANT OPTION; FLUSH PRIVILEGES;
有效 !謝謝亞歷山大。
文件 /etc/hosts 和 /etc/hosts.allow 與 MySQL 綁定的 IP 無關。
正如您在此處看到的,它僅綁定到 127.0.0.1(環回)。
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1268/mysqld
您需要編輯您的 /etc/my.cnf 並像這樣註釋掉:
#skip-networking #bind-address = 127.0.0.1
這將使它綁定到所有可用的 IP。
顯然,如果您有多個 IP(內部和外部),您可以選擇僅綁定到內部 IP。
還要確保您有一個相應的 root 使用者,該使用者允許從您連接的 IP 進行訪問。