kariaの日記 @ Alice::Diary

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

sedで「複数行でこのキーワードの並びがあったら削除する」を実現する

以下のような input.txt というテキストファイルがあったとして、「hogeを含む行」→「fugaを含む行」の2行 だけ を取り除きたい、みたいなケースをsedで対応する。

aaa
hoge: xxxx
fuga: xxxx
bbb
hoge: xxxx
ccc

以下の様な remover.sed を用意する

/hoge/ {
  N
  /fuga/ d
}

hogeを含む行の次の行にfugaが含まれていたら、dコマンドを使って2行とも削除する。該当しなかったら何もしない。

実行

$ sed -f remover.sed input.txt > output.txt

出力された output.txt を開くと、以下の様に「hogeを含む行」→「fugaを含む行」の連続が消えているはず。

aaa
bbb
hoge: xxxx
ccc

理論上は何行でもいけると思うしワンライナーにも出来ると思う(sedへの理解を深めるべく見やすさ重視でファイルにした)。PコマンドやDコマンドと組み合わせるとさらに使い道があるかもしれない。

参考

sed.open-code.club

www.slideshare.net

Mackerelの外形監視でメッセージにEOFと出たときはクライアントからの接続に失敗したとき

今回もまたタイトルオンリーの記事。

MackerelのHTTP外形監視で、メッセージに「EOF」とだけ表示されるアラートが発生することがあります。こういうの。

f:id:karia:20190514111058p:plain
EOF

これはMackerel側からの接続がうまくいっていない(connection failedな)ときに発生します。クライアント起因ではなく、例えば「Mackerel向けのセキュリティグループだけ設定が間違ってました」とかそういうサーバー側の起因によるものなので、ポートとかソースIPの許可を見直してみましょう。

この問題、過去2回もハマってしまったのでメモっておく。今回も「EOFってなんじゃい、レスポンスの中身おかしくなってるのか?」となって特定に時間がかかった。なんでEOFというメッセージになるのかは、問い合わせした気がするけど忘れてしまった(もうちょっとわかりやすいメッセージだと有り難いみたいな要望はしたと思う)。

Mackerel サーバ監視[実践]入門

Mackerel サーバ監視[実践]入門

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   |
+---------------+-------+

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

以上!