Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

7.4.6 服务器日志维护

第 7.4 节,“MySQL 服务器日志”所述,MySQL 服务器可以创建多个不同的日志文件,以帮助您查看活动情况。然而,您必须定期清理这些文件,以确保日志不占用太多磁盘空间。

使用 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 LOGS 语句或 mysqladmin flush-logs, mysqladmin refresh, mysqldump --flush-logs, 或 mysqldump --source-data 命令。请参阅第 15.7.8.3 节,“FLUSH 语句”, 第 6.5.2 节,“mysqladmin — 一个 MySQL 服务器管理程序”, 和 第 6.5.4 节,“mysqldump — 一个数据库备份程序”。此外,服务器在当前二进制日志文件大小达到 max_binlog_size 系统变量值时自动刷新二进制日志。

FLUSH LOGS 支持可选修饰符,以启用个别日志的选择性刷新(例如,FLUSH BINARY LOGS)。请参阅第 15.7.8.3 节,“FLUSH 语句”

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

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

  • 如果启用了通用查询日志记录或慢速查询日志记录到文件,服务器将关闭和重新打开日志文件。

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

执行日志刷新语句或命令需要使用具有 RELOAD 权限的账户连接到服务器。在 Unix 和 Unix-like 系统上,另一种刷新日志的方法是向服务器发送信号,可以由 root 或服务器进程所有者账户执行。(见 第 6.10 节,“Unix 信号处理在 MySQL 中”。)信号使日志刷新可以在不连接到服务器的情况下执行:

  • 一个 SIGHUP 信号刷新所有日志。然而,SIGHUP 有其他不相关于日志刷新的效果可能是不可取的。

  • SIGUSR1 导致服务器刷新错误日志、通用查询日志和慢查询日志。如果您只想刷新这些日志,SIGUSR1 可以用作一个较“轻量级”的信号,不具有 SIGHUP 的其他效果。

如前所述,刷新二进制日志创建一个新的二进制日志文件,而刷新通用查询日志、慢查询日志或错误日志只是关闭并重新打开日志文件。对于后者日志,在 Unix 上,先重命名当前日志文件,然后刷新它。在刷新时,服务器以原始名称打开新的日志文件。例如,如果通用查询日志、慢查询日志和错误日志文件名为 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