RDSのslow_logをtruncateする

RDSでslow_logを出力するようにしていたけど、肥大化や調査等の理由でslow_logをクリアしなければならないことがあります。

権限上truncateできないのですが、RDSにはストアドが用意されているので、ストアドでslow_logをクリアすることができる。


スポンサーリンク





ストアド

RDSに用意されているストアドを使ってクリアをする。

CALL mysql.rds_rotate_slow_log

中身はバックアップを取って新しくテーブルを作っているだけ。

結果

良さそう

mysql> select count(*) from mysql.slow_log;
+----------+
| count(*) |
+----------+
|      745 |
+----------+
1 row in set (0.05 sec)

mysql> CALL mysql.rds_rotate_slow_log;
Query OK, 0 rows affected (0.12 sec)

mysql> select count(*) from mysql.slow_log;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql> select count(*) from mysql.slow_log_backup;
+----------+
| count(*) |
+----------+
|      745 |
+----------+
1 row in set (0.05 sec)

もう一度ストアドを実行すると今のslow_log_backupが削除されて作り直されるので、バックアップ出来るのは1つ前のもののみになる。

補足

ちなみにgeneral_logに対しても同じストアドが用意されているので、general_logをクリアしたいときには以下を実行する。

CALL mysql.rds_rotate_general_log;

AWSを使うことが多くなってきたので、覚えておきたい。