连接本地MySQL的最佳方式是什么?

11

MySQL在Windows平台上提供了多种连接方式,包括:

  • 共享内存
  • 命名管道
  • TCP/IP

我的问题是:如果MySQL将与Web服务器运行在同一台机器上,那么哪种方法在安全性和性能方面最好?

注:这是一个单独的Web服务器场景,没有Web Farm。

谢谢。

8个回答

6

就性能而言,如果两者都在同一台机器上运行,那么共享内存是更好的选择,因为它不会遇到可能存在于该机器上或以后安装的防火墙软件问题。

但是,如果将来需要由于扩大规模而将Web服务器和数据库分开,则需要进行更改以支持此操作。

因此,从长远来看,更好的选择是使用TCP / IP,因为这将允许服务器以最小的困难被分离。


5

共享内存比tcp/ip快4倍。 使用tcp/ip将简单行插入到表中需要约200微秒, 而使用共享内存只需要约55微秒(在我的i5 3ghz上测试)。使用c/connector进行了测试。使用net/connector速度只增加了约3倍。


5

TCP/IP无论何种情况都是首选配置。

我认为是这样,它是在开发中经过彻底测试的唯一配置。此外

1)命名管道不能保证安全性。人们可以通过 \ServerName\pipe\PipeName 访问它们(即使 C 客户端不会),但 Connector/NET 可以做到这一点。

2)共享内存有几个缺点。例如,无法知道共享内存客户端是否已关闭。也就是说,如果应用程序在未断开连接的情况下退出,则在服务器端资源不会被清理(n wait_timeout 周期默认为 8 小时)。此外,使用共享内存时存在过多的同步。

3)本地 TCP 访问非常快,至少在现代 Windows 上是这样,尽管我认为在 Vista/WS2008 之前并不是这种情况。我对其与管道进行了基准测试,没有什么值得注意的区别。至于安全性,这就是防火墙的作用。


1

出于安全考虑,禁用TCP/IP网络明显是有益的。 我正在开发一个.NET应用程序,使用MySql连接器连接命名管道没有遇到任何问题。它也可以与Mysql GUI工具一起使用 :),这就是我所需的全部。


1

我认为命名管道比TCP/IP更有优势(已使用大型转储进行测试)。

但是,您可能需要考虑Web服务器上的实际应用程序使用任何这些连接的性能,因为驱动程序可能无法使用命名管道。

我在Windows上使用php和命名管道时遇到了问题,所以您需要检查故事的这一部分。


0
为了获得更好的性能,我可以根据客户端和服务器的位置给您一些提示:
同一台机器:共享内存,然后是命名管道,最后是TCP/IP。
不同的机器:TCP/IP。
原因是当您在同一台机器上时,共享内存避免了通过操作系统中托管的网络堆栈的往返。共享内存是一种更有效的IPC方法。

0

共享内存或命名管道比TCP/IP的开销小,但是,Windows是否支持命名管道呢?

另一方面,TCP/IP是最兼容和可扩展的方式,许多连接器甚至不支持其他任何东西。

如果没有必要,您不应将场景限制在“同一台计算机”或平台“Windows”上,始终要考虑可扩展性。


Windows支持命名管道,但SQL Server 2005在设置时有一些小问题,有时会使用错误的管道路径。不过我相信2008年版本已经解决了大部分这些问题。 - Jimoc

-2

在所有情况下都使用TCP/IP。


1
你能提供一些支持这个观点的论据吗? - Aron Rotteveel
TCP/IP既不更安全,也不更快。 - Alnitak
我同意这个观点,因为TCP/IP是可扩展的,而共享内存和命名管道在处理大量负载时存在一些连接问题。 - EngineerCoder

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