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连接查询你真的学会了吗?
Jun 02 MySQL
MySQL的Query Cache图文详解
Jul 01 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
SQL注入篇学习之盲注/宽字节注入
Mar 03 MySQL
MySQL优化及索引解析
Mar 17 MySQL
MySQL学习之基础操作总结
Mar 19 MySQL
MySQL库表太大怎么办? 数据库分库分表项目实践
Apr 11 MySQL
MySQL 逻辑备份 into outfile
May 15 MySQL
MySQL详解进行JDBC编程与增删改查方法
Jun 16 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文件上传实例详解!!!
2007/01/02 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
javascript 判断数组是否已包含了某个元素的函数
2010/05/30 Javascript
让人印象深刻的10个jQuery手风琴效果应用
2012/05/08 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
webpack构建react多页面应用详解
2017/09/15 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
微信小程序实现定位及到指定位置导航的示例代码
2019/08/20 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
python Tkinter版学生管理系统
2019/02/20 Python
Python如何使用函数做字典的值
2019/11/30 Python
PYQT5开启多个线程和窗口,多线程与多窗口的交互实例
2019/12/13 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
python自定义函数def的应用详解
2020/06/03 Python
python如何查看网页代码
2020/06/07 Python
Keras实现DenseNet结构操作
2020/07/06 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
机关保密承诺书
2014/06/03 职场文书
学校计划生育责任书
2015/05/09 职场文书
同学会感言
2015/07/30 职场文书
工程移交协议书
2016/03/24 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js