服务器日志维护

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年8月17日 (四) 09:18的版本 (创建页面,内容为“ MySQL服务器可以创建几种不同的日志文件,帮助您查看正在发生的活动。然而,您必须定期清理这些文件,以确保日志不会占用过多的磁盘空间。 在启用日志记录的情况下使用MySQL,您可能希望定期备份和删除旧的日志文件,并告诉MySQL开始记录到新文件中。 在Linux(Red Hat)安装中,您可以使用mysql-log-rotate脚本进行日志维护。如果您是从RPM发行版安…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

MySQL服务器可以创建几种不同的日志文件,帮助您查看正在发生的活动。然而,您必须定期清理这些文件,以确保日志不会占用过多的磁盘空间。

在启用日志记录的情况下使用MySQL,您可能希望定期备份和删除旧的日志文件,并告诉MySQL开始记录到新文件中。

在Linux(Red Hat)安装中,您可以使用mysql-log-rotate脚本进行日志维护。如果您是从RPM发行版安装MySQL,这个脚本应该已经自动安装了。如果您正在使用二进制日志进行复制,请小心使用此脚本。在确保所有副本都已处理其内容之前,不应删除二进制日志。

在其他系统上,您必须自己安装一个短脚本,通过cron(或其等效物)启动它来处理日志文件。

二进制日志文件在服务器的二进制日志到期后会自动删除。文件的删除可以在启动时和刷新二进制日志时进行。默认的二进制日志到期时间是30天。要指定其他到期时间,请使用binlog_expire_logs_seconds系统变量。如果您正在使用复制,您应该指定一个到期时间,该时间不应低于副本可能滞后于源的最长时间。要按需删除二进制日志,请使用PURGE BINARY LOGS语句。

要强制MySQL开始使用新的日志文件,请刷新日志。当您执行FLUSH LOGS语句或mysqladmin flush-logs、mysqladmin refresh、mysqldump –flush-logs或mysqldump –master-data命令时,日志刷新会发生。此外,当当前的二进制日志文件大小达到max_binlog_size系统变量的值时,服务器会自动刷新二进制日志。

FLUSH LOGS支持可选的修饰符,以启用对各个日志进行选择性刷新(例如,FLUSH BINARY LOGS)。

日志刷新操作具有以下效果:

  • 如果启用了二进制日志记录,服务器将关闭当前的二进制日志文件,并打开一个带有下一个序列号的新日志文件。
  • 如果启用了将一般查询日志或慢查询日志记录到日志文件中,服务器将关闭并重新打开日志文件。
  • 如果服务器在启动时使用–log-error选项将错误日志写入文件,服务器将关闭并重新打开日志文件。

执行日志刷新语句或命令需要使用具有RELOAD特权的帐户连接到服务器。在Unix和类Unix系统上,刷新日志的另一种方法是向服务器发送信号,可以由root用户或拥有服务器进程的帐户执行。信号使得无需连接到服务器即可执行日志刷新:

  • SIGHUP信号刷新所有日志。但是,SIGHUP除了日志刷新之外还有其他可能不希望的附加效果。
  • 从MySQL 8.0.19开始,SIGUSR1信号会导致服务器刷新错误日志、一般查询日志和慢查询日志。如果您只想刷新这些日志,可以将SIGUSR1用作更“轻量级”的信号,它不具有与日志无关的SIGHUP效果。

如前所述,刷新二进制日志会创建一个新的二进制日志文件,而刷新一般查询日志、慢查询日志或错误日志只是关闭并重新打开日志文件。对于后者的日志,在Unix上,在刷新之前,先将当前日志文件重命名。在刷新时,服务器将使用原始名称打开新的日志文件。例如,如果一般查询日志、慢查询日志和错误日志文件分别命名为mysql.log、mysql-slow.log和err.log,您可以在命令行中使用以下一系列命令来实现:

cd mysql-data-directory
mv mysql.log mysql.log.old
mv mysql-slow.log mysql-slow.log.old
mv err.log err.log.old
mysqladmin flush-logs

在Windows上,使用rename而不是mv命令。

此时,您可以先备份mysql.log.old、mysql-slow.log.old和err.log.old,然后将它们从磁盘上删除。

要在运行时重命名一般查询日志或慢查询日志,首先连接到服务器并禁用日志:

SET GLOBAL general_log = 'OFF';
SET GLOBAL slow_query_log = 'OFF';

在禁用日志的情况下,外部重命名日志文件(例如,在命令行中)。然后再次启用日志:

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

此方法适用于任何平台,不需要重新启动服务器。

注意:

如果您在外部重命名了一个日志文件,服务器要重新创建该日志文件,那么文件的位置必须对服务器可写。例如,在Linux上,服务器可能将错误日志写入为/var/log/mysqld.log,而/var/log是由root拥有并且对mysqld不可写的。在这种情况下,日志刷新操作无法创建新的日志文件。

为了处理这种情况,您必须在重命名原始日志文件后手动创建具有正确所有权的新日志文件。例如,以root身份执行以下命令:

mv /var/log/mysqld.log /var/log/mysqld.log.old

install -omysql -gmysql -m0644 /dev/null /var/log/mysqld.log