我在SF上看到在MySQL中有一个选项可以logging所有查询。 因此,在我的版本中(CentOS 5.2上的mysql-server-5.0.45-7.el5),这似乎是启用“日志”选项的情况,所以我编辑了/etc/my.cnf来添加:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql old_passwords= log=/var/log/mysql-general.log [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
然后我创build了该文件并设置权限:
# touch /var/log/mysql-general.log # chown mysql. /var/log/mysql-general.log # ls -l /var/log/mysql-general.log -rw-r--r-- 1 mysql mysql 0 Jan 18 15:22 /var/log/mysql-general.log
但是当我启动mysqld时,我得到:
120118 15:24:18 mysqld started ^G/usr/libexec/mysqld: File '/var/log/mysql-general.log' not found (Errcode: 13) 120118 15:24:18 [ERROR] Could not use /var/log/mysql-general.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. 120118 15:24:18 InnoDB: Started; log sequence number 0 182917764 120118 15:24:18 [Note] /usr/libexec/mysqld: ready for connections.
任何人都可以提出为什么这不工作?
“找不到”听起来像是一个权限问题,即使您已经授予了mysql的权限来触摸该特定文件,但可能无法访问/var/log 。 尝试将日志文件放在mysql数据文件夹/var/lib/mysql/ 。 我正在尝试记住一个有史以来在该path之外看到mysql日志文件的情况..
如果你在Ubuntu上,如果你想把日志文件放到一个mysql目录之外(例如/ var / log / mysql),你可能会遇到这个问题。 要解决这个问题,请将path添加到/etc/apparmor.d/usr.sbin.mysqld.
当服务写入/var/log时,这不是一个不寻常的问题。 以root用户身份安装新应用程序的通常过程是通过名称来触摸新文件,然后将该文件翻到要写入该文件的用户/组。
(系统日志服务通常会拒绝在/ var / log中创build一个新的日志文件,因为这个目录本身是由root拥有的,所以没有作为root运行的服务不能创build新的文件。一旦你手动创build文件,日志轮换过程将为您维护权利和权限。)
IE:
root $ touch /var/log/mysql_general.log
root $ chown mysql.mysql /var/log/mysql_general.log
这将允许mysqld服务写入日志文件,即使mysqld的有效userid / gid不是root。 如果你没有默认处理它,你可能想检查一下logrotate来设置一个循环调度。 有关权限和最佳实践的更多详细信息,您需要调查系统日志configuration和维护。
(我只是在我inheritance的旧服务器上解决了这个问题。)
(编辑修复一个错字,并澄清一点)
在/ var / lib / mysql / mysql中有一个默认创build的名为general_log.csv的文件。 你也可以使用这个文件来指定(比如log = / var / lib / mysql / mysql / general_log.csv)
如果你确定你的文件权限是正确的,你可能会检查另外一件事情,那就是SELinux是干涉什么的。
我们把SELinux扔进宽容,突然之间MySQL能够在我们指定用于日志logging的单独的挂载上创build日志文件。 我们最终不得不调整我们想要放置日志的目录path的上下文。