地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【MySQL】lock_wait_timeoutとinnodb_lock_wait_timeoutの違い

qiita.com

手元で検証していてハマった。ロック待ちを短くしてmetadata lock待ちを短くしてひたすらALRTERをループさせるとどうなるんだ?というのをやりたくてinnodb_lock_wait_timeoutをずっと変えていたが全然変わらなくてmy.cnfか?globalで設定されていない???という状態になっていた。innodb_lock_wait_timeout は行ロック時にタイムアウトするための設定でした。はい。

dev.mysql.com

というかどんだけタイムアウトあるんだ...

gihyo.jp

【MySQL】gh-ostを調べる

github.com

gh-ostは、GitHubが開発したMySQLデータベース用のオープンソースツールです。gh-ostは「GitHub's Online Schema Migrations」の略で、MySQLのテーブルに対するスキーマ変更を実行時にサービスのダウンタイムを最小限に抑えつつ行うことができるというもの。実装はMySQL系のツールとしては珍しくGoとなっている。InnoDB用にはオンラインDDLありますが、それら方法との違いは バイナリログでテーブルの変更を補足しながらマイグレーションするという点です。

仕組み

gihyo.jp

上記の記事から抜粋。

1. 変更したいテーブル(基テーブル)の空のコピーテーブル(ゴーストテーブル)を作成
2. ゴーストテーブルに対して指定したALTERステートメント実行
3. 基テーブルの既存データをゴーストテーブルにコピー
4. マイグレーション実行中、基テーブルへの新規DMLはバイナリログから抽出し、ゴーストテーブルへ適用
※ 3と4は並列で稼働します
5. 3と4が終わると、基テーブルとゴーストテーブルを入替(カットオーバー)

pt-oscではトリガーを用いてテーブルデータのコピーをするがgh-ostではバイナリログを用いている点が違う。またバイナリログの取得先はレプリカになるためプライマリには負荷がかかりにくいとのこと。CREATE TRIGGERは対象のテーブルに対してメタデータロックを取りに行くという動作をするのでテーブルの読み書きが多い場合には失敗するケースがあったがgh-oscではその心配すらいらないのが便利。ただ5でRENAME TABLEを打つだろうからそこはどっちにしろ気にする必要はありそう。(MySQL 8.0からの子テーブルへの参照で親にもMDLを取る話の回避策にならんかなと思ったけどまあ無理ですよね...)とはいえカットオーバーフェーズは大分短いだろうからそれだけでも嬉しい。

gh-ostを使うにはバイナリログが必要

仕組み上そうなのでbinlogを取れないみたいな環境だと使えなくなってしまう。Auroraってそういえばbinlogないようなと思って調べたら設定することは可能とのことだった。Auroraからレプリケーションを組みたいケースとかで使えるっぽい。(リードレプリカの仕組みだけが頭にあったのでないだろうと思ったらそういう用途があったのかとなった)

dev.classmethod.jp

RDSで使えるの?

github.com

動くけどGitHubはRDS使ってないからコミュニティでやってね!とのこと。

参考

gihyo.jp

gihyo.jp

gihyo.jp

【登壇】Ya8でメールの話をしてきた

hachiojipm.connpass.com

3/15~16で練馬の練馬のココネリホールで行われていたYa8でちょっと前まで行っていたGmailガイドライン対応について同僚の@yammerjpと一緒に話をしてきました。

speakerdeck.com

この対応が始まるまでメールサーバというかメール技術自体そこまで深く理解できていない状態だったので学びが多かった1ヶ月だった。新しいことを学ぶのを楽しいと感じた期間だったし楽しく進めれて良かったという感想。発表に対する自分の反省は割と小難しい話をわかりやすく伝える技術みたいなのがないと思った。普段の業務でも感じる部分はあったりする。難しい事を、難しく説明するのは理解してれば簡単で難しいことを簡単に説明できるようになりたい。

【メール】3.4.4. The "relaxed" Body Canonicalization Algorithm

tex2e.github.io

ハッシュをする前に正規化することで空白や余計な改行をなくした上でハッシュを取るという話。DKIMのrelaxedアルゴリズムの詳細の話なのだが空白一文字でもハッシュは変わるから何のこと??って一瞬思ったが正規化をすることで許容する。RFC見て納得したがなるほどなぁとなった今日の学び。