中描述的第5.4节“MySQL服务器日志”, MySQL Server可以创建几个不同的日志文件,以帮助您查看正在发生的活动。但是,您必须定期清理这些文件,以确保日志不会占用太多的磁盘空间。
当使用启用了日志记录的MySQL时,您可能需要时不时地备份和删除旧的日志文件,并告诉MySQL开始记录新文件。看到第7.2节“数据库备份方法”.
在Linux (Red Hat)安装中,您可以使用mysql-log-rotate
日志维护脚本。如果从RPM发行版安装MySQL,则应该已经自动安装了该脚本。如果使用二进制日志进行复制,请小心使用此脚本。在确定所有副本都处理了二进制日志的内容之前,不应该删除二进制日志。
在其他系统上,您必须自己安装一个简短的脚本,然后从该脚本开始cron(或其等效程序)用于处理日志文件。
在服务器的二进制日志过期时间之后,二进制日志文件将自动删除。可以在启动时和二进制日志刷新时删除文件。缺省情况下,二进制日志过期时间为30天。要指定另一种过期时间,请使用binlog_expire_logs_seconds
系统变量。如果使用复制,则应该指定不低于副本可能落后于源的最长时间的过期期。要按需删除二进制日志,请使用清洗二进制日志
声明(见第13.4.1.1节,"清除二进制日志语句").
要强制MySQL开始使用新的日志文件,请刷新日志。执行时,会发生日志刷新刷新日志
语句或一个mysqladmin flush-logs,mysqladmin刷新,, mysqldump——flush-logs,或, mysqldump——主数据命令。看到第13.7.8.3节," FLUSH语句",mysqladmin - MySQL服务器管理程序,“mysqldump -一个数据库备份程序”4.5.4节.此外,当当前二进制日志文件大小达到的值时,服务器自动刷新二进制日志max_binlog_size
系统变量。
刷新日志
支持可选修饰符,以启用个别日志的选择性刷新(例如,冲洗二进制日志
).看到第13.7.8.3节," FLUSH语句".
日志刷新操作会产生以下影响:
如果启用了二进制日志记录,服务器将关闭当前二进制日志文件,并打开一个具有下一个序列号的新日志文件。
如果启用了对日志文件的常规查询日志记录或慢查询日志记录,服务器将关闭并重新打开日志文件。
方法启动服务器
——日志错误
选项将错误日志写入文件,服务器关闭并重新打开日志文件。
日志刷新语句或命令的执行需要使用具有重新加载
特权。在Unix和类Unix系统上,另一种刷新日志的方法是向服务器发送一个信号,可以通过以下方式完成根
或者拥有服务器进程的帐户。(见第4.10节“MySQL中的Unix信号处理”)。信号允许在不连接到服务器的情况下执行日志刷新:
一个
SIGHUP
信号将刷新所有日志。然而,SIGHUP
除了可能不需要的日志刷新之外,还有其他影响。从MySQL 8.0.19开始,
SIGUSR1
导致服务器刷新错误日志、一般查询日志和慢查询日志。如果您只对刷新那些日志感兴趣,SIGUSR1
可以作为一个更”轻量级”的信号SIGHUP
与日志无关的影响。
如前所述,刷新二进制日志会创建一个新的二进制日志文件,而刷新常规查询日志、慢查询日志或错误日志只是关闭并重新打开日志文件。对于后一种日志,要在Unix上创建一个新的日志文件,请先重命名当前日志文件,然后再刷新它。刷新时,服务器打开具有原始名称的新日志文件。例如,以通用查询日志、慢查询日志和错误日志文件命名mysql.log
,mysql-slow.log
,err.log
,你可以在命令行中使用如下命令:
cdmysql-data-directoryMv mysql.log mysql.log.old Mv mysql-slow.log旧的mv err.log err.log.旧的mysqladmin flush-logs
在Windows上,使用重命名而不是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
属于根
并且不能被写mysqld.在这种情况下,日志刷新操作将无法创建新的日志文件。
要处理这种情况,必须在重命名原始日志文件后手动创建具有正确所有权的新日志文件。例如,执行这些命令根
:
mv /var/log/mysqld.log /var/log/mysqld.log。旧的安装-omysql -gmysql -m0644 /dev/null /var/log/mysqld.log