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 06 MySQL
MySQL root密码的重置方法
Apr 21 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
Jul 01 MySQL
MySQL修改默认引擎和字符集详情
Sep 25 MySQL
浅谈MySQL表空间回收的正确姿势
Oct 05 MySQL
分享几个简单MySQL优化小妙招
Mar 31 MySQL
一文简单了解MySQL前缀索引
Apr 03 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
Mysql数据库事务的脏读幻读及不可重复读详解
May 30 MySQL
mysql sql常用语句大全
Jun 21 MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
MySQL连接控制插件介绍
Sep 25 #MySQL
Mysql案例刨析事务隔离级别
Sep 25 #MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 #MySQL
You might like
php+javascript的日历控件
2009/11/19 PHP
PHP set_error_handler()函数使用详解(示例)
2013/11/12 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
python利用elaphe制作二维条形码实现代码
2012/05/25 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
Python 函数返回值的示例代码
2019/03/11 Python
Python3日期与时间戳转换的几种方法详解
2019/06/04 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
Python爬虫开发与项目实战
2020/12/16 Python
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
沙龙级头发造型工具:FOXYBAE
2018/07/01 全球购物
JPA的特点
2014/10/25 面试题
编辑找工作求职信范文
2013/12/16 职场文书
保险内勤岗位职责
2014/04/05 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
普通话演讲稿
2014/09/03 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
教师聘用意向书
2015/05/11 职场文书
诉讼和解协议书
2016/03/23 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
Python实现视频中添加音频工具详解
2021/12/06 Python