现在我有一个装有 mySQL 的 ubuntu 服务器。我可以使用以下命令连接到它
mysql -u root -p (password)
我一直在网上搜索,但找不到有效的解决方案。我想要做的是能够从外部连接到它。例如从我的家用电脑(我有允许我连接到其他服务器的 mysql 文件)
mysql -h domainname.com -u username -p
但每次我尝试这个时总会遇到同样的错误:
ERROR 2005 (HY000): Unknown MySQL server host 'domainName:3306' (11004)
我想我必须编辑 my.conf 文件,但我对此还不熟悉,而且不是 100%确定。
提前感谢您的帮助。
答案1
出于安全原因,大多数 Linux 发行版默认禁用对 mysql 的 TCP 访问。要启用它,您必须编辑 my.cnf 文件(登录/etc/mysql/my.cnf
或/etc/my.cnf
)并删除该skip-networking
选项。为了安全起见,您可以添加:
bind-address=192.168.X.Y <-- your eth0 address here
您还应该知道,MySQL 用户限制基于源主机。从 localhost 以 root 身份登录与从 以 root 身份登录不同myothercoolserver.mydomain.com
。请确保使用允许user@source
访问正确表所需的 GRANT 选项。
不建议允许 root 用户从本地主机外部访问。
有关 GRANT 语句的更多信息这里。
根据我们在此原始答案的评论中的长期讨论,您可能想要尝试其他一些想法:
- 在 MySQL 服务器上使用 tcpdump 来确定流量是否到达主机。类似这样的命令
tcpdump tcp port 3306
应该有效。如果您在尝试连接时看不到流量,则可能是您的外部连接和服务器之间的 iptables 或硬件防火墙阻止了 tcp/3306。 - 您可以尝试
service iptables stop
(假设您已将规则保存在由 init 脚本管理的位置)并查看是否允许流量。如果允许,请重新查看 iptables 规则/etc/sysconfig/iptables.conf
(或类似规则)或将其发布到另一个问题中,有人应该能够指出是什么阻止了流量。
答案2
最安全的方式是通过 ssh 隧道连接到你的 mysql 框,然后使用该隧道:
$ ssh [email protected] -L 3306:localhost:3306
配置你的 mysql 客户端与 localhost:3306 通信
确保将 mysql 服务器绑定到本地主机(127.0.0.1)