翼度科技»论坛 编程开发 mysql 查看内容

mysql binlog占用大量磁盘空间的解决方法

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
查看当前日志保存天数:
  1. mysql> show variables like '%expire_logs_days%';
  2. +------------------+-------+
  3. | Variable_name    | Value |
  4. +------------------+-------+
  5. | expire_logs_days | 0     |
  6. +------------------+-------+
  7. 1 row in set (0.08 sec)
复制代码
默认是0,也就是logs不过期。
也可以使用 show variables like '%expire%' 查看是否有开启日志到期自动删除
  1. mysql> show variables like '%expire%';
  2. +--------------------------------+--------+
  3. | Variable_name                  | Value  |
  4. +--------------------------------+--------+
  5. | binlog_expire_logs_auto_purge  | ON     |
  6. | binlog_expire_logs_seconds     | 432000 |
  7. | disconnect_on_expired_password | ON     |
  8. | expire_logs_days               | 0      |
  9. +--------------------------------+--------+
  10. 4 rows in set (0.00 sec)
复制代码
设置BINLOG到期时间


临时生效,无需重起mysql

如果数据库此时不便重启,可以设置全局的参数,使他临时生效:
  1. mysql> set global expire_logs_days=5;
复制代码
设置了只保留5天BINLOG, 下次重启mysql这个参数默认会失败。
如果上面指令报错,则改为set global binlog_expire_logs_seconds=432000
  1. mysql> set global expire_logs_days=7;ERROR 3683 (HY000): The option expire_logs_days and binlog_expire_logs_seconds cannot be used together. Please use binlog_expire_logs_seconds to set the expire time (expire_logs_days is deprecated)mysql> set global binlog_expire_logs_seconds=432000;Query OK, 0 rows affected (0.00 sec) mysql> mysql> show variables like '%expire%';
  2. +--------------------------------+--------+
  3. | Variable_name                  | Value  |
  4. +--------------------------------+--------+
  5. | binlog_expire_logs_auto_purge  | ON     |
  6. | binlog_expire_logs_seconds     | 432000 |
  7. | disconnect_on_expired_password | ON     |
  8. | expire_logs_days               | 0      |
  9. +--------------------------------+--------+
  10. 4 rows in set (0.00 sec)
复制代码
写入配置文件,mysql重启依旧生效

如果要永久生效,需要在my.cnf中设置
vi /etc/my.cnf
追加内容:
binlog_expire_logs_seconds=432000


手动删除BINLOG

也可以先手动删除BINLOG (purge binary logs)
删除指定的日志
  1. mysql> PURGE {MASTER | BINARY} LOGS TO 'log_name'
复制代码
例:删除binlog.1000
  1. mysql> PURGE MASTER LOGS TO 'binlog.1000';
复制代码
或删除指定日期之前的日志索引中的所有二进制日志。
  1. mysql> PURGE {MASTER | BINARY} LOGS BEFORE 'date'
复制代码
例:删除2023-06-03 12:00:00前的文件
  1. mysql> PURGE MASTER LOGS BEFORE '2023-06-03 12:00:00';
复制代码
例:删除3天前的日志
  1. mysql> PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 3 DAY);
复制代码
到此这篇关于mysql binlog占用大量磁盘空间的解决方法的文章就介绍到这了,更多相关mysql binlog占用磁盘空间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/database/322306blp.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具