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数据库千万级数据查询和存储
May 18 MySQL
MySQL注入基础练习
May 30 MySQL
mysql外连接与内连接查询的不同之处
Jun 03 MySQL
浅析MySQL如何实现事务隔离
Jun 26 MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 MySQL
MySQL数据库必备之条件查询语句
Oct 15 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
Nov 27 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
mysql的单列多值存储实例详解
Apr 05 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
MySQL连接控制插件介绍
Sep 25 #MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
You might like
有关php运算符的知识大全
2011/11/03 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
JavaScript实现将文本框的值插入指定位置的方法
2015/08/13 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
jQuery中event.target和this的区别详解
2020/08/13 jQuery
在Vue里如何把网页的数据导出到Excel的方法
2020/09/30 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
Python中使用asyncio 封装文件读写
2016/09/11 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
python:print格式化输出到文件的实例
2018/05/14 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
python实现图片插入文字
2019/11/26 Python
建筑文秘专业个人求职信范文
2013/12/28 职场文书
小学体育教学反思
2014/01/31 职场文书
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
企业口号大全
2014/06/12 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
检讨书模板
2015/01/29 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
Nginx实现负载均衡的项目实践
2022/03/18 Servers
nginx共享内存的机制详解
2022/03/21 Servers
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android