helen's blog

ずっとおもしろいことしてたいな。

Amazon Auroraでレプリケーションのために出力していたbinlogを止めるには

AuroraをオンプレミスのMySQLレプリケーションしていたけど
それが不要になってお片付けをしていたら
想定外のところで詰まってしまいサポートに問い合わせました

Auroraとのレプリケーション方法

binlogを出力する

公式に手順があります

docs.aws.amazon.com

クラスタのパラメータグループで binlog_format を ROW, STATEMENT, MIXEDのどれかにします
設定の反映にはAuroraクラスタの再起動が必要です

レプリケーションの撤去

binlogを停止する

先の手順にあるように、クラスタのパラメータグループで binlog_format を OFF にします
同様に反映にはAuroraクラスタの再起動が必要です

レプリケーション自体は STOP SLAVE; で止まるのですが、
binlogを出力しているとAuroraの性能に影響がでてしまうため
必要なくなったのであれば止めておくべきです

うまくいかなかった

わたしのところでは、今回、binlog_formatをMIXEDにしていました
クラスタのパラメータグループを編集し、
再起動など諸々を実施してもOFFになりませんでした

# なぜか STATEMENT になる
# もちろん再起動前はMIXEDでした
mysql> SHOW VARIABLES LIKE 'binlog_format';
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)

# 停止しているかのようなメッセージは出る
mysql> show binary logs;
ERROR 1381 (HY000): You are not using binary logging

サポートさんに問い合わせるまでに実施したこと

どれも状況は変わりませんでした

問い合わせた結果

  • binlog_format にOFFを設定すると log-bin は無効になる
  • ただし、 binlog_format の設定値によらず無効になっている
  • SHOW VARIABLES LIKE 'log_bin' が OFF になっていれば良い

とてもややこしいけれど、
binlog_formatを変更するとlog_binも変更され、
2つのパラメータで管理されているそうです

つまり

binlog_format は OFF になっていないけどbinlogは停止できていた!

mysql> SHOW VARIABLES LIKE 'log_bin'\G
*************************** 1. row ***************************
Variable_name: log_bin
        Value: OFF
1 row in set (0.00 sec)

サポートさんに確認してよかった〜

log_bin がOFFになっているのを見ても
binlog_format が OFF にならないんですけど!? って問い合わせしちゃいそう😅

おまけ

今回、レプリケーションのためのbinlog停止とともに、
Auroraインスタンスのスケールダウンとファミリー変更を行いました

事前に binlog_format を OFF にしておけば
改めて再起動は不要になる(スケールダウン作業中に適応される)のは学びでした

再起動の瞬断とはいえ、サービスのダウンする瞬間を減らせてよかった😊