Archivos MariaDB Docker grandes db/binlog.*. Desborda el disco hasta el punto de falla

Archivos MariaDB Docker grandes db/binlog.*. Desborda el disco hasta el punto de falla

¿Como arreglar?

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 compone yml DB PARTE

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 adición especial ./ en ./db para copia de seguridad

Respuesta1

Los registros binarios se utilizan para la recuperación, replicación y monitoreo de bases de datos. Y puedes borrar los viejos. y citando esta respuesta deDB

Debes dejar que mysqld haga eso por ti. Así es como mysqld lo administra:

El archivo mysql-bin.[index] mantiene una lista de todos los registros binarios que mysqld ha generado y rotado automáticamente. Los mecanismos para limpiar los binlogs junto con mysql-bin.[index] son:

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

Respuesta2

ElUso y mantenimiento del registro binarioLa página de la base de conocimientos de MariaDB tiene información sobre cómo purgar registros binarios.

Para eliminar todos los archivos de registro binarios en el servidor, ejecute elREINICIAR MAESTROdominio. Para eliminar todos los registros binarios antes de una determinada fecha y hora, o hasta un determinado número, utilicePURGAR REGISTROS BINARIOS.

La página también explica cómo lidiar con la retención de binlog automáticamente.

Los archivos de registro también se pueden eliminar automáticamente con elexpirar_logs_daysvariable del sistema. Esto está establecido en 0 de forma predeterminada (sin eliminación), pero se puede establecer en un tiempo, en días, después del cual se eliminará automáticamente un archivo de registro binario. Solo se comprobará que los archivos de registro tengan una antigüedad superior a expire_logs_days al rotar el registro, por lo que si su registro binario se llena lentamente y no alcanzatamaño_max_binlogDiariamente, es posible que vea que los archivos de registro más antiguos aún se conservan. También puede forzar la rotación de registros y, por lo tanto, las eliminaciones por vencimiento, ejecutandoVACIAR REGISTROS BINARIOSsobre una base regular. Configure siempre expire_logs_days por encima de cualquier posible retraso de réplica.

En su caso, la reducción max_binlog_sizedebería ayudar a que las rotaciones de binlog se realicen con mayor frecuencia, lo que a su vez reducirá la cantidad de datos que se conservan. Si agrega --max_binlog_size=100Ma commandsu archivo docker-compose.yml, el servidor MariaDB eliminará los registros binarios una vez que hayan superado los 100 MiB.

Como se menciona en la documentación, puede ejecutar manualmente el FLUSH BINARY LOGScomando para forzar una rotación de binlog, lo que a su vez activará la eliminación de archivos antiguos.

información relacionada