MariaDB Docker lagre db/binlog.* файлы. Переполняет диск до точки отказа

MariaDB Docker lagre 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

Двоичные журналы используются для восстановления данных, репликации и мониторинга базы данных. И вы можете очистить старые. и цитируя этот ответ отБД

Вам нужно позволить mysqld сделать это за вас. Вот как mysqld справляется с этим:

Файл mysql-bin.[index] хранит список всех бинарных журналов, которые mysqld сгенерировал и автоматически ротировал. Механизмы очистки бинарных журналов в сочетании с mysql-bin.[index] следующие:

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

решение2

TheИспользование и ведение двоичного журналаСтраница базы знаний MariaDB содержит информацию о том, как очистить двоичные журналы.

Чтобы удалить все двоичные файлы журнала на сервере, запустите командуСБРОС МАСТЕРАкоманда. Чтобы удалить все двоичные журналы до определенной даты и времени или до определенного числа, используйтеОЧИСТИТЬ ДВОИЧНЫЕ ЖУРНАЛЫ.

На странице также объясняется, как автоматически сохранять бинарные журналы.

Файлы журналов также можно удалять автоматически с помощьюexpire_logs_daysсистемная переменная. По умолчанию она установлена ​​на 0 (удаление невозможно), но может быть установлена ​​на время в днях, после которого двоичный файл журнала будет автоматически удален. Файлы журнала будут проверяться только на то, что они старше expire_logs_days при ротации журнала, поэтому если ваш двоичный журнал заполняется медленно и не достигаетmax_binlog_sizeежедневно вы можете видеть, что старые файлы журналов все еще сохраняются. Вы также можете принудительно ротировать журналы и удалять их по истечении срока действия, запустивОЧИСТИТЬ ДВОИЧНЫЕ ЖУРНАЛЫна регулярной основе. Всегда устанавливайте expire_logs_days выше любой возможной задержки реплики.

В вашем случае понижение max_binlog_sizeдолжно помочь ротациям бинарных журналов происходить чаще, что в свою очередь уменьшит объем хранимых данных. Если вы добавите --max_binlog_size=100Mв commandваш docker-compose.yml, сервер MariaDB очистит бинарные журналы, как только они превысят 100 МБ.

Как указано в документации, вы можете вручную запустить FLUSH BINARY LOGSкоманду, чтобы принудительно выполнить ротацию бинарного журнала, что, в свою очередь, запустит очистку старых файлов.

Связанный контент