![バインドされたファイルを削除して、UNIXソケットへのバインドを再作成します。](https://rvso.com/image/747350/%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%95%E3%82%8C%E3%81%9F%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%A6%E3%80%81UNIX%E3%82%BD%E3%82%B1%E3%83%83%E3%83%88%E3%81%B8%E3%81%AE%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%82%92%E5%86%8D%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%E3%80%82.png)
最近、ある特定の状況に直面しました。インターネットや Linux の仕様を検索しても、明確な答えは得られませんでした。おそらく不可能だと思いますが、おそらくあなたは方法をご存知でしょう。
シナリオは以下のとおりです
/var/lib/mysql/mysql.sock は起動時に mysql プロセスによって作成されます
/var/lib/mysql/mysql.sock が消える (外部アクションによって削除されるなど)
ss -lpn | grep mysqld
このUNIXソケットはまだ表示されますu_str LISTEN 0 128 /var/lib/mysql/mysqld.sock -786114905 * 0 users:(("mysqld",pid=30220,fd=41))
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
別の名前にシンボリックリンクを戻すことができます (ただし、同じ名前に復元することはできません)。