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 分组查询的优化方法
May 12 MySQL
MySQL 如何分析查询性能
May 12 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
MySQL的安装与配置详细教程
Jun 26 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
MySQL中order by的使用详情
Nov 17 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
MySQL数据库实验之 触发器和存储过程
Jun 21 MySQL
DQL数据查询语句使用示例
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
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
js中查找最近的共有祖先元素的实现代码
2010/12/30 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
Vue-cli配置打包文件本地使用的教程图解
2018/08/02 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
python实现Flappy Bird源码
2018/12/24 Python
PyQt5实现简单数据标注工具
2019/03/18 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
django中related_name的用法说明
2020/05/20 Python
2013年高中生自我评价
2013/10/23 职场文书
黄金酒广告词
2014/03/21 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
环保建议书400字
2014/05/14 职场文书
停车场管理制度范本
2015/08/05 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis
Java基础——Map集合
2022/04/01 Java/Android