phpのmysqlndというライブラリは素晴らしいものである。
しかし、その機能に悩まされたので、記載しておく。
そもそもmysqlndは、
- ネイティブのprepared statementのサポート
- DBの型に合わせたphpの自動型変換サポート
- フェイルオーバ検知の仕組みの提供(mysqlnd_ms)
などの機能がある。
1と2については、
PDO::setAttribute( ATTR_EMULATE_PREPARES, false )
により実現できる。
しかし、3については、これを設定すると機能しなくなる(らしい、未検証)。
さらに上記を設定した場合、
raw_queryでさえも、prepared statementとして扱われてしまう。
一見問題なさそうなのですが、
maxsacleのreadwrite splitをかましていると、
prepared statementがmasterに振られてしまうため、
slave参照が行われなくなってしまう。
じゃあ、mysqlnd_msでやればいいじゃんって話だが、
先ほど書いたように機能しなくなってしまう(らしい、未検証)。
というちょっと困る事象。。
maxslaceがprepared statemtでもslaveに振ってくれればいいのだが。。
コメントがあればどうぞ