如何在MySQL中查看日志文件?


176

我读过Mysql服务器创建了一个日志文件,其中记录了所有活动-如何时执行查询以及执行什么查询。

有人可以告诉我它在系统中的什么位置吗?我该怎么读?

基本上,我需要使用不同的输入[两个日期之间的备份]来备份数据库,所以我认为我需要在此处使用日志文件,这就是为什么要这样做...

我认为必须以某种方式保护此日志的安全,因为可能会记录诸如用户名和密码之类的敏感信息[如果有任何查询要求];这样可以确保它安全,不容易被看到吗?

我具有root访问系统的权限,如何查看日志?

当我尝试打开/var/log/mysql.log时,它是空的。

这是我的配置文件:

[client]
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

[mysqld]
log = /var/log/mysql/mysql.log 
binlog-do-db=zero



user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
skip-external-locking

bind-address        = 127.0.0.1
#
# * Fine Tuning
#
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

Answers:


163

这是启用它们的一种简单方法。在mysql中,我们通常需要查看3个日志,这在任何项目开发过程中都是最需要的。

  • The Error Log。它包含有关服务器运行时发生的错误的信息(以及服务器启动和停止)

  • The General Query Log。这是mysqld所做的一般记录(连接,断开连接,查询)

  • The Slow Query Log。它由“慢速” SQL语句组成(如其名称所示)。

默认情况下,MYSQL中未启用任何日志文件。所有错误将显示在系统日志(/var/log/syslog)中。

要启用它们,只需执行以下步骤:

步骤1:转到此文件(/etc/mysql/conf.d/mysqld_safe_syslog.cnf)并删除或注释这些行。

步骤2:转到mysql conf文件(/etc/mysql/my.cnf),然后添加以下几行

要启用错误日志,请添加以下内容

[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log

[mysqld]
log_error=/var/log/mysql/mysql_error.log

要启用一般查询日志,请添加以下内容

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

要启用慢查询日志,请添加以下内容

log_slow_queries       = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

第三步:保存文件并使用以下命令重启mysql

service mysql restart

要在运行时启用日志,请登录mysql客户端(mysql -u root -p)并输入:

SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';

最后,我想在这里提及的一件事是,我从博客中阅读了此内容。谢谢。这个对我有用。

点击这里访问博客


2
我认为比您“忘了”写点东西。第1步不完整,缺少“博客”链接的句子
Athafoud 2015年

嗨,@ Athafoud,请立即找到链接。
loyola 2015年

3
链接的博客文章提到/etc/mysql/conf.d/mysqld_safe_syslog.cnf仅在启用错误日志的情况下进行修改。但是,目前写的这个答案似乎建议将其用于任何日志。
Melebius '16

2
我的服务器版本是5.6.35。罗斯·史密斯II的答案在这里为我工作。我要一套slow_query_log = 1;slow_query_log_file = /var/log/mysql/mysql-slow-query.log并且long_query_time = 60下的[mysqld]。当我尝试使用您的配置启动时,服务器正在启动,但是速度缓慢且出现错误。我真的猜想版本会有所不同,在更高的版本中,oracle希望统一变量名。另外:恕我直言2秒不是那么长。
JackLeEmmerdeur

1
那这些文件的权限呢?我已经看到很多情况下没有创建日志文件。
MagePsycho

42

您必须在mysql中激活查询日志。

  1. 编辑/etc/my.cnf

    [mysqld]
    日志= / tmp / mysql.log
    
  2. 重新启动计算机或mysqld服务

    服务mysqld重启
    
  3. 打开phpmyadmin /使用mysql / mysql控制台的任何应用程序并运行查询

  4. cat /tmp/mysql.log (您应该看到查询)


没关系,只需确保在数据库上运行查询即可
danidacar 2011年

6
无效的路径。您拥有/etc/my.cnf应该是/etc/mysql/my.cnf
神秘可乐

39

MySQL日志由全局变量确定,例如:

要查看设置及其位置,请运行以下shell命令:

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

要显示错误日志的值,请在终端中运行以下命令:

mysql -e "SELECT @@GLOBAL.log_error"

要实时读取错误日志文件的内容,请运行:

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

注意:点击Control- C完成时

启用常规日志后,请尝试:

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

mysql与密码访问一起使用,请添加-p-pMYPASS参数。为了记住它,您可以在中配置它~/.my.cnf,例如

[client]
user=root
password=root

因此,它将在下次被记住。


1
或者,如果您需要输入密码,请尝试以下操作:mysql -p -se“ SHOW VARIABLES” | grep -e log_error -e general_log -e slow_query_log
Paul Chernoch

9

在我的(I安装LAMP)的/ etc / MySQL的 /my.cnf文件我发现以下,在的[mysqld]节注释行:

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1

我必须以超级用户身份通过​​终端打开此文件:

sudo geany /etc/mysql/my.cnf

(我更喜欢使用Geany而不是gedit或VI,这没关系)

我只是取消注释它们并保存文件,然后使用

sudo service mysql restart

运行几个查询,打开上面的文件(/var/log/mysql/mysql.log),日志在那里:)


尽管它可能对您有用,但对我却不起作用,即使像“索引已损坏”之类的主要异常也不会记录。仅启动和关闭问题。
user3338098 2015年

8

从MySQL参考手册中:

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

检查/var/lib/mysql文件夹。


1
但我无法打开mysql文件夹。我认为日志文件的路径是/var/log/mysql/mysql.log但我无法打开它,我该怎么办?
Arjun,

2
我如何使自己成为root,我认为是所有者,我安装了服务器,设置了密码,所以我应该是所有者,仍然对我而言是锁定的,我该如何打开它?
Arjun

1
我强迫cd进入该目录(我必须创建root用户,稍后将其删除),但是当我看到此文件时,我以为它们是加密的:)所以我认为这不是一个好方法。
在线

使用sudo -s然后尝试转到mysql文件夹。
Rashedul Islam 2015年

MySQL手册充满了许多不一致之处,无论哪种方式,Windows上都没有这样的目录。
user3338098 2015年

3

为了补充loyola的回答,值得一提的是,自MySQL 5.1起,该版本log_slow_queries已弃用并替换为slow-query-log

使用log_slow_queries会导致您service mysql restartservice mysql start失败


1
shell> mysqladmin flush-logs


shell> mv host_name.err-old backup-directory

7
欢迎来到stackoverflow。请考虑进一步说明您的答案中的代码与OP的问题有关。另外,代码应缩进4个空格以启用正确的格式。
Politank-Z 2015年

1

除了上述答案外,您还可以将命令行参数传递给mysqld进程以记录选项,而不用手动编辑conf文件。例如,要启用常规日志记录并指定文件:

mysqld --general-log --general-log-file=/var/log/mysql.general.log

确认上面的其他答案,即可mysqld --help --verbose为您提供conf文件中的值(因此,使用命令行选项general-log运行为FALSE);而mysql -se "SHOW VARIABLES" | grep -e log_error -e general_log给出:

general_log     ON
general_log_file        /var/log/mysql.general.log

对错误日志使用稍微紧凑的语法:

mysqld --general-log --general-log-file=/var/log/mysql.general.log --log-error=/var/log/mysql.error.log
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.