質問: STATEMENT. INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. > > > 本エラーはレプリケーション時のフォーマットエラーでして 形式をMIXEDに変更すれば問題ないとの情報が出てきました。 現在の構成はmaster・slaveともstatementとなっています ``` +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+ ``` そこで、質問させてください。 質問1: 現在の構成はmaster⇒slaveの2台構成で更新・参照もmaster側で運用しており slaveにはレプリケーションのみさせています。 設定変更する際、slaveを停止してからmaster・slaveの順で行う事でよろしいでしょうか。 また、set globalコマンドで実施すればmysql再起動は必要ない事でいいでしょうか 質問2: このエラーが出ているクエリはslaveにコピーされていないので master側で一旦dumpを取得してslave側にインポートさせた方がいいのでしょうか よろしくお願い致します
回答: > > 質問1: > > 現在の構成はmaster⇒slaveの2台構成で更新・参照もmaster側で運用しており > > slaveにはレプリケーションのみさせています。 > > 設定変更する際、slaveを停止してからmaster・slaveの順で行う事でよろしいでしょうか。 > > > slave を停止する必要はなく、master で設定変更するだけでよいです。 > > また、set globalコマンドで実施すればmysql再起動は必要ない事でいいでしょうか > > > set global すれば mysql 再起動は必要なかったと思います。 > > 質問2: > > このエラーが出ているクエリはslaveにコピーされていないので > > master側で一旦dumpを取得してslave側にインポートさせた方がいいのでしょうか > > > master と slave で整合がとれなくなる可能性がある、という意味であって、レプリケーションされていないわけではありません。 ただまあ、master と slave で差が生じてる可能性があるので、可能なら master でダンプして slave にインポートしていたほうが良いかもしれません。 ステートメントベースのレプリケーションだと、master で実行した SQL と同じ SQL を slave で実行することでレプリケーションを行なうのですが、同じ SQL でも結果がおなじになることが保証されないパターンがあります。 `INSERT... SELECT... ON DUPLICATE KEY UPDATE` はそのパターンに該当するようです。