修复mysql慢查询日志错误13的最佳实践

com*_*omb 6 mysql logging query best-practices

CentOS 5.5 MySQL 5.5 通过 yum 存储库安装

[错误] 无法使用 /var/log/mysqld.slow.log 进行日志记录(错误 13)。在 MySQL 服务器进程的整个持续时间内关闭注销。再次打开它:修复原因,关闭 MySQL 服务器并重新启动它。

使用 MySQL 5.5 的标准安装(特别是来自 webtatic 存储库),由于权限问题,慢查询日志无法开始实际记录。如果我预先创建了一个副本并且chown它属于 user:mysql 和 group:mysql,那么它就可以正常工作。

在同一个目录 ( /var/log) 中,创建和记录到 mysql.log 和 mysql.error.log 没有问题。

显然我对它有一个hackish修复,但我希望能够在它上面使用logrotate,而不需要额外的logrotate来重复hackery。(唯一比hackery更糟糕的是不得不重复hacky。)

有谁知道解决这个问题的最佳做法是什么?

Kyl*_*ith 4

听起来好像 mysql 进程(我相信)在使用 logrotate 将其移开并发送 HUP 后mysqld_safe无法创建日志文件?如果我离开这里,请告诉我。

假设我还没有离开,这里有几个选择:

  • 将日志移至与 mysqld_safe 进程相同的用户拥有的目录。例如,创建一个/var/log/mysqld/目录并将日志文件保存在其中。如果目录是 mysql:mysql 700 那么可以毫无问题地创建新文件。
  • 使用复制/截断 logrotate 方法而不是 move/SIGHUP 方法。复制/截断方法会将当前日志文件 ( mysqld.slow.log) 复制到新文件 ( mysqld.slow.log.1),然后将原始文件截断为零字节。如果您不想因某种原因中断写入日志的进程,这非常有用。当然,缺点是在将原始文件擦除回零字节之前将原始文件复制到新文件会产生额外的磁盘开销。这是通过将copytruncate选项添加到该文件的 logrotate 节并删除不再需要的postrotate部分来完成的。