Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Server Log Maintenance

7.4.6 服务器日志维护

第7.4节,“MySQL Server Logs”所述,MySQL Server 可以创建多个不同的日志文件,以帮助您了解活动情况。但是,您必须定期清理这些文件,以确保日志不占用太多磁盘空间。

在启用了日志记录的 MySQL 中,您可能需要定期备份和删除旧日志文件,并告诉 MySQL 开始将日志写入新文件。请参阅第9.2节,“数据库备份方法”

在 Linux (Red Hat) 安装中,您可以使用 mysql-log-rotate 脚本进行日志维护。如果您从 RPM 分发安装了 MySQL,这个脚本应该已经自动安装了。但是,如果您正在使用二进制日志进行复制,您不能删除二进制日志,直到确定其内容已经被所有副本处理。

在其他系统中,您需要自己安装一个短脚本,然后从 cron(或其等价)启动该脚本来处理日志文件。

二进制日志文件在服务器的二进制日志过期期限后自动被删除。文件删除可以在启动时和当二进制日志被刷新时发生。默认的二进制日志过期期限为30天。要指定备用过期期限,请使用binlog_expire_logs_seconds系统变量。如果您正在使用复制,您应该指定一个过期期限,该期限不低于源服务器的最大延迟时间。要在需要时删除二进制日志,请使用PURGE BINARY LOGS语句(见第15.4.1.1节,“PURGE BINARY LOGS 语句”)。

强制 MySQL 使用新的日志文件,flush 日志。日志刷新发生在执行FLUSH LOGS语句或mysqladmin flush-logsmysqladmin refreshmysqldump--flush-logsmysqldump--source-data命令时。请参阅第15.7.8.3节,“FLUSH Statement”第6.5.2节,“mysqladmin — A MySQL Server Administration Program”第6.5.4节,“mysqldump — A Database Backup Program”。此外,服务器在当前二进制日志文件大小达到max_binlog_size系统变量的值时自动刷新二进制日志。

FLUSH LOGS支持可选修饰符,以便选择性地刷新单个日志(例如,FLUSH BINARY LOGS)。请参阅第15.7.8.3节,“FLUSH Statement”.

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

  • 如果启用了二进制日志记录,服务器将关闭当前的二进制日志文件,并打开一个新的日志文件,以下一个顺序号。

  • 如果启用了一般查询日志或慢查询日志到日志文件,服务器将关闭并重新打开日志文件。

  • 如果使用--log-error选项启动服务器,以便将错误日志写入到文件中,服务器将关闭并重新打开日志文件。

执行日志刷新语句或命令需要使用具有RELOAD特权的帐户连接到服务器。在Unix和Unix-like系统上,还可以通过发送信号到服务器来刷新日志,这可以由root或拥有服务器进程的帐户执行。请参阅第6.10节,“Unix Signal Handling in MySQL”

  • 信号可以在不需要连接到服务器的情况下执行日志刷新:

  • SIGUSR1 会导致服务器flush错误日志、通用查询日志和慢查询日志。如果您只想flush这些日志,而不想使用SIGHUP信号,那么SIGUSR1可以作为一个更“轻量级”的信号。

如前所述,flush二进制日志将创建新的二进制日志文件,而flush通用查询日志、慢查询日志或错误日志只是关闭并重新打开日志文件。对于后者日志,在Unix上,要想在flush时创建新日志文件,可以先重命名当前日志文件,然后在flush时服务器将以原始名称打开新的日志文件。例如,如果通用查询日志、慢查询日志和错误日志文件名为mysql.logmysql-slow.logerr.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.oldmysql-slow.log.olderr.log.old,然后从磁盘中删除它们。

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

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

在日志被禁用后,可以从命令行外部重命名日志文件,然后再次启用日志:

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

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

Note

服务器在您外部重新命名给定的日志文件后,需要重新创建该文件。因此,该文件路径必须是服务器可写的。这可能不总是情况。例如,在 Linux 上,服务器可能将错误日志写入到 /var/log/mysqld.log 中,其中 /var/logroot 所有,但不是 mysqld 可写的。在这种情况下,日志刷新操作无法创建新的日志文件。

为了解决这个问题,您必须手动创建新日志文件,并将其所有权设置为正确的值。例如,在重新命名原始日志文件后,可以以 root 身份执行以下命令:

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