文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  服务器日志维护

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-logsmysqladmin refreshmysqldump --flush-logsmysqldump --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 系统上,另一种刷新日志的方法是向服务器发送信号,这可以通过 root 或拥有服务器进程的帐户完成。(请参阅 第 6.10 节 “MySQL 中的 Unix 信号处理”。)信号允许在无需连接到服务器的情况下执行日志刷新

  • 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';

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

注意

为了让服务器在您从外部重命名文件后重新创建给定的日志文件,服务器必须对文件位置具有写入权限。这并非总是如此。例如,在 Linux 上,服务器可能会将错误日志写入 /var/log/mysqld.log,其中 /var/logroot 所有,并且 mysqld 不可写。在这种情况下,日志刷新操作将无法创建新的日志文件。

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

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