如何限制MariaDB的日志文件数量?
如何限制MariaDB的日志文件数量?
嗨,我碰到过好多用NextCloud搭配MariaDB的朋友遇到这个问题——二进制日志(就是那些mariadb-bin.0000**文件)疯狂占VPS空间,确实头疼!不过这事儿很好解决,咱们可以通过配置MariaDB的参数,让它自动清理旧日志,完全不用手动删,还不会搞坏mariadb-bin.index,具体方法如下:
方法一:修改配置文件永久生效(推荐)
这是最稳妥的方式,修改后重启MariaDB就会一直生效:
- 先找到你的MariaDB配置文件,不同系统位置略有不同:
- Debian/Ubuntu 一般是
/etc/mysql/mariadb.conf.d/50-server.cnf - CentOS/RHEL 通常是
/etc/my.cnf.d/server.cnf - 也可以直接用命令搜索:
find /etc -name "*.cnf" | grep -E "(mysql|mariadb)"
- Debian/Ubuntu 一般是
- 用编辑器打开配置文件,比如
nano /etc/mysql/mariadb.conf.d/50-server.cnf,找到[mysqld]区块,添加或修改以下两个参数(选一个或者一起用都可以):
数值可以根据你的VPS空间和业务量调整——如果空间紧张,就把天数设短点、文件数设少点;如果需要保留更久的日志用于数据恢复,就适当调大。# 只保留最近7天的二进制日志 expire_logs_days = 7 # 最多保留10个二进制日志文件 max_binlog_files = 10 - 保存文件后,重启MariaDB服务:
# 适用于systemd系统(比如Ubuntu 16.04+、CentOS 7+) systemctl restart mariadb # 老版本系统用service命令 service mariadb restart
方法二:临时生效(无需重启,重启后失效)
如果不想马上重启服务,可以先在MariaDB命令行里临时设置,等有空再改配置文件:
- 登录MariaDB控制台:
输入你的root密码后进入命令行界面。mysql -u root -p - 执行以下SQL命令设置全局参数:
SET GLOBAL expire_logs_days = 7; SET GLOBAL max_binlog_files = 10; - 要是想立刻清理已经超过保留期限的旧日志,可以执行:
执行后# 清理7天前的所有二进制日志 PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY); # 或者按文件名精准清理,比如删掉mariadb-bin.000010之前的所有日志 PURGE BINARY LOGS TO 'mariadb-bin.000010';mariadb-bin.index会自动更新,完全不用担心损坏索引文件。
小提醒
别把保留天数/文件数设得太极端哦!如果你的NextCloud有数据恢复需求,比如某天误删了重要文件,二进制日志是可以帮你恢复到某个时间点的,所以最好结合你的备份策略来调整——比如你每天都做全量备份,那保留3-7天的日志就足够啦。
备注:内容来源于stack exchange,提问作者RolandiXor




