我在 OS X 上的 mysql 日志在哪里?

我在 OS X 上的 mysql 日志在哪里?

我检查了 /var/log 和 /usr/local/mysql,但似乎找不到日志。我正在尝试解决使用 php 函数建立数据库连接时出现的错误。

答案1

正如 Chealion 所提到的,mysql 可以通过多种方式安装。每种方式都会将数据目录和/或日志放置在不同的位置。以下命令将为您(和我们)提供查找位置的良好指示。

ps auxww|grep [m]ysqld

# Putting brackets around the first char is a `grep`+`ps` trick
# to keep it from matching its own process.
# Note: For zsh compatibility put quotes around the grep regex

你能在这里发布该命令的结果吗?我的结果如下:

_mysql     101   0.0  0.3   112104  13268   ??  S    12:30AM   0:13.20 /opt/local/libexec/mysqld --basedir=/opt/local --datadir=/opt/local/var/db/mysql --user=mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid
root        76   0.0  0.0   600172    688   ??  S    12:30AM   0:00.02 /bin/sh /opt/local/lib/mysql/bin/mysqld_safe --datadir=/opt/local/var/db/mysql --pid-file=/opt/local/var/db/mysql/rbronosky-mbp.pid

从中你可以看到我的 datadir 是/opt/local/var/db/mysql(因为我是通过 MacPorts 安装的)。让我们进一步学习这节课...

从第一行可以看到我的守护进程是/opt/local/libexec/mysqldmysqld可以使用以下命令调用--verbose --help以获取所有命令行选项的列表(这是重要/有价值的部分!),后跟启动 mysqld 而不是仅检查帮助输出时将使用的值。这些值是编译时配置、my.cnf文件和任何命令行选项的结果。我可以利用此功能准确找出我的日志文件的位置,如下所示:

/opt/local/libexec/mysqld --verbose --help|grep '^log'

我的看起来像这样:

log                               /tmp/mysql.log
log-bin                           /tmp/mysql-bin
log-bin-index                     (No default value)
log-bin-trust-function-creators   FALSE
log-bin-trust-routine-creators    FALSE
log-error                         /tmp/mysql.error.log
log-isam                          myisam.log
log-queries-not-using-indexes     FALSE
log-short-format                  FALSE
log-slave-updates                 FALSE
log-slow-admin-statements         FALSE
log-slow-queries                  (No default value)
log-tc                            tc.log
log-tc-size                       24576
log-update                        (No default value)
log-warnings                      1

瞧!世界上所有的建议都帮不上忙,因为我的日志文件保存在一个完全不标准的位置!我之所以保存它,/tmp/是因为在我的笔记本电脑上,我不在乎(实际上我更喜欢)在重启时丢失所有日志。

让我们把所有内容放在一起,为你制作一个一行代码:

$(ps auxww|sed -n '/sed -n/d;/mysqld /{s/.* \([^ ]*mysqld\) .*/\1/;p;}') --verbose --help|grep '^log'

执行该命令,您将获得正在运行的 mysql 实例的所有日志的列表。

享受!

由于我对所有开源事物的承诺,这个 Bash-Fu 免费带给您。

答案2

MySQL/MariaDB 日志有 3 种类型:

通过此 shell 命令检查上述日志的设置和位置:

mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log -e slow_query_log

默认情况下,日志存储在您的数据目录中,因此请通过以下 shell 命令检查位置:

mysql -se "SELECT @@datadir"

要查看错误日志,您可以运行:

sudo tail -f $(mysql -Nse "SELECT @@log_error")

如果您启用了常规日志,要查看它,请运行:

sudo tail -f $(mysql -Nse "SELECT CONCAT(@@datadir, @@general_log_file)")

答案3

查找此信息的另一种方法是使用lsof

  1. 使用活动监视器查找 的 PID mysql,或者使用ps -ef | grep mysqld找到它。

  2. sudo lsof -p PID_OF_MYSQLD并查看 MySQL 打开了哪些文件。

答案4

默认情况下,所有日志文件都创建在 mysqld 数据目录中。

来源:MySQL 文档

您可以使用mysqlbinlog它来读取 /usr/local/mysql/data/ 中的二进制日志文件(在我的安装中并非所有文件都是二进制文件)。有些错误只是直接发送到 stderr,因此您可能也想检查/var/log/system.log一下。

相关内容