Linux
重新創建綁定到 unix 套接字的綁定文件已刪除
我最近遇到了一個特定的情況,通過網際網路和 linux 規範搜尋並沒有給出明確的答案。好吧,我相信這是不可能的,但也許你知道方法。
場景如下
- /var/lib/mysql/mysql.sock 由 mysql 程序在啟動時創建
- /var/lib/mysql/mysql.sock 消失,例如被某些外部操作刪除
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
回備用名稱(但是您將無法將其恢復為相同的名稱)。