今天在服务器上运行 lsof 时,我发现 mysqld 显示为已删除。有人遇到过类似情况吗,或者对此有解释吗。这是一个错误吗?
lsof | grep /usr/sbin/mysqld
mysqld 2589 mysql txt REG 253,1 12681241 312101 /usr/sbin/mysqld (deleted)
答案1
验证文件系统上是否存在 mysqld 二进制文件:
ls -la /usr/sbin/mysqld
如果它在那里,您可能升级了 mysql 但没有重新启动守护进程,因此内存中的二进制文件已被删除,现在与文件系统上的二进制文件不同。
答案2
这让我相信该mysql
软件包已更新且未mysqld
重新启动。旧的二进制文件已被删除,并安装了新的二进制文件。
在 Linux 中,删除(取消链接)打开的文件并不会真正删除文件的内容。在取消链接之前保持文件打开的进程仍将能够访问该文件,直到它退出。当所有进程都关闭取消链接的文件时,文件的内容将无法访问。
在这种情况下,mysqld
旧版本的包仍然在运行并且/usr/sbin/mysqld
是指向新版本的文件的链接。
有趣的事实:您实际上可以使用以下方法恢复原始文件cp
:
cp /proc/2589/exe /tmp/mysqld