MariaDBのバイナリログが通常より速く成長するときに巨大なサイズになるのを防ぐ方法を探しています。
しかし、すべてのバイナリログファイルの「最大全体サイズ」を設定する方法はありますか?または、おそらくもっと単純な、バイナリログファイルの最大数。これにより、expire_log_days保持が過負荷になります...
max_binlog_size に関して、あなたが求めていることは不可能です。どうして ?
オン May 05, 2017
、私は質問に回答しました MySQL-バイナリログファイルのサイズが上限を超えています 。 max_binlog_size のMySQLドキュメントから次のことを述べました:
トランザクションは1つのチャンクでバイナリログに書き込まれるため、複数のバイナリログに分割されることはありません。 そのため、大きなトランザクションがある場合、バイナリログファイルが max_binlog_sizeより大きい場合があります。
バイナリログが max_binlog_size よりも大きいという事実は、1つのトランザクションで書き込む変更が多すぎることを示しています。
expire_logs_days に関しては、粒度は日数です。それでできることは何もありません。
Binlogの数を減らしたい場合は、次の2つのいずれかを行う必要があります。
提案#1:binlogインデックスファイルをスキャンし、最後の10個のbinlogを見つけ、それらの10個の最初のbinlogを取得して、次のように実行します。
PURGE BINARY LOGS TO 'whatever-binlog.002316';
提案#2:過去18時間のバイナリログを保持するcronジョブを記述します。
PURGE BINARY LOGS BEFORE (NOW() - INTERVAL 18 HOUR);
GIT IT A TRY !!!
Percona Serverがこのようなシステム変数「max_binlog_files」を実装していることに気づきました。
https://www.percona.com/doc/percona-server/LATEST/flexibility/max_binlog_files.html
MariaDBには、MariaDBサーバーにバックポートするための未解決の問題があり、現時点では「オープン」ステータスになっています。
短い答え:いいえ。
長い答え:
なぜこれが欲しいのですか?ディスク容量が不足していますか?その場合、他の理由でクラッシュする恐れがあります。つまり、全体像について話し合う必要があります。
大きなテーブルのすべての行を頻繁にUPDATEing
しますか(行ベースのレプリケーションを使用)?それはすぐにbinlogsを膨らませることができます。その形式のUPDATE
の代替案について説明しましょう。 (このアプローチを続行するには、テーブルとクエリの詳細が必要です。)大きなDELETE
は、binlog(s)をすばやく膨らませることもできます。
あなたが今持っているならmax_binlog_size
1Gに設定し、100Mに変更すると、ディスク使用量が900M減少する可能性があります状況によっては。 (変更を加えることのマイナス面はないと思います。)