Mysql binlog日志文件过大的解决


Posted in MySQL onOctober 05, 2021

磁盘突然报错使用率过大,排查原因,发现mysql的binlog文件占用过大

命令

ls -l -h

Mysql binlog日志文件过大的解决

mysql-binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句((除了数据查询语句)信息。可以使用mysqlbin命令查看二进制日志的内容。

可以通过设置my.cof配置文件的方式限制binlog文件的输出。

1、相关binlog配置

vim /etc/my.cof

[mysqld]
expire_logs_days = 3
#设置binlog清理时间

max_binlog_size = 100m
#binlog每个日志文件大小

binlog_cache_size = 4m
#binlog缓存大小

max_binlog_cache_size = 512m
#最大binlog缓存大小

重启mysql,看到只保留了前三天的日志

Mysql binlog日志文件过大的解决

2、binlog相关高级设置

2.1 改变binlog模式

binlog的模式也有三种:STATEMENT、ROW、MIXED 。下面对这三种格式分别加以说明:

STATMENT模式

基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。

优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。

缺点:在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

ROW模式

不记录每一条SQL语句的上下文信息,仅需记录哪条数据被修改了,修改成了什么样子了。

优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。

缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。

MIXED模式

混合模式复制(mixed-based replication, MBR):以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
修改配置文件

[mysqld]
binlog_format = mixed
#设置日志格式

2.2 相关SQL操作binlog

show binary logs;                            
# 查看binlog现有详情

show variables like '%log%';            
# 查看log变量的相关配置

set global expire_logs_days = 3;    
# 设置binlog的保存时间

reset master;                                 
# 重置所有的binlog,相当于删除所有的binlog,这个操作对主从集群影响非常大,因为主从赋值是基于binlog日志来实现的

PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
# 删除指定的日志或日期之前的日志索引中的所有二进制日志。MASTER和BINARY是同义词

PURGE MASTER LOGS TO 'binlog.000013'; 
#清除binlog.000013日志

PURGE MASTER LOGS BEFORE '2020-01-08 10:00:00';  
#清除2020-01-08 10:00:00前binlog日志

PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY); 
# 清除3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。

到此这篇关于Mysql binlog日志文件过大的解决的文章就介绍到这了,更多相关Mysql binlog日志过大内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL锁机制
Apr 05 MySQL
MySQL之DML语言
Apr 05 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
Mysql案例刨析事务隔离级别
Sep 25 MySQL
MySQL数据库中的锁、解锁以及删除事务
May 06 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySQL选择合适的备份策略和备份工具
Jun 01 MySQL
SQL语句中EXISTS的详细用法大全
Jun 25 MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
MySQL连接控制插件介绍
Sep 25 #MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
You might like
用PHP读注册表
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
php抓取页面的几种方法详解
2013/06/17 PHP
ThinkPHP的I方法使用详解
2014/06/18 PHP
php中$_POST与php://input的区别实例分析
2015/01/07 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
动态修改DOM 里面的 id 属性的弊端分析
2008/09/03 Javascript
IE6与IE7中,innerHTML获取param的区别
2009/03/15 Javascript
JSON 客户端和服务器端的格式转换
2009/08/27 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
基于javascript实现判断移动终端浏览器版本信息
2014/12/09 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
JS实现简易的图片拖拽排序实例代码
2017/06/09 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
[00:16]热血竞技场
2019/03/06 DOTA
python实现多线程的两种方式
2016/05/22 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
python实现飞机大战项目
2020/03/11 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
销售文员的岗位职责
2013/11/20 职场文书
高中生职业规划范文
2014/03/09 职场文书
经典演讲稿开场白
2014/08/25 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
医院员工辞职信范文
2015/05/12 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android