![바인딩된 파일이 제거된 Unix 소켓에 대한 바인딩을 다시 만듭니다.](https://rvso.com/image/747350/%EB%B0%94%EC%9D%B8%EB%94%A9%EB%90%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%B4%20%EC%A0%9C%EA%B1%B0%EB%90%9C%20Unix%20%EC%86%8C%EC%BC%93%EC%97%90%20%EB%8C%80%ED%95%9C%20%EB%B0%94%EC%9D%B8%EB%94%A9%EC%9D%84%20%EB%8B%A4%EC%8B%9C%20%EB%A7%8C%EB%93%AD%EB%8B%88%EB%8B%A4..png)
최근에 특정 상황에 직면했는데 인터넷과 Linux 사양을 검색해도 확실한 답변을 얻을 수 없었습니다. 글쎄, 나는 그것이 불가능하다고 생각하지만 아마도 당신은 그 방법을 알고 있을 것입니다.
시나리오는 다음과 같습니다
/var/lib/mysql/mysql.sock 시작 시 mysql 프로세스에 의해 생성됨
/var/lib/mysql/mysql.sock이 사라집니다. 예를 들어 일부 외부 작업으로 제거됩니다.
ss -lpn | grep mysqld
여전히 이 유닉스 소켓이 표시됩니다u_str LISTEN 0 128 /var/lib/mysql/mysqld.sock -786114905 * 0 users:(("mysqld",pid=30220,fd=41))
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
대체 이름으로 다시 심볼릭 링크를 걸 수 있습니다(그러나 동일한 이름으로 복원할 수는 없습니다).