web-dev-qa-db-ja.com

MySQLでexpire_logs_daysを1日未満にすることはできますか?

だから...昨日、私が実行しているサービスの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 型を数値として指定しますが、整数を期待しているかどうかは示しません。

6
blacktip

実験は夕方のオーダーでした...

 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秒)
への引数タイプが正しくありません
6
blacktip

実際、それをエミュレートする方法があります。

バイナリログを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.shmysqlを呼び出すシェルスクリプト(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

試してみる !!!

4
RolandoMySQLDBA

そのページは範囲が0-99であると言っています。そうそう、それは整数です。

0 =有効期限なし。

0.5で何ができるのか不思議に思っています。5の部分は無視して、有効期限を切らないと思います。

2
Grizly

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)

..

0
André Verwijs