清理mysql中的binlog

一、背景

有台机器的磁盘容量2T,数据只有不到200G,但是磁盘缺出现不足的告警。

二、现象

告警平台发出告警,数据磁盘使用量达到阈值。

三、问题排查过程

1、du查看数据盘使用情况,发现mysql磁盘基本占用了所有磁盘
2、继续使用du查看,数据目录占用不到200G,但是binlog目录却占用了1.7T
3、查看binlog的保留策略
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 7     |
+------------------+-------+
1 row in set (0.00 sec)

发现保留7天,仍然占用1.7T的日志

4、查看当前主从状态是否同步成功了

主从同步依据:

1)、2个running
-- 负责把主库bin日志(Master_Log)内容投递到从库的中继日志上(Relay_Log)
Slave_IO_Running: Yes
 
-- 负责把中继日志上的语句在从库上执行一遍
Slave_SQL_Running: Yes
 
-- Yes:表示正常, No:表示异常
2)、判断完全同步
* Master_Log_File 和 Relay_Master_Log_File 所指向的文件必须一致
* Relay_Log_Pos 和 Exec_Master_Log_Pos 位置也要一致才行
* Slave_SQL_Running_State: 显示为wait 中继日志的sql语句已经全部执行完毕
3)、主库查看当前binlog文件及position
mysql> show master status\G;
*************************** 1. row ***************************
             File: mysql-bin.054419
         Position: 2122130
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: ******
1 row in set (0.01 sec)
4)、从库查看同步状态
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: a
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.054419
          Read_Master_Log_Pos: 2122130
               Relay_Log_File: mysqld-relay-bin.074569
                Relay_Log_Pos: 2122263
        Relay_Master_Log_File: mysql-bin.054419
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              ……非关键内容
          Exec_Master_Log_Pos: 2122130
              Relay_Log_Space: 2115345
              ……非关键内容
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           ……非关键内容
1 row in set (0.00 sec)

经判断,主从同步正常

5、删除旧的binlog,只保留3天

查看3天前的日志是哪个,将此文件以前的日志,都删掉

mysql>purge binary logs to 'mysql-bin.039560';

或者可以直接指定时间进行删除

mysql>purge binary logs before '2023-01-01 23:59:59';

四、原因分析

binlog日志过大,不过由于业务量多,属于正常现象。

五、解决

1、删掉binlog日志
2、在保留7天binlog的基础上,扩容1T磁盘,规避磁盘满故障风险

六、反思与规避

好记性不如赖笔头。
与君共勉。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值