binlog_expire_logs_seconds
WARNING
Rule IDs: bl_004
Overview
- Purpose
- Documented in the MySQL 8.4 manual as a server system variable (scope: Global). Purpose and semantics are described at the linked manual page.
- Dynamic (MySQL 8.4 reference)
- MySQL 8.4 marks this variable as dynamic (
Dynamic= Yes). Runtime changes useSET GLOBAL(global scope) orSET SESSION(session scope) — confirm syntax and persistence (SET PERSIST) in the manual. - Default value
- 2592000 (30 days) (MySQL 8.4)
- Version and product notes
- MariaDB and Percona Server may use different names, defaults, or dynamic behavior; verify their documentation.
- Documentation
- https://dev.mysql.com/doc/refman/8.4/en/replication-options-binary-log.html#sysvar_binlog_expire_logs_seconds
- Other vendors
What is checked
Rules that reference this variable, with their severity and what each rule detects:
- WARNING
bl_004: Set binlog_expire_logs_seconds (e.g., 604800 for 7 days, 2592000 for 30 days). Keep enough for replica catch-up and PITR needs.
Tuning guidance
- Recommended actions:
- Set binlog_expire_logs_seconds (e.g., 604800 for 7 days, 2592000 for 30 days). Keep enough for replica catch-up and PITR needs.
- Trade-offs: Binary logging is essential for replication and point-in-time recovery. sync_binlog=1 guarantees durability but adds fsync overhead. ROW format is safest for replication consistency but produces larger binlogs.
Example
SET GLOBAL binlog_expire_logs_seconds = 604800; -- 7 days
Always validate on a non-production instance first. Use SET PERSIST (MySQL 8.0+) for changes that should survive restarts.