• mysql binlog的清理


    Linux磁盘空间占满解决方法

    查询整体磁盘使用情况命令

    df -h

    ➜  / df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        3.8G     0  3.8G   0% /dev
    tmpfs           3.8G     0  3.8G   0% /dev/shm
    tmpfs           3.8G  393M  3.5G  11% /run
    tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
    /dev/vda1        40G   30G  7.2G  81% /
    tmpfs           777M     0  777M   0% /run/user/1000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查询某个目录下各文件夹或文件大小

    sudo du -sh *

    / sudo du -sh * 
    0	bin
    211M	boot
    ...
    2.2G	usr
    26G	var
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    然后进入/var目录下,继续使用该命令查看,发现是binlog过多导致,需要删除binlog日志。

    清理mysql binlog

    mysql的binlog必不可少,但是不清理的话,小云盘经受不住每天频繁的插入删除。所以binlog日志还需要删除。

    mysql> show variables like ‘%expire%’;

    在这里插入图片描述

    查询上述参数后发现在MySQL 8.0.12版本中默认开启binlog日志并设置为binlog_format=row,binlog失效日期参数为 binlog_expire_logs_seconds,默认30天过期。

    注释:
    在MySQL8.0 版本中新增参数binlog_expire_logs_seconds,可以精确到秒,而此前版本中expire_logs_days的单位为天,最小值为1,在MySQL8.0 GA中此参数标记为deprecated 。
    在MySQL 8.0 GA版本默认使用binlog_expire_logs_seconds,时间为2592000秒,30天。

    • 若在MySQL启动时inlog_expire_logs_secondsexpire_logs_days 都没设置值,则使用默认值的 binlog_expire_logs_seconds值,即30天;
    • 若在MySQL启动时binlog_expire_logs_seconds或者expire_logs_days其中一个设置为非0值则非0值的参数作为binlog日志失效期;
    • 若在启动时binlog_expire_logs_secondsexpire_logs_days参数都设置为非0值则使用binlog_expire_logs_seconds值,expire_logs_days值则失效并对其发出告警信息。

    若要关闭自动清除binlog文件的功能则需要显示指定binlog_expire_logs_seconds=0 并且不设置expire_logs_days的值。
    为了兼容早期版本若显示指定了expire_logs_days =0而没有指定binlog_expire_logs_seconds的值,此时自动清理binlog日志则是 禁用 的,并且此时binlog_expire_logs_seconds的默认值不适用。

    手动删除日志

    手动清理当然指的不是 rm -rf ** ,这样可能会导致 binlog.index 错乱。

    mysql -uroot -p # 登陆mysql
    show binary logs; # 查看日志文件
    show master status; # 查看正在使用的日志文件:binlog.000015
    purge binary logs to 'binlog.000015'; # 删除binlog.000015文件以外的日志文件
    
    • 1
    • 2
    • 3
    • 4

    设置过期时间

    设置过期48小时

    mysql> set global binlog_expire_logs_seconds=60*60*48;
    mysql> flush logs; # 刷一下log使上面的设置生效,否则不生效。注意:此配置重启mysql后失效。
    
    • 1
    • 2
  • 相关阅读:
    Linux中ROS话题通信中发布者基本操作(C++实现)
    Minio入门系列【5】JAVA集成Minio之存储桶操作API使用详解
    MYSQL第一章节DDL数据定义语言的操作(DDL-数据库操作,DDL-操作表-查询,DDL-操作表-修改,数据库的基本类型)
    面试官:volatile如何保证可见性的,具体如何实现?
    深度学习 神经网络基础
    mac vscode xdebug 调试moodle
    Photoshop与Web技术完美融合,Web版Photoshop已正式登场
    Junit 超时测试
    kafka broker
    Streamlit 构建大语言模型 (LLM) web 界面
  • 原文地址:https://blog.csdn.net/qq_44665283/article/details/125536282