MySQLのログパーティションが1日未満でいっぱいになる状況にあります。 binlogはレプリケーションに必要なので、無効にすることはできません。
私はログ保持を設定できることを知っていますが、それは日を受け入れます、そして検索はこれだけを示しました https://serverfault.com/questions/179165/can-expire-logs-days-be-less-than-1 -day-in-mysql 質問。スクリプトを使用して自分で行うことを提案します。
その質問はほぼ8年前のものなので、今は可能かどうか疑問に思っていました。
問題がある場合は、Percona MySQL 5.7を使用しています
実は今できます。 MySQL 8.0.1以降、_expire_log_days
_は引き続き機能しますが、有効期限を設定する標準的な方法は _binlog_expire_logs_seconds
_ を変更することです。これは、ご想像のとおり、2番目の解決策です。 8.0.11以降のデフォルト値は2592000(= 30日)ですが、設定ファイルで他の期間に通常どおり秒単位で設定できます。
MySQL 8.0をまだ使用できない場合、これを修正する方法は _PURGE BINARY LOGS
_構文 をBEFORE
(PURGE BINARY LOGS BEFORE now() - INTERVAL 1 HOUR;
'とともに使用し、 _max-binlog_size
_ を適切な値に変更します(現在書き込まれているbinlogは削除できませんが、 _FLUSH BINARY LOGS
_ を使用してローテーションを強制することができます)。 cron /プログラムされたタスクで定期的または外部的にそれを行うイベントを設定できます。
または、PerconaのようなMySQLのフォークを使用して、最大のbinlogサイズをバイト単位で設定できます(さらに、_max_binlog_size
_と _max_binlog_files
_ -を組み合わせて)日制限に。
Perconaサーバーは max_binlog_files
をサポートします。これは max_binlog_size
と組み合わせて使用することで、ファイルの数(およびそれらの合計サイズ)をターゲット範囲内に保つことができます。
max_binlog_size
はハードリミットではないことに注意してください。トランザクションは異なるバイナリログに分割されないため、トランザクションが非常に大きい場合を除き、ほとんどのファイルはそれをわずかにオーバーシュートします。各ログは、サイズのしきい値を超えた後にローテーションされます。