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官方性能测试工具mysqlslap的使用简介
May 21 MySQL
52条SQL语句教你性能优化
May 25 MySQL
MySQL的安装与配置详细教程
Jun 26 MySQL
MySQL的Query Cache图文详解
Jul 01 MySQL
Mysql中where与on的区别及何时使用详析
Aug 04 MySQL
MySQL令人大跌眼镜的隐式转换
Aug 23 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
Feb 28 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
MySQL查询日期时间
May 15 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 MySQL
MySQL范围查询优化的场景实例详解
Jun 10 MySQL
MySQL分布式恢复进阶
Jul 23 MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
MySQL连接控制插件介绍
Sep 25 #MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
You might like
一个php导出oracle库的php代码
2009/04/20 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
关于jquery css的使用介绍
2013/04/18 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
javaScript语法总结
2016/11/25 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python自定义类并使用的方法
2015/05/07 Python
自己使用总结Python程序代码片段
2015/06/02 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python解析多层json操作示例
2019/12/30 Python
浅谈numpy中函数resize与reshape,ravel与flatten的区别
2020/06/18 Python
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
vue实现倒计时功能
2021/03/24 Vue.js
数控专业毕业生求职信范文
2013/09/21 职场文书
经典优秀个人求职自荐信格式
2013/09/25 职场文书
大学生党课思想汇报
2013/12/29 职场文书
追悼会上的答谢词
2014/01/10 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
赔偿协议书范本
2014/04/15 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书