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エラーが発生しない限り)。他の人(またはあなた)がファイルを削除してもまだアクセスできます(最後に開かれたファイル記述子が閉じられると、そのファイルが占有するスペースは自動的に解放され、これは安全な一時ファイルによく使用されます)。権限が変更されて開くことはできませんが、引き続きアクセスできます。ファイルは次のようになります。動く、開かれたファイル記述子が続きます。

ただし、これを行うには、アクセスするたびにファイルを開くのではなく、使用しているファイルへの参照を実際に開いておく必要があることに注意してください。ほとんどのシステムサービスはこれらの公開参照を保存するのに十分スマートですが、ほとんどの対話型ソフトウェア(シェルプロセスなど)はそうではなく、ディレクトリの内容が変更されたことにすぐに気付きます。

関連情報