中描述的5.4节,“MySQL服务器日志”MySQL服务器可以创建几个不同的日志文件来帮助您查看正在发生的活动。但是,您必须定期清理这些文件,以确保日志不会占用太多磁盘空间。
当使用启用日志记录的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服务器管理程序,第4.5.4节," mysqldump -一个数据库备份程序".此外,当当前二进制日志文件大小达到max_binlog_size
系统变量。
刷新日志
支持可选的修饰符来启用对单个日志的选择性刷新(例如,冲洗二进制日志
).看到第13.7.8.3节,“FLUSH语句”.
日志刷新操作具有以下效果:
如果启用了二进制日志记录,服务器将关闭当前二进制日志文件,并打开一个具有下一个序列号的新日志文件。
如果启用了对日志文件的常规查询日志记录或慢速查询日志记录,服务器将关闭并重新打开日志文件。
如果服务器是用
——日志错误
选项将错误日志写入一个文件,则服务器关闭并重新打开日志文件。
日志刷新语句或命令的执行需要使用具有重新加载
特权。在Unix和类Unix系统上,刷新日志的另一种方法是向服务器发送信号,这可以通过根
或者拥有服务器进程的帐户。(见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.logOld mv err.log error .log. Old mysqladmin flush-logs .log
在Windows上,使用重命名而不是mv.
此时,您可以对mysql.log.old
,mysql-slow.log.old
,err.log.old
,然后将它们从磁盘中移除。
要在运行时重命名常规查询日志或慢速查询日志,首先连接到服务器并禁用日志:
设置全局general_log = 'OFF';SET GLOBAL slow_query_log = 'OFF';
禁用日志后,从外部重命名日志文件(例如,从命令行重命名)。然后再次启用日志:
设置全局general_log = 'ON';设置全局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