zoukankan      html  css  js  c++  java
  • Mysql设置binlog过期时间并自动删除

    问题:
    Mysql数据库由于业务原因,数据量增长迅速,binlog日志会增加较多,占用大部分磁盘空间。
    
    解决方案:
    出于节约空间考虑,可进行删除多余binary日志,并设置定期删除操作。
    
    1、查看binlog过期时间
    mysql> show variables like 'expire_logs_days'; 或者
    mysql> select @@global.expire_logs_days;
    +------------------+-------+
    | Variable_name | Value |
    +------------------+-------+
    | expire_logs_days | 0 |
    +------------------+-------+
    1 row in set (0.00 sec)
    
    expire_logs_days=0:表示所有binlog日志永久都不会失效,不会自动删除;
    
    目前需求,只想保留七天日志,其余日志打包、压缩后备份至其他地方:
    
    修改方式:
    永久生效(重启后即生效):
    修改配置文件my.ini(window系统环境下,若为Linux环境,则修改my.cnf文件)文件:
    在[mysqld]标签内增加如下内容
    expire_logs_days=7
    max_binlog_size=500M
    
    设置之后不会立即清除,触发条件是:
    binlog大小超过max_binlog_size
    手动执行flush logs
    重新启动时(MySQL将会new一个新文件用于记录binlog)
    
    为了使之生效,需要执行flush logs。
    
    mysql> flush logs;
    Query OK, 0 rows affected, 64 warnings (0.16 sec
    
    如果binlog非常多,不要轻易设置该参数,有可能导致io争用,这时候可以使用purge命令予以清除:
    
    将bin.000055之前的binlog清掉:
    mysql>purge binary logs to 'bin.000055';
    
    将指定时间之前的binlog清掉:
    mysql>purge binary logs before '2019-09-13 23:59:59';
    
    注意,不要轻易手动去删除binlog,会导致binlog.index和真实存在的binlog不匹配,而导致expire_logs_day失效
    

    二、调整binlog日志模式

    ## 查看binlog日志模式
    mysql> show variables like "%binlog_format%";
    
    
    方法一:在线修改立即生效
    mysql> set global binlog_format='MIXED';
    Query OK, 0 rows affected (0.00 sec)
    
    方法二:在配置文件中参数如下:
    [mysqld]
    log-bin=/var/lib/mysql/mysql-bin
    #binlog_format="ROW"
    binlog_format="MIXED"   #开启MIXED模式
    #binlog_format="STATEMENT"
    
    修改后重启mysql服务。
    
    定位问题原因* 根据原因思考问题解决方案* 实践验证方案有效性* 提交验证结果
  • 相关阅读:
    exp迁移测试库10.2.0.5
    DG_Check检测
    DG Switch over
    CPU查询
    记录数据库中,段大小的数据增长情况
    C++ 多态
    java反射
    git的基本概念
    实现MySQL的Replication
    网页只允许中国用户访问
  • 原文地址:https://www.cnblogs.com/jimoliunian/p/13896409.html
Copyright © 2011-2022 走看看