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三值逻辑与NULL
May 19 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL 查询速度慢的原因
May 25 MySQL
MySQL中出现乱码问题的终极解决宝典
May 26 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
解决mysql模糊查询索引失效问题的几种方法
Jun 18 MySQL
浅谈MySQL user权限表
Jun 18 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
mysql timestamp比较查询遇到的坑及解决
Nov 27 MySQL
MySQL创建定时任务
Jan 22 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
MySQL连接控制插件介绍
Sep 25 #MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
You might like
全国FM电台频率大全 - 18 湖南省
2020/03/11 无线电
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
使用phpQuery采集网页的方法
2013/11/13 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
详解微信小程序——自定义圆形进度条
2016/12/29 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
vue生命周期和react生命周期对比【推荐】
2018/09/19 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
layui字体图标 loading图标静止不旋转的解决方法
2019/09/23 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中is与==判断的区别
2017/03/28 Python
深入浅析Python的类
2018/06/22 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
python绘制汉诺塔
2021/03/01 Python
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
交通安全教育制度
2014/02/02 职场文书
小区文明倡议书
2014/05/16 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
天堂的孩子观后感
2015/06/11 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
python实现批量移动文件
2021/04/05 Python
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript