它来自这个答案:
当主机为“localhost”时,MySQL Unix 客户端使用 Unix 套接字,AKA Unix Domain Socket,而不是 TCP/IP 套接字进行连接,因此 TCP 端口无关紧要。
我在 linux 上运行一个特定的程序,它有时会崩溃。如果你在那之后快速打开它,它会像第一次那样监听套接字 49201 而不是 49200。netstat 显示 49200 处于 TIME_WAIT 状态。
是否有程序可以运行以立即强制该套接字退出 TIME_WAIT 状态?
我想分析mysql流量。现在,所有 mysql 请求都发送到 MySQL unix 套接字:
unix 2 [ ACC ] STREAM LISTENING 3734388 15304/mysqld /var/run/mysqld/mysqld.sock
Run Code Online (Sandbox Code Playgroud)
我正在尝试禁用该套接字以强制 MySQL 在回送上使用网络套接字。我尝试注释掉和文件socket中的所有指令并重新启动 MySQL,但没有任何区别。my.cnfdebian.cnf
如何禁用 MySQL unix 套接字以通过网络强制 MySQL?
其他信息:我运行MySQL 5.1上ubuntu 10.04。
问题的精确度
由于很多人建议启用网络套接字,我想通过指出绑定地址已经启用bind-address = 127.0.0.1并且侦听连接可用来澄清我的问题:
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 15601/mysqld
Run Code Online (Sandbox Code Playgroud)
我仍然没有看到127.0.0.1:3306来自我的 web 应用程序(Drupal 网站)的连接尝试。
更新了答案
问题似乎确实来自mysqliDrupal 使用的连接器(.ht_config.php对于那些感兴趣的人)。它被设置为: mysqli://drupal:***@localhost/drupal,更改localhost以127.0.0.1修复问题(即 Drupal 现在正在连接到网络套接字)。
有人可以向我描述在服务器(Ubuntu,FWIW)上设置服务时使用 Unix 套接字文件与 tcp/ip localhost:port 的优缺点吗?
在这个特定实例中,它用于 Python WSGI 服务器 (uWSGI),但我只是对一般情况感兴趣(例如,我知道您可以通过两种方式设置 MySQL)。
我意识到使用 tcp/ip 意味着服务可以暴露给其他机器,但我只是对在本地访问服务时是否有任何性能权衡感兴趣。
干杯。
我有一个进程(dbus-daemon),它通过 UNIX 套接字有许多打开的连接。这些连接之一是 fd #36:
=$ ps uw -p 23284
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
depesz 23284 0.0 0.0 24680 1772 ? Ss 15:25 0:00 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
=$ ls -l /proc/23284/fd/36
lrwx------ 1 depesz depesz 64 2011-03-28 15:32 /proc/23284/fd/36 -> socket:[1013410]
=$ netstat -nxp | grep 1013410
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it …Run Code Online (Sandbox Code Playgroud) 快速提问 - 我运行两个 linux 机器,一个是我自己的桌面,另一个是我的 VPS。出于 VPS 端的安全原因,我选择了与 MySQL ( /var/run/mysqld/mysql.sock) 的套接字连接。我知道我可以像这样ssh -L 3307:127.0.0.1:3306 user@site.com建立隧道:如果我设置远程 sql server 来监听某个端口,但我想知道的是我可以做这样的事情:ssh -L /path/to/myremotesqlserver.sock:/var/run/mysqld/mysql.sock从而隧道两个套接字,而不是两个端口?
一个完全可以接受的解决方案也是将本地端口转发到远程套接字文件,但在可能的情况下,我试图不在远程机器上运行 tcp 服务器。
(是的,我知道 tcp 会更容易)。
在 Windows 上,您可以设置如果/当服务失败时应该发生的情况。在 Linux(特别是 CentOS)上有没有标准的方法来实现同样的事情?
我的问题的一个重要部分是:如何处理保持打开状态的套接字 - 例如在 TIME_WAIT、FIN_WAIT1 等状态中。
目前,如果我正在开发的服务崩溃,我必须等待套接字清除或更改侦听端口,然后才能手动重新启动它。
谢谢你的帮助。
我正在运行一个 nginx 服务器,它充当上游 unix 套接字的代理,如下所示:
upstream app_server {
server unix:/tmp/app.sock fail_timeout=0;
}
server {
listen ###.###.###.###;
server_name whatever.server;
root /web/root;
try_files $uri @app;
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
}
Run Code Online (Sandbox Code Playgroud)
一些应用服务器进程反过来在请求/tmp/app.sock可用时将其拉出。此处使用的特定应用服务器是 Unicorn,但我认为这与此问题无关。
问题是,似乎超过一定量的负载后,nginx 无法以足够快的速度通过套接字获取请求。我设置了多少个应用服务器进程并不重要。
我在 nginx 错误日志中收到了大量这些消息:
connect() to unix:/tmp/app.sock failed (11: Resource temporarily unavailable) while connecting to upstream
Run Code Online (Sandbox Code Playgroud)
许多请求会导致状态代码 502,以及那些不需要很长时间才能完成的请求。nginx 写入队列统计数据徘徊在 1000 左右。
无论如何,我觉得我在这里遗漏了一些明显的东西,因为 nginx 和应用程序服务器的这种特殊配置非常普遍,尤其是对于 Unicorn(实际上这是推荐的方法)。是否有任何需要设置的 linux 内核选项,或者 nginx 中的某些内容?关于如何增加上游套接字的吞吐量的任何想法?我显然做错了什么?
关于环境的其他信息:
$ uname -a
Linux …Run Code Online (Sandbox Code Playgroud) 有谁知道为什么我/var/run/mysqld/mysqld.sock安装(或重新安装)MySQL 5.1 时我的计算机上没有套接字文件?
现在,当我尝试使用 mysqld 启动服务器时,出现类似 的错误Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect,但是创建具有该名称的空白文件(如 ubuntu 论坛上的建议)未成功。
在不久前我升级到 natty 之前,我的 mysql 和 postgres 都运行良好;我花了几个小时浏览这两个数据库,试图弄清楚发生了什么。我可以放弃 postgres,但如果没有 mysql 的工作副本,我就无法工作。
最奇怪的部分:我使用 Kubuntu,我的理解是 KDE 使用 mysql 来存储用户权限等。我没有遇到任何奇怪的权限问题;我可以认为这意味着(不知何故?)MySQL 实际上在工作吗?
也许这些套接字文件在整洁的不同地方?重新安装操作系统会更容易吗?在这一点上,我愿意接受任何不会浪费我时间的建议。