Воссоздайте привязку к сокету 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на альтернативное имя (однако восстановить его под тем же именем вы не сможете).

Связанный контент