有没有合理的理由在TCP/IP上使用Unix套接字和mysql?

taw*_*taw 5 mysql

我试图弄清楚为什么mysql默认使用Unix套接字(/tmp/mysql.sock),而不是普通的TCP/IP套接字.

它似乎不是一个安全的东西,因为你只能在127.0.0.1上监听,它应该同样安全(套接字文件是世界可写的,因此你不能获得基于Unix帐户的保护).

当然,所有操作系统都依赖于高性能的TCP/IP,以至于它不会比Unix套接字慢得多 - 即使对于网络流量,Linux也会做各种零拷贝技巧,所以它肯定必须快速进行环回.

那么在这里使用Unix套接字有什么合理的理由,还是只是一些奇怪的历史事故?

nos*_*nos 8

虽然你在浏览localhost时没有访问整个IP堆栈,但你仍然占据了很大一部分.unix套接字基本上只是一个双向管道.它更快更轻.

Unix套接字还允许您在不管理防火墙规则的情况下控制访问,因为可以通过文件系统权限进行访问.

unix套接字提供的另一个功能是能够将文件描述符从一个进程传递到另一个进程.


Sun*_*ers 6

使用Unix套接字而不是TCP/IP的开销较少,因为这基本上是没有额外网络簿记的字节流.有关更多信息,请参阅维基百科.

Unix域连接显示为字节流,非常类似于网络连接,但所有数据都保留在本地计算机中.UNIX域套接字使用文件系统作为地址名称空间,即它们被进程引用为文件系统中的inode.这允许两个不同的进程打开同一个套接字以进行通信.但是,实际通信(数据交换)不使用文件系统,而是使用内核内存中的缓冲区.