修复mysql缓慢查询日志错误的最佳做法13

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

[错误]无法使用/var/log/mysqld.slow.log进行日志logging(错误13)。 在整个MySQL服务器进程期间closures注销。 要重新打开它:修复原因,closuresMySQL服务器并重新启动它。

使用MySQL 5.5的标准安装(特别是从webtatic存储库),由于权限问题,慢查询日志无法开始实际logging。 如果我预先创build一个副本,并将其属于用户:mysql和group:mysql,那么它工作正常。

在相同的目录( /var/log )中,创build和logging到mysql.log和mysql.error.log没有问题。

显然我有一个hackish修复它,但我希望能够使用logrotate,而无需另外需要logrotate重复hackery了。 (唯一比hackery更糟的是不得不重复hackery。)

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

这听起来像mysql进程( mysqld_safe ,我相信)是不能创build日志文件后,你使用logrotate将其移开,并发送一个HUP? 如果我在这里,请告诉我。

假设我没有离开,这里有几个select:

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

您也可以使用logrotate的创build选项在转出旧的日志文件后创build日志文件。 之后你唯一需要的是一个调用mysqladmin flush-logs的postrotate脚本(如果你有一个你想用于维护的用户名/密码,记住-u和-p)。这应该可以节省你的开销如果日志文件变大,则重复日志文件。

无论哪种方式应该是好的:创build或copytruncate。 除了空间要求之外,我不知道这个优势。