为什么连接MySQL服务器如此缓慢?

25

我使用JDBC连接MySQL。当它在localhost:3306时,一切正常。

但是当我将应用程序移动到内部网络中的另一台计算机,并使用<Intranet-IP>:3306连接到MySQL数据库时,连接成功需要大约1分钟。这是怎么回事?

5个回答

44

我曾经遇到过这个问题,确实是一个反向DNS的问题。 - acemtp
16
为了明确起见,“--skip-name-resolve”将作为启动MySQL的命令行选项使用,而“skip-name-resolve”(前面没有双破折号)将在配置文件中使用。 - JYelton
为了遵循配置文件中的约定,它应该是 skip_name_resolve,尽管我认为带破折号也可以。 - NickSoft
如果打开skip-name-resolve无法解决问题,那么可能并不是连接速度慢的原因。在我的情况下,我也认为这是一个DNS问题,但添加skip-name-resolve没有起作用,而且CLI和Workbench执行查询非常快。事实证明,我从别人那里继承的代码中,有人认为在循环遍历1200多个结果的while循环内执行另一个查询是一个好主意。如果DB服务器在同一台机器上,则显然不会出现任何明显的延迟,但是如果您使用远程服务器,则会出现延迟。 - Ogier Schelvis
1
为了完成我的故事(已经接近评论字符限制):我在主查询中使用LEFT JOIN替换了查询,页面加载时间从40秒降至0.5秒。这个问题出现是因为我需要从开发环境临时访问生产数据库。 - Ogier Schelvis

19

--skip-name-resolve 对我来说非常有效。

为了使其永久生效,我只需在[mysql]部分的my.ini文件末尾添加这一行:

skip-name-resolve

瞧!交易现在飞起来了!


没有my.ini文件,你更新了哪个文件? - user1986815
1
mysql.cnf or my.cnf - aswzen

9

在排除MediaWiki安装缓慢的问题时,注意到mysql_connect几乎需要一秒钟的时间。将配置从localhost更改为127.0.0.1,响应时间从1021毫秒降至7毫秒。谢谢! - jmgardn2
谢谢!这刚好解决了我发布的一个问题。谁知道IPv6会对最近的MySQL版本造成如此大的影响。 - user645280

1

防火墙、互联网、路由等等会减慢您的连接速度。

您应该将数据库放在内部网络上。将其保持本地化并放在大型防火墙后面。当然,您可以在计算机之间设置防火墙和安全性。我建议您不要以未经过滤的方式将mysql数据库连接暴露在互联网上。


啊,我看到你编辑了你的问题 :) 很高兴看到你找到了答案。 - Makach

0

评论/对一个非常非常古老的问题的发现

背景-典型情况:从Windows(各种版本)连接到Win或Linux服务器上的SQL Server很慢...需要多秒钟(即使从VBox上的Win客户端连接到同一主机上的服务器也是如此)

skip-name-resolvedns-bind-尝试了各种方法,但没有效果。

查看手册-连接字符串选项-没有时间逐个学习它们的含义,设置并尝试-只要不出问题就行。

sslmode=none;添加到连接字符串中...连接时间减少了不到1/10。亚秒级连接,毫秒级!

注意: 它在一个小办公室私人局域网中,所以不用担心任何安全问题。 ... 它有效...我接受了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接