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

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

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

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

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

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

显然,我有一个黑客式的修复方法,但我希望能够在其上使用 logrotate,而不需要 logrotate 也重复黑客操作。(比黑客操作更糟糕的是不得不重复黑客操作。)

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

答案1

听起来 mysql 进程(mysqld_safe我相信)无法创造在您使用 logrotate 将其移开并发送 HUP 后,日志文件会如何?如果我错了,请告诉我。

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

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

答案2

您还可以使用 logrotate 的 create 选项在轮换旧日志文件后创建日志文件。之后您唯一需要的是一个调用 mysqladmin flush-logs 的 postrotate 脚本(如果您有要用于维护的用户名/密码,请记住 -u 和 -p。)这可以为您节省日志文件变大时复制的开销。

不管哪种方式都很好:create 或 copytruncate。除了空间要求外,我不知道哪种方式比另一种方式有什么优势。

相关内容