MySQL リプリケーションとストアド
ストアドプロシージャと、リプリケーションを両方使う場合はすんなりうまく行かない。
まず、リプリケーションをする場合は定義文に
DETERMINISTIC or NOT DETERMINISTICが必要となる
DETERMINISTIC とは引数が同じであれば、返値が同じ場合。
NOT DETERMINISTICの場合は、ランダム関数が入るとかで入力値に対して出力値が毎回違う場合。
ストアドファンクションを定義したあとに、バイナリログをオンにすると、このDETERMINISTICが
定義されてないからおかしなことになる。
そういう場合はDETERMINISTICであるとみなして動かすこともできる。
SET GLOBAL log_bin_trust_function_creators = 1;
また、マスター側でストアドプロシージャのダンプを流すと、
スレーブが止まってしまう致命的なバグがあるようだ。
リプリケーションを使うならストアド系を使わない方が無難かもしれない。
■ 追記 ストアドプロシージャをDUMPしたものがDELIMITERと大文字になっててこれでは動かなかった。
DELIMITER → delimiter としたら動いた。なんでだろう。
トラックバック URL :