詳細な説明は次のとおりです。
/data
ここでは、MySQlバイナリパッケージを解凍して起動するように設定します。以下のすべてのbasedir
サブディレクトリは次のとおりです。datadir
/data
basedir=/data/mysql
datadir=/data/mysql/data
- プロセス
mysqld
はエラーなしで実行中です。これで論理ボリュームを作成し/dev/mapper/vg-lvdata
てからマウントします/data
。
mysqld
ここでは、プロセスを中断することなく直接LVをマウントしました。
- 結果:
私たち全員が知っているように、デバイスをローカルディレクトリにマウントしてからディレクトリをデバイスに切り替えると、その中にデータがないことがわかります。生データはローカルです。
しかし、結果が気になります。mysqld
サービスはまだ実行中であり、新しいデータがローカルディレクトリに書き込まれています。
質問:
誰でも理由を教えてもらえますか?
mysqld
サービスがまだローカルディレクトリからデータを読み書きできるのはなぜですか?
答え1
同じ理由で、そのデータディレクトリから任意のファイルを削除すると、再起動するまで機能し続けます。
簡単に言えば、POSIX VFSセマンティクスを使用するシステムでファイルを開くと、開かれたファイル記述子が作成されます。それ文書。ファイルが閉じられるまで、何が起こってもファイルにアクセスできます(ハードウェアエラーが原因でI / Oエラーが発生しない限り)。他の人(またはあなた)がファイルを削除してもまだアクセスできます(最後に開かれたファイル記述子が閉じられると、そのファイルが占有するスペースは自動的に解放され、これは安全な一時ファイルによく使用されます)。権限が変更されて開くことはできませんが、引き続きアクセスできます。ファイルは次のようになります。動く、開かれたファイル記述子が続きます。
ただし、これを行うには、アクセスするたびにファイルを開くのではなく、使用しているファイルへの参照を実際に開いておく必要があることに注意してください。ほとんどのシステムサービスはこれらの公開参照を保存するのに十分スマートですが、ほとんどの対話型ソフトウェア(シェルプロセスなど)はそうではなく、ディレクトリの内容が変更されたことにすぐに気付きます。