바인딩된 파일이 제거된 Unix 소켓에 대한 바인딩을 다시 만듭니다.

바인딩된 파일이 제거된 Unix 소켓에 대한 바인딩을 다시 만듭니다.

최근에 특정 상황에 직면했는데 인터넷과 Linux 사양을 검색해도 확실한 답변을 얻을 수 없었습니다. 글쎄, 나는 그것이 불가능하다고 생각하지만 아마도 당신은 그 방법을 알고 있을 것입니다.

시나리오는 다음과 같습니다

  1. /var/lib/mysql/mysql.sock 시작 시 mysql 프로세스에 의해 생성됨

  2. /var/lib/mysql/mysql.sock이 사라집니다. 예를 들어 일부 외부 작업으로 제거됩니다.

  3. ss -lpn | grep mysqld여전히 이 유닉스 소켓이 표시됩니다

    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대체 이름으로 다시 심볼릭 링크를 걸 수 있습니다(그러나 동일한 이름으로 복원할 수는 없습니다).

관련 정보