kariaの日記 @ Alice::Diary

ノリツッコミの鳩子がはてなブログ書いちゃうよ

kariaの日記です。本家サイトはside=2です。Twitter ID:@karia
過去記事へのリンクとかは最下部参照。

Aurora MySQLでバイナリログを有効にするときは再起動がいる(けど逆は不要)

タイトルが全てなんですが、Aurora MySQLでバイナリログが無効になっていてやっぱり有効化したい(バイナリログ出したい)というときは再起動がいる。逆は不要。

バイナリログが無効なとき

show binary logsしようとすると「お前バイナリログ使ってないぞ」って怒られる。

mysql> show binary logs;                                                                                                                                                                                          
ERROR 1381 (HY000): You are not using binary logging                                                                                                                                                              

log_binパラメーターもOFFになっている(このパラメーターは変更することができない)。

mysql> show global variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.04 sec)

binlog_formatはなぜかROWになっている(DB クラスターのパラメータグループでOFFに設定しているので謎な挙動)。

mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.02 sec)

有効化する

DB クラスターのパラメータグループでbinlog_formatをOFF→ROWなどに変更し、再起動する

このbinlog_formatパラメーターを変更すれば良いということは様々なブログなどに書かれているが、公式ドキュメントの以下のページが一番正確だった。

Aurora と MySQL との間、または Aurora と別の Aurora DB クラスターとの間のレプリケーション - Amazon Aurora

binlog_format パラメータを OFF から別の値に変更した場合、変更を有効にするために Aurora DB クラスターを再起動する必要があります。

と記載されており、このケースでは変更するだけではダメで再起動が必要。binlog_formatはdynamicなパラメーターなので再起動不要だよね、と早とちりしてるとハマります。

なおAWS推奨はROWではなくMIXED。

バイナリログが有効なとき

再起動するとshow binary logsしたときの挙動が変わり、ログファイルの一覧が出る。

mysql> show binary logs;
+----------------------------+-----------+
| Log_name                   | File_size |
+----------------------------+-----------+
| mysql-bin-changelog.000851 |      1003 |
| mysql-bin-changelog.000852 |       150 |
+----------------------------+-----------+

log_binはONになっている(変更できないパラメーターなので、Auroraが勝手に変更している)。

mysql> show global variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+

binlog_formatはDB クラスターのパラメータグループで設定した通りROWになっている(OFFにしてるときも一緒だったけど)。

mysql> show global variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+

ちなみに読み取り専用ノードでは再起動してもバイナリログは出力されないようです(ドキュメント捜索中)。マスターノードでやりましょう。

以上!