• 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
  • 相关阅读:
    Coremail邮件安全网关:双一流高校背后的邮件安全专家
    如何在一个传统的html中,引入vueJs并使用vue复制组件?
    宝贝快出生的这三个表现,孕妈尽快去医院待产
    普莱得电器IPO过会:拟募资5.6亿 为杨伟明及韩挺两家族控制
    【Java面试】这道互联网高频面试题难住了80%的程序员?索引什么时候失效?
    【计算机网络】快速入门
    【CPU设计实战】简单流水线CPU设计
    Excel中使用ROW函数自动更新行号或编号
    腾讯云短信服务申请, api测试,发送含字母短信
    基于微信小程序的校园外卖点餐系统
  • 原文地址:https://blog.csdn.net/qq_44665283/article/details/125536282