【发布时间】:2025-04-01 00:00:02
【问题描述】:
许多 MySQL 问题需要检查 MySQL 守护程序错误日志,但它在哪里并不总是很明显。找到它的一种方法是发出SELECT @@log_error 查询。但是,如果您在 Linux MySQL 服务器主机上有一个 root shell,不想连接到服务器,并且需要一种快速而肮脏的方式在 shell 脚本中获取它,该怎么办?
【问题讨论】:
许多 MySQL 问题需要检查 MySQL 守护程序错误日志,但它在哪里并不总是很明显。找到它的一种方法是发出SELECT @@log_error 查询。但是,如果您在 Linux MySQL 服务器主机上有一个 root shell,不想连接到服务器,并且需要一种快速而肮脏的方式在 shell 脚本中获取它,该怎么办?
【问题讨论】:
我们可以使用 mysqld 使用文件描述符 2 (stderr) 作为错误日志和 /proc 文件系统的事实,如下所示:
sudo readlink /proc/$(pidof mysqld)/fd/2
当然,这需要当前正在运行的服务器。文件描述符保证为 2,因为 MySQL 通过将 stderr 流重定向到启动时指定的日志写入错误日志,然后写入 stderr - 至少在 5.5 及更早版本中,可能在更高版本中也是如此。
【讨论】:
mysqld.exe 的文件描述符2 对应的文件。也许从 openfiles /query 开始?如果我必须维护一个 Windows 机器,我要做的第一件事就是安装 Cygwin,这样我就会拥有我知道如何使用的工具。使用 Cygwin,您可能可以做到 lsof -p $(pidof mysqld) | grep 2w | head -1 | awk '{print $9}'