MariaDB Docker 大量 db/binlog.* 文件。磁盘溢出导致故障

MariaDB Docker 大量 db/binlog.* 文件。磁盘溢出导致故障

怎么修?

ls -lh /root/docker/yml/nextcloud/db/binlog。*

-rw-rw---- 1 999 999 960M Aug 25 22:55 /root/docker/yml/nextcloud/db/binlog.000043
-rw-rw---- 1 999 999 5.5M Aug 25 23:52 /root/docker/yml/nextcloud/db/binlog.000044
-rw-rw---- 1 999 999 156M Aug 26 23:40 /root/docker/yml/nextcloud/db/binlog.000045
-rw-rw---- 1 999 999 260M Aug 28 15:10 /root/docker/yml/nextcloud/db/binlog.000046
-rw-rw---- 1 999 999 548M Sep  1 00:03 /root/docker/yml/nextcloud/db/binlog.000047
-rw-rw---- 1 999 999 593M Sep  4 11:28 /root/docker/yml/nextcloud/db/binlog.000048
-rw-rw---- 1 999 999  13M Sep  4 13:21 /root/docker/yml/nextcloud/db/binlog.000049
-rw-rw---- 1 999 999 529M Sep  9 22:20 /root/docker/yml/nextcloud/db/binlog.000050
-rw-rw---- 1 999 999  128 Sep  4 13:26 /root/docker/yml/nextcloud/db/binlog.index

Docker compose yml 数据库部分

services:
  db:
    image: mariadb:10.6
    container_name: nextcloudDB
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW --expire_logs_days=2
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=d`X'1B7Ss/=E;JxROOT
      - MYSQL_PASSWORD=d`X'3B7SD/dE;Jx
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    logging:
            driver: "json-file"
            options:
                max-size: "50m"
                max-file: "10"

- ./db:/var/lib/mysql 在 ./db 中特别添加 ./ 用于备份

答案1

二进制日志用于数据恢复、复制和数据库监控。您可以清除旧日志。并引用此答案D B

您需要让 mysqld 为您完成此操作。以下是 mysqld 管理它的方式:

文件 mysql-bin.[index] 保存了 mysqld 已生成并自动轮换的所有二进制日志的列表。与 mysql-bin.[index] 一起清除 binlog 的机制包括:

PURGE BINARY LOGS TO 'binlogname';
PURGE BINARY LOGS BEFORE 'datetimestamp';

答案2

使用和维护二进制日志MariaDB 知识库页面上有关于如何清除二进制日志的信息。

要删除服务器上的所有二进制日志文件,请运行重置主控命令。要删除特定日期时间之前或特定数量之前的所有二进制日志,请使用清除二进制日志

该页面还解释了如何自动处理 binlog 保留。

日志文件也可以通过以下方式自动删除:expire_logs_days系统变量。默认情况下,此变量设置为 0(不删除),但可以设置为一个时间(以天为单位),在此时间之后,二进制日志文件将自动删除。只有在日志轮换时才会检查日志文件是否早于 expire_logs_days,因此,如果您的二进制日志填充缓慢,并且未达到最大 binlog 大小每天,您可能会看到较旧的日志文件仍被保留。您还可以通过运行刷新二进制日志定期进行。始终将 expire_logs_days 设置为高于任何可能的副本滞后。

在您的情况下,降低max_binlog_size应该有助于更频繁地进行二进制日志轮换,从而减少保留的数据量。如果您在 中--max_binlog_size=100M添加,MariaDB 服务器将在二进制日志超过 100MiB 后刷新它们。commanddocker-compose.yml

正如文档中提到的,您可以手动运行FLUSH BINARY LOGS命令来强制进行 binlog 轮换,这反过来会触发旧文件的清除。

相关内容