![为什么我的 MySQL 远程连接失败(VLAN)?](https://linux22.com/image/828730/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20MySQL%20%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5%E5%A4%B1%E8%B4%A5%EF%BC%88VLAN%EF%BC%89%EF%BC%9F.png)
我再次遇到了我的特殊朋友 MySQL 的问题:D
我有两台服务器 - 一台数据库服务器和一台 Web 服务器 - 它们通过 VLAN 连接。
现在我想让 Web 服务器能够远程访问数据库服务器的 MySQL。因此我创建了用户用户在mysql.用户。
用户的主机是 xxx.yyy.zzz.9,它是 Web 服务器的内部 IP 地址。
xxx.yyy.zzz.0 是网络。我还创建了用户与主人%。
只要我在数据库服务器上使用 MySQL 并以以下身份登录用户,一切正常。但尝试以用户来自 xxx.yyy.zzz.9 使用
mysql -h xxx.yyy.zzz.8 -u user -p
(其中 xxx.yyy.zzz.8 是数据库服务器的内部 IP),我得到
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.yyy.zzz.8' (110)
所以我尝试在 my.cnf 文件中激活Bind-Address
。好吧,如果我使用 xxx.yyy.zzz.8,什么都不会改变。但如果我尝试 xxx.yyy.zzz.9 并尝试重新启动 MySQL,我会得到
mysql stop/waiting
start: Job failed to start
我检查了日志文件,什么也没有。数据库服务器的 MySQL 甚至没有注册,Web 服务器尝试远程连接。
我的想法是,也许我没有正确配置 VLAN,尽管我问了一个真正了解这些事情的人,而他告诉我我做的一切都是正确的。
我写的内容/etc/networking/interfaces
是:
#The VLAN
auto eth1
iface eth1 inet static
address xxx.yyy.zzz..8
netmask 255.255.255.0
network xxx.yyy.zzz.0
broadcast xxx.yyy.zzz.255
mtu 1500
ifconfig
返回
eth1 Link encap:Ethernet HWaddr xxxxxxxxxxxxxx
inet addr:xxx.yyy.zzz.8 Bcast:xxx.yyy.zzz.255 Mask:255.255.255.0
inet6 addr: xxxxxxxxxxxxxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:241146 errors:0 dropped:0 overruns:0 frame:0
TX packets:9765 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17825995 (17.8 MB) TX bytes:566602 (566.6 KB)
Memory:fb900000-fb920000
对于 eth1,我配置了什么。(这是针对数据库服务器的,Web 服务器看起来类似)。
ethtool eth1
返回:
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000003 (3)
drv probe
Link detected: yes
(这是针对数据库服务器的,网络服务器看起来类似)。
Bind-Address
它不起作用之后我在 my.cnf 中将其注释掉了。
答案1
我得到了它!
psa-firewall
由 Plesk 激活和配置的服务正在运行。它拒绝所有传入的 MySQL 请求。
我通过 Plesk 重新配置了它,允许它让 MySQL 请求通过。我不知道我是否也可以在 shell 中做到这一点,但停用它肯定有帮助!但我认为这可能有点危险。
答案2
Mysql 默认只监听 loopback 接口。因此,即使用户拥有正确的权限,您也无法远程访问 mysql 服务器。此外,bind-address 选项并非专门用于授予对某个主机的访问权限,而是用于指定要监听的接口。
因此,首先检查你的 mysql 是否正在监听环回接口
netstat -tnl | grep 3306
你会看到类似的东西
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
如果正确,你必须更改mysql配置文件
sudo nano /etc/mysql/my.cnf
然后搜索该行:
bind-address = 127.0.0.1
然后将 替换127.0.0.1
为0.0.0.0
。你将获得以下行:
bind-address = 0.0.0.0
重启Mysql即可生效
/etc/init.d/mysql restart
结束检查 Mysql 是否正在监听所有接口
netstat -tnl | grep 3306
您应该看到:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN