MySQL 데이터가 복원되고 프로세스가 계속 실행 중인 로컬 디렉터리에 논리 볼륨을 마운트하면 어떻게 되나요?

MySQL 데이터가 복원되고 프로세스가 계속 실행 중인 로컬 디렉터리에 논리 볼륨을 마운트하면 어떻게 되나요?

자세한 설명은 다음과 같습니다.

  1. /data여기에서 MySQl 바이너리 패키지의 압축을 풀고 시작하도록 구성합니다. 아래의 basedir모든 하위 디렉터리는 다음과 같습니다 .datadir/data
basedir=/data/mysql 

datadir=/data/mysql/data
  1. 프로세스 mysqld가 오류 없이 실행 중입니다. 이제 논리 볼륨을 생성 /dev/mapper/vg-lvdata한 다음 에 마운트합니다 /data.

mysqld여기서는 프로세스를 중단하지 않고 직접 LV를 마운트했습니다.

  1. 결과:

우리 모두 알고 있듯이 장치를 로컬 디렉터리에 마운트한 다음 디렉터리를 장치로 전환하면 그 안에 데이터가 없다는 것을 알게 됩니다. 원시 데이터는 로컬입니다.

하지만 결과가 궁금합니다. mysqld서비스는 여전히 실행 중이고 새 데이터가 로컬 디렉터리에 기록되고 있습니다.

질문:

누구든지 이유를 말해 줄 수 있습니까?

mysqld서비스가 여전히 로컬 디렉터리에서 데이터를 읽고 쓸 수 있는 이유는 무엇입니까 ?

답변1

같은 이유로 해당 데이터 디렉터리에서 임의의 파일을 삭제하면 다시 시작할 때까지 계속 작동합니다.

간단히 말해서, POSIX VFS 의미 체계를 사용하는 시스템에서 파일을 열면 열린 파일 설명자가 생깁니다.저것문서. 파일이 닫힐 때까지는 무슨 일이 일어나더라도 해당 파일에 계속 액세스할 수 있습니다(하드웨어 오류로 인해 I/O 오류가 발생하지 않는 한). 다른 사람(또는 귀하)이 파일을 삭제해도 여전히 액세스할 수 있습니다(마지막으로 열린 파일 설명자가 닫히면 해당 파일이 차지한 공간이 자동으로 해제되며 이는 안전한 임시 파일에 자주 사용됩니다). 권한이 변경되어 열 수는 없지만 계속 액세스할 수는 있습니다. 파일은 다음과 같습니다.움직이는, 열린 파일 설명자가 따라옵니다.

그러나 이를 위해서는 액세스할 때마다 파일을 여는 대신 사용 중인 파일에 대한 참조를 실제로 열어 두어야 한다는 점에 유의하십시오. 대부분의 시스템 서비스는 이러한 공개 참조를 보존할 만큼 똑똑하지만 대부분의 대화형 소프트웨어(예: 쉘 프로세스)는 그렇지 않으며 디렉토리 내용이 변경되었음을 즉시 알아차립니다.

관련 정보