MySQL Binlog ファイルのサイズが増大する問題を解決するにはどうすればよいですか?

MySQL Binlog ファイルのサイズが増大する問題を解決するにはどうすればよいですか?

MySQL の Binlog ファイルの数は日々増加しており、そのサイズはギガバイト単位で増加しています。 増加している Binlog ファイルのサイズを止めるにはどうしたらよいでしょうか? Binlog ファイルによってディスク領域がいっぱいになっています。

答え1

MySQL8 では、バイナリ ログがデフォルトで有効になっており、バイナリ ログのデフォルトのパージ (有効期限/削除) は 30 日に設定されています。

SSHとmysqlにログインしたら、以下のコマンドを使用できます。

バイナリログを表示するには

mysql> SHOW BINARY LOGS;

ある時点までバイナリログを手動で消去するには

mysql> PURGE BINARY LOGS TO 'binlog.000142';

自動デフォルトパージの有効期限を 30 日 (デフォルト) から 3 日に変更します

mysql> SET GLOBAL binlog_expire_logs_seconds = 259200;
Query OK, 0 rows affected (0.00 sec)

mysql> SET PERSIST binlog_expire_logs_seconds = 259200;
Query OK, 0 rows affected (0.01 sec)

上記の値は秒単位です。つまり、3日を秒単位で表すと、(60秒×60分×24時間×3日)=259200となります。

答え2

これらのバイナリ ログを保持する必要がない場合は、次のように MySQL 内でそれらを「トリミング」できます。

mysql> PURGE BINARY LOGS BEFORE '2021-01-01 00:00:00';

もちろん、日付はいつでも変更できます。特定のバイナリ ログ ファイルにトリミングしたい場合は、次のようにします。

mysql> PURGE BINARY LOGS TO 'mysql-bin.12345';

トリミングする実際のファイルを必ず指定してください。

重要:ファイルシステムからファイルを削除しないでください。MySQLは将来、ひどい形で文句を言うでしょう。不要なダウンタイムを避けるために、 PURGE BINARY LOGS MySQL 内からコマンドを実行します。

答え3

バイナリログは、レプリケーションと特定の形式のバックアップに必要です。どちらも実行していないようです。

設定を変更するには、次のような新しいファイルを追加します (「rj」は私のイニシャルです)。

/etc/mysql/mysql.conf.d/rj.cnf

以下のようにオーバーライドを追加します。変更を加えた後、

sudo systemctl restart mysql

log_binbinlog の作成を制御します。

削除されたままにするには、binlog_expire_logs_seconds = 86400(または他の数字) を追加します。

別の設定では、各 binlog ファイルの最大サイズを制御します。これは、最後のファイルが「期限切れ」になるまで残ることを除いて、使用されるディスク容量の合計には影響しません。再起動 (または mysql の再起動) のたびに新しい binlog が開始されるため、小さなファイルが多数表示されることがあります。

したがって、私の rj.cnf ファイルには次のような内容が含まれる可能性があります。

# Added by Rick James
[mysqld]
log_bin =                           # turn off
binlog_expire_logs_seconds = 86400  # 1 day
max_binlog_size = 104857600         # 100M

答え4

利用可能なスクリプトを使用できます https://github.com/Thibs/monitor_mysql_binary_logging/blob/main/monitor_mysql_binary_logging.sh

バイナリログファイルのサイズ/数を管理する

関連情報