だから...昨日、私が実行しているサービスの1つに対して開始されたキャンペーンに関する「事後メール」を受け取りました。これで、DBサーバーは、レプリケート用のバイナリロギングで約300mb/minの調整にハードに打たれています。ご想像のとおり、これはかなり途方もない速度でスペースをかみ砕いています。
バイナリログの通常の7日間の有効期限は、それを削減していません。私はログを最後の4時間だけ切り捨てることに頼りました(レプリケーションがmk-heartbeat
で最新であることを確認しています):
PURGE MASTER LOGS BEFORE DATE_SUB( NOW(), INTERVAL 4 HOUR);
嵐を乗り切るために、cronから数時間ごとに実行していますが、expire_logs_days
の最小値に疑問を投げかけました。 1未満の値に遭遇したことはありませんが、それが不可能ではありません。 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_expire_logs_days 型を数値として指定しますが、整数を期待しているかどうかは示しません。
実験は夕方のオーダーでした...
mysql> set @@ global.expire_logs_days = 0.75; ERROR 1232(42000):引数タイプが変数 'expire_logs_days' mysql> set @@ global.expire_logs_days =に正しくありません。 75; エラー1232(42000):変数 'expire_logs_days'への引数タイプが正しくありません mysql> set @@ global.expire_logs_days = 3.4; エラー1232(42000):引数が正しくありませんtype to variable'expire_logs_days ' mysql> set @@ global.expire_logs_days = 3/4; ERROR 1232(42000):引数type to variable'expire_logs_days' mysql> set @@ global.expire_logs_days = F; ERROR 1232(42000):変数 'expire_logs_days'への引数のタイプが正しくありません mysql> set @@ global.expire_logs_days = 0xF; エラー1232(42000):変数 'expire_logs_days' mysql> set @@ global.expire_logs_days = 1; Query OK、0行が影響を受けました(0.00秒) への引数タイプが正しくありません
実際、それをエミュレートする方法があります。
バイナリログを1時間にパージする手順は次のとおりです。
ステップ01)タイムスタンプが1時間より古いバイナリログをすべて削除するSQLスクリプトを作成します。
echo "FLUSH LOGS;" > /usr/bin/purge.sql
echo "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 HOUR;" >> /usr/bin/purge.sql
ステップ02)/usr/bin/purge.sh
でmysql
を呼び出すシェルスクリプト(purge.sql
)を作成します
mysql -uroot -p... < /usr/bin/purge.sql
ステップ03)/usr/bin/purge.sh
を実行可能にする
chmod +x /usr/bin/purge.sh
ステップ04)usr/bin/purge.sh
をcrontabに追加して、1時間ごとに開始します
0 * * * * /usr/bin/purge.sh
試してみる !!!
そのページは範囲が0-99であると言っています。そうそう、それは整数です。
0 =有効期限なし。
0.5で何ができるのか不思議に思っています。5の部分は無視して、有効期限を切らないと思います。
Mysql(コミュニティ)バージョン8.0.17-1.sles12-OpenSUSE tumbleweed 2019.10.02
mysql> SET GLOBAL expire_logs_days = 4;
ERROR 3683 (HY000): The option expire_logs_days and binlog_expire_logs_seconds
cannot be used together. Please use binlog_expire_logs_seconds to set the expire
time (expire_logs_days is deprecated)
..