バインドされたファイルを削除して、UNIXソケットへのバインドを再作成します。

バインドされたファイルを削除して、UNIXソケットへのバインドを再作成します。

最近、ある特定の状況に直面しました。インターネットや Linux の仕様を検索しても、明確な答えは得られませんでした。おそらく不可能だと思いますが、おそらくあなたは方法をご存知でしょう。

シナリオは以下のとおりです

  1. /var/lib/mysql/mysql.sock は起動時に mysql プロセスによって作成されます

  2. /var/lib/mysql/mysql.sock が消える (外部アクションによって削除されるなど)

  3. ss -lpn | grep mysqldこのUNIXソケットはまだ表示されます

    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別の名前にシンボリックリンクを戻すことができます (ただし、同じ名前に復元することはできません)。

関連情報