我检查了 /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/mysqld
。mysqld
可以使用以下命令调用--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 种类型:
log_error
用于错误消息日志;general_log_file
用于通用查询日志文件(如果已启用general_log
);slow_query_log_file
用于慢查询日志文件(如果已启用slow_query_log
);
通过此 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
。
使用活动监视器查找 的 PID
mysql
,或者使用ps -ef | grep mysqld
找到它。sudo lsof -p PID_OF_MYSQLD
并查看 MySQL 打开了哪些文件。
答案4
默认情况下,所有日志文件都创建在 mysqld 数据目录中。
来源:MySQL 文档
您可以使用mysqlbinlog
它来读取 /usr/local/mysql/data/ 中的二进制日志文件(在我的安装中并非所有文件都是二进制文件)。有些错误只是直接发送到 stderr,因此您可能也想检查/var/log/system.log
一下。