MySQL--binlog日志手动删除与自动清理

原文网址:MySQL--binlog日志手动删除与自动清理-CSDN博客

简介

本文介绍如何MySQL的binlog日志如何手动删除与自动清理。

默认情况下,MySQL会生成binlog日志,在增删改操作时会往binlog写数据。通过binlog记录可以找到增删改日志,可以将数据恢复到某条日志对应的时间点,可以用于数据库被误删、被攻击时进行恢复。

问题描述

默认情况下,mysql会生成很多个binlog,占用很大的空间。

查询binlog的方法如下:

法1:用MySQL命令

bash 复制代码
SHOW BINARY LOGS

结果如下(下边最大已经到了1G多):

法2:到MySQL服务器查文件

到MySQL数据路径下,执行命令:ls -lh

解决方案

方案是:删除旧的binlog,只保留最近的binlog;修改binlog的过期时间(默认一直存活),比如:2天。

方案1. 手动删除binlog

使用MySQL提供的purge命令删除binlog。purge命令的定义如下:

法1:指定文件名

将BINLOG-FILE-NAME之前日期的(不包括自己本身)所有binlog文件清理掉。

bash 复制代码
PURGE {BINARY | MASTER} LOGS TO "BINLOG-FILE-NAME"

例如:

bash 复制代码
PURGE BINARY LOGS TO 'mysql-bin.000007';

法2:指定时间

将最后修改时间早于datetime-rxpr的binlog文件清理掉(不包括自己)。

bash 复制代码
PURGE {BINARY | MASTER} LOGS BEFORE "DATETIME-EXPR"

例如:

bash 复制代码
PURGE BINARY LOGS BEFORE '2015-11-29 00:00:00';

方案2. 修改binlog过期时间

binlog_expire_logs_seconds参数可以控制binlog过期秒数,过了指定时间的日志将被自动删除,可动态修改。

  1. 如果设置了非0值,则在mysqld启动和日志刷新时,可能执行清理超过定义时间的binlog file
  2. 默认值为2592000(30天)。

查看binlog_expire_logs_seconds的方法:

bash 复制代码
SHOW GLOBAL VARIABLES LIKE 'BINLOG_EXPIRE_LOGS_SECONDS';

结果如下图所示:

法1:修改配置文件(需重启MySQL)

修改配置文件:/etc/my.cnf,在mysqld节点中增加如下内容

bash 复制代码
# binlog过期时间设置为3天。默认为30天。
binlog_expire_logs_seconds=259200

法2:使用命令(不需重启MySQL)

bash 复制代码
SET GLOBAL BINLOG_EXPIRE_LOGS_SECONDS=259200;

如下图所示:

相关推荐
时间售卖铺4 小时前
触发器与函数实战:MySQL高效编程秘诀
运维·数据库·mysql·云原生
数据库小组7 小时前
NineData 实战教程:MySQL 5.5 数据迁移同步到 MySQL 8.0(跨版本升级)
数据库·mysql·mysql优化·数据库开发·数据库迁移·版本升级·数据复制
cnskylee8 小时前
【MySQL】麒麟V10 SP3系统安装MySQL-Commercial-8.0.46
数据库·mysql·adb
梦幻通灵9 小时前
修改MySQL数据库递增序列【持续更新】
数据库·mysql
大侠归来10 小时前
常用 MySQL 分库分表方案详解
数据库·mysql
`Levie14 小时前
MySQL-数据库服务日志管理与数据闪回
数据库·mysql
香蕉大香蕉(06敬畏市场)14 小时前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
吹什么轩15 小时前
MySQL 事务管理:从 ACID 到 MVCC,一篇讲透
数据库·mysql
paopaokaka_luck16 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
m0_6399069416 小时前
MySQL 锁机制详解|表锁、行锁、意向锁,死锁成因与解决方案
数据库·mysql