Linux

重新創建綁定到 unix 套接字的綁定文件已刪除

  • January 15, 2020

我最近遇到了一個特定的情況,通過網際網路和 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 套接字文件,以便客戶端仍然可以像刪除之前一樣通過此套接字文件進行連接?

謝謝。

您可以使用舊的 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回備用名稱(但是您將無法將其恢復為相同的名稱)。

引用自:https://serverfault.com/questions/999062