Mysql binlog日志文件过大的解决

 更新时间:2021年09月28日 15:48:05   作者:say8129  
本文主要介绍了Mysql binlog日志文件过大的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

磁盘突然报错使用率过大,排查原因,发现mysql的binlog文件占用过大

命令

ls -l -h

在这里插入图片描述

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,看到只保留了前三天的日志

在这里插入图片描述

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的inet_aton()和inet_ntoa()函数存储IP地址的方法分享

    利用mysql的inet_aton()和inet_ntoa()函数存储IP地址的方法分享

    当前很多应用都适用字符串char(15)来存储IP地址(占用16个字节),利用inet_aton()和inet_ntoa()函数,来存储IP地址效率很高,适用unsigned int 就可以满足需求,不需要使用bigint,只需要4个字节,节省存储空间,同时效率也高很多
    2012-03-03
  • Mysql元数据如何生成Hive建表语句注释脚本详解

    Mysql元数据如何生成Hive建表语句注释脚本详解

    这篇文章主要给大家介绍了关于Mysql元数据如何生成Hive建表语句注释脚本的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • MySql索引提高查询速度常用方法代码示例

    MySql索引提高查询速度常用方法代码示例

    这篇文章主要介绍了MySql索引提高查询速度常用方法代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • mysql触发器之触发器的增删改查操作示例

    mysql触发器之触发器的增删改查操作示例

    这篇文章主要介绍了mysql触发器之触发器的增删改查操作,结合实例形式分析了mysql触发器的定义及使用触发器进行增删改查等相关操作技巧,需要的朋友可以参考下
    2019-12-12
  • 教你使用idea连接服务器mysql的步骤

    教你使用idea连接服务器mysql的步骤

    这篇文章主要介绍了如何使用idea连接服务器上的mysql,具体步骤本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • 深入解析MySQL 事务

    深入解析MySQL 事务

    这篇文章主要给大家分享的是mysql事务解析,事务(transaction)是业务逻辑的一个基本的单元组成,下面文章围绕mysql事务的相关资料展开详细内容,需要的朋友可以参考一下希望对大家有所帮助
    2022-01-01
  • sql中with as用法以及with-as性能调优/with用法举例

    sql中with as用法以及with-as性能调优/with用法举例

    SQL中的WITH AS语法是一种强大的工具,可以简化复杂查询的编写,提高查询的可读性和维护性,这篇文章主要给大家介绍了关于sql中with as用法以及with-as性能调优/with用法的相关资料,需要的朋友可以参考下
    2024-01-01
  • Mysql 相邻两行记录某列的差值方法

    Mysql 相邻两行记录某列的差值方法

    今天小编就为大家分享一篇Mysql 相邻两行记录某列的差值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • MySQL8.0之CTE(公用表表达式)的使用

    MySQL8.0之CTE(公用表表达式)的使用

    本文主要介绍了MySQL8.0之CTE(公用表表达式)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • mysql 无限级分类实现思路

    mysql 无限级分类实现思路

    关于该问题,暂时自己还没有深入研究,在网上找到几种解决方案,各有优缺点。
    2011-08-08

最新评论