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 の yml DB パーツの作成

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

バイナリログの使用と保守MariaDB ナレッジベースのページには、バイナリ ログを消去する方法に関する情報が記載されています。

サーバー上のすべてのバイナリログファイルを削除するには、マスターをリセットコマンド。特定の日時以前または特定の数までのバイナリログをすべて削除するには、バイナリログの消去

このページでは、バイナリログの保持を自動的に処理する方法についても説明します。

ログファイルは、有効期限システム変数。デフォルトでは0(削除なし)に設定されていますが、バイナリログファイルが自動的に削除されるまでの日数を設定することができます。ログファイルは、ログローテーション時にexpire_logs_daysより古いかどうかのみチェックされるため、バイナリログが徐々にいっぱいになり、最大バイナリログサイズ毎日ログファイルを更新すると、古いログファイルが残っていることがあります。ログのローテーションを強制的に実行して、期限切れによる削除を行うこともできます。バイナリログをフラッシュする定期的に。expire_logs_days は、レプリカの遅延よりも常に長く設定してください。

あなたの場合、 を下げると、max_binlog_sizeバイナリログのローテーションがより頻繁に行われ、保存されるデータの量が削減されるはずです。の を--max_binlog_size=100M追加すると、MariaDB サーバーは、100MiB を超えるとバイナリログをフラッシュします。commanddocker-compose.yml

ドキュメントに記載されているように、FLUSH BINARY LOGSコマンドを手動で実行して、binlog ローテーションを強制的に実行し、古いファイルの削除をトリガーすることができます。

関連情報