重新创建与 unix 套接字的绑定,并删除绑定文件

重新创建与 unix 套接字的绑定,并删除绑定文件

我最近遇到了一个特殊情况,在网上和 Linux 规范中搜索都没有得到明确的答案。好吧,我认为这是不可能的,但也许你知道方法。

场景如下

  1. /var/lib/mysql/mysql.sock 由 mysql 进程在启动时创建

  2. /var/lib/mysql/mysql.sock 消失,例如被某些外部操作删除

  3. ss -lpn | grep mysqld仍然显示这个unix套接字

    u_str LISTEN 0 128 /var/lib/mysql/mysqld.sock -786114905 * 0 users:(("mysqld",pid=30220,fd=41))

  4. lsof -p 30220 | grep /var/lib/mysql/mysqld.sock显示某个进程与其绑定

    mysqld 30220 mysql 41u unix 0xffff8800245603c0 0t0 3508852391 /var/lib/mysql/mysqld.sock

是否可以在不重新启动父进程的情况下重新创建/恢复已删除的 unix 套接字文件,以便客户端仍然可以像删除之前一样通过此套接字文件进行连接?

谢谢。

答案1

您可以使用旧的 Unix 技巧来恢复仍打开但已被删除的文件。在这种情况下,您在那里完成了大部分工作:

ss -lpn | grep mysqld 

u_str  LISTEN     0      128    /var/lib/mysql/mysqld.sock -786114905            * 0                   users:(("mysqld",pid=30220,fd=41))

检查 PID 为 30220 的打开的文件:

# ls -l /proc/30220/fd

lr-x------ 1 mysql mysql 64 janv. 15 19:04 0 -> /dev/null
l-wx------ 1 mysql mysql 64 janv. 15 19:04 1 -> /var/log/mysqld.log
lrwxrwxr-- 1 mysql mysql 64 janv. 15 19:04 2 -> /var/lib/mysql/mysqld.sock (deleted)

现在您可以将符号链接/proc/30220/fd/2回备用名称(但是,您将无法将其恢复为相同的名称)。

相关内容