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 REVOKE实现删除用户权限
Jun 18 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
MySQL系列之八 MySQL服务器变量
Jul 02 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
MySQL创建管理子分区
Apr 13 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySQL 自动填充 create_time 和 update_time
May 20 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函数microtime()用法与说明
2013/12/04 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
PDO实现学生管理系统
2020/03/21 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
jQuery实现div横向拖拽排序的简单实例
2016/07/13 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
微信小程序 图片宽度自适应的实现
2017/04/06 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
javascript跳转与返回和刷新页面的实例代码
2019/11/20 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
Python管理Windows服务小脚本
2018/03/12 Python
python程序变成软件的实操方法
2019/06/24 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
圣诞树世界:Christmas Tree World
2019/12/10 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
车贷收入证明范本
2014/01/09 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
清洁工工作总结
2015/08/11 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers