MySQL 服务器日志太多了怎么维护?看完你就懂了

前言

MySQL Server可以创建多种不同的日志文件来帮助您查看发生在MySQL的各种操作行为。但是,您必须定期清理这些文件,以确保日志不会占用过多的磁盘空间。


服务器日志维护

对于二进制日志,可以设置expire_logs_days系统变量,设置之后会在指定的天数后自动使二进制日志文件失效(删除)。如果使用复制,则应将变量设置为不低于副本可能滞后于源的最大天数。

例:在配置文件配置二进制日志文件有效期为5天

[mysqld]
#设置二进制日志文件的有效期
expire_logs_days=5

要按需删除部分二进制日志,请使用 PURGE BINARY LOGS语句。

PURGE (清除二进制日志语句)

语法:

PURGE { BINARY | MASTER } LOGS {
    TO 'log_name'
  | BEFORE datetime_expr
}

二进制日志是一组文件,由一组二进制日志文件组成加上一个索引文件组成,里面包含了MySQL服务器所做的数据修改的信息。

PURGE 语句可以删除在指定的日志文件名称或日期之前在日志索引文件中列出的所有二进制日志文件。BINARY 和MASTER是同义词。删除的日志文件也从索引文件中记录的列表中删除,以便给定的日志文件成为记录列表中的第一个。

例:

#使用指定的日志文件名称删除二进制日志文件,不会删除我们指定的那个日志文件,只会删除指定文件前的日志文件
PURGE BINARY LOGS TO 'mysql-bin.010';
#使用日期删除二进制日志文件
PURGE BINARY LOGS BEFORE '2019-04-02 22:46:26';

BEFORE的 datetime_expr参数值应该为一个DATETIME值(格式:‘YYYY-MM-DD hh:mm:ss’)

复制副本时,此语句可以安全运行。您无需停止它们。如果您有一个活动副本,当前正在读取您要删除的日志文件之一,则此语句不会删除正在使用的日志文件或晚于该日志文件的任何日志文件,但会删除任何较早的日志文件。在这种情况下会发出警告消息。但是,如果未连接副本,而您恰巧要清除尚未读取的日志文件之一,则副本在重新连接后将无法复制。

要安全清除二进制日志文件,请按照以下步骤操作:

1、在每个副本上,用于SHOW SLAVE STATUS检查它正在读取哪个日志文件。

2、使用SHOW BINARY LOGS来获取复制源服务器上二进制日志文件的列表

3、在所有副本中确定最早的日志文件。如果所有的复制都是最新的,那么就是列表中的最后一个日志文件。

4、对要删除的所有日志文件进行备份。(此步骤是可选的,但建议这样做。)

5、清除所有日志文件,但不包括目标文件。

PURGE BINARY LOGS TOPURGE BINARY LOGS BEFORE当文件中列出的二进制日志文件.index已通过其他某种方式(例如在Linux上使用rm)从系统中删除 时,操作会失败并显示错误。要处理此类错误,请手动编辑.index文件(这是一个简单的文本文件),以确保它仅列出实际存在的二进制日志文件,然后再次运行PURGE BINARY LOGS 失败的语句。

实例:

#原来的目录
-rw-r-----. 1 mysql mysql     8393 12月 22 17:15 mysql-bin.000001
-rw-r-----. 1 mysql mysql      289 12月 22 17:26 mysql-bin.000002
-rw-r-----. 1 mysql mysql      265 12月 23 10:51 mysql-bin.000003
-rw-r-----. 1 mysql mysql      246 12月 23 10:51 mysql-bin.000004
-rw-r-----. 1 mysql mysql       76 12月 23 10:51 mysql-bin.index


mysql> purge binary logs to 'mysql-bin.000003';
Query OK, 0 rows affected (0.00 sec)

#删除之后的目录
-rw-r-----. 1 mysql mysql      265 12月 23 10:51 mysql-bin.000003
-rw-r-----. 1 mysql mysql      246 12月 23 10:51 mysql-bin.000004
-rw-r-----. 1 mysql mysql       38 12月 23 12:04 mysql-bin.index

**刷新日志**

要强制MySQL开始使用新的日志文件,需要刷新日志。执行FLUSH LOGS语句或mysqladmin flush-logs,mysqladmin refresh, mysqldump --flush-logs命令,会发生日志刷新。此外,当当前二进制日志文件大小达到系统变量max_binlog_size的值时,服务器也会自动刷新二进制日志。

FLUSH LOGS支持可选的修饰符,以启用对单个日志的选择性刷新(例如FLUSH BINARY LOGS)。

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

 1. 如果启用了二进制日志记录,则服务器将关闭当前的二进制日志文件,并使用下一个序列号打开一个新的日志文件。
 2. 如果启用了常规查询日志记录或慢速查询日志记录到日志文件,则服务器将关闭并重新打开日志文件。
 3. 如果服务器启动时带有将 --log-error错误日志写入文件的选项,则服务器将关闭并重新打开日志文件。

如前所述,刷新二进制日志会创建一个新的二进制日志文件,而刷新常规查询日志,慢查询日志或错误日志只会关闭并重新打开日志文件。这对于旧的日志文件来说是没有变化的,一般是用于创建了新的日志文件,然后刷新,再使用新的日志文件。例如,如果是一般查询日志,慢查询日志和错误日志文件,它们的命名为mysql.log, mysql-slow.log和 err.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

刷新了之后,你可以备份 mysql.log.old, mysql-slow.log.old和 err.log.old,然后从硬盘中删除,或者直接将这些旧的日志文件删除。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值