重新建立到 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回備用名稱(但是您無法將其還原為相同名稱)。

相關內容