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 pt-slave-restart工具的使用简介
Apr 07 MySQL
MySQL之PXC集群搭建的方法步骤
May 25 MySQL
MySQL系列之十三 MySQL的复制
Jul 02 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
浅谈MySQL函数
Oct 05 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
MySQL 数据类型详情
Nov 11 MySQL
MySQL常见优化方案汇总
Jan 18 MySQL
MySQL创建定时任务
Jan 22 MySQL
MySQL插入数据与查询数据
Mar 25 MySQL
MYSQL优化之数据表碎片整理详解
Apr 03 MySQL
mysql序号rownum行号实现方式
Dec 24 MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
MySQL连接控制插件介绍
Sep 25 #MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
You might like
获取URL文件名后缀
2013/10/24 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
JS实现的随机排序功能算法示例
2017/06/09 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
详解Vue中组件传值的多重实现方式
2019/08/16 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
工作表现评语
2014/01/19 职场文书
房地产促销活动方案
2014/03/01 职场文书
创先争优承诺书范文
2014/03/31 职场文书
物流管理专业推荐信
2014/09/06 职场文书
员工辞职信范文
2015/03/02 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
开展警示教育活动总结
2015/05/09 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
导游词之澳门妈祖庙
2019/12/19 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android