mysql:8379
From: "HIROSE, Masaaki" <"HIROSE, Masaaki" <hirose31@xxxxxxxxxx>>
Date: Thu, 06 Nov 2003 02:05:56 +0900
Subject: [mysql 08379] Re: レプリケーションの整合性チェック
ひろせです on "[mysql 08375] Re: レプリケーションの整合性チェック" <20031104161852.5828.ryo@xxxxxxxxxx> at Wed, 5 Nov 2003 01:18:49 +0900 Okamoto RYO <ryo@xxxxxxxxxx> wrote: > >> 理想的には、master の Position、slave の Read_Master_Log_Pos, > >> Exec_Master_Log_Pos の 3 つの値が常に一致しているとよいのですが、 > >> master に更新系のクエリが多かったり、master - slave 間のネットワークが > >> 遅かったり、master に比べて貧弱だったり他の要因で負荷がかかったりして > >> いて slave の SQL スレッドの処理が遅れているなどなどの理由で、これら 3 > >> つの値がいつも同一となるとは限らないと思いますし、同一でないからといっ > >> てレプリケーションが正常動作していないとは言えないと思います。 > > > >次のようなロジックのスクリプトを書いたことがあります。 > > > >1. log_file と log_pos の値がマスタとスレーブで一致していれば OK > >2. でなければ、数秒待って log_pos が更新されていれば OK > >3. でなければ、NG > > これは、マスタサーバのバイナリログである(例えば)server-bin.001 > ファイルのバイト数と log_pos カラムの値が一致していれば、と > いうことですね。とりあえず、次のようなロジックを組むことに > しました。 マスターでの show master status の 「File」と スレーブでの show slavestatus の「Master_Log_File」の値が等しく、 かつ、 マスターでの show master status の 「Position」と スレーブでの show slavestatus の「Exec_master_log_pos」の値が等しい ということなのではないでしょうか? だとして話を進めると、 > 1. log_file のバイト数と log_pos の値が一致していれば OK これはその時点でマスターとスレーブが完全に同期しているかが分かり、 > 2. でなければ、Slave_IO_Running, Slave_SQL_Running > 両カラムの値をチェック > 3. どちらかが 'YES' でなければ NG これは (両方が Yes ならば) 同期しているかどうかは分からないが、正常に レプリケートは動いている、ということになると思います。 あとは「レプリケーションが正常動作している」の定義とスレーブの使われ方 によって、正常か異常かの判断が異なってくると思います。 例えば、1 のチェックだけだと、更新系のクエリが少ない使われ方の場合、レ プリケートが停止してから次にマスターが更新系のクエリを受け付けるまでの 間の異常が検出できませんし、スレーブを参照系専用に使っている場合はマス ターとのレプリケート遅延が発生するとまずいので 1 と 2 の両方のチェック が必要ですし、完全にバックアップ目的でスレーブを使っているのならば小幅 な遅延は無視できるので、2 だけもしくは 2 に加え 1 もやるけどある程度の Position の差は異常とみなさないとかとか…ケースバイケースなのではない かと思います。 ではでは -- ひろせ
8341 2003-10-30 16:42 [Okamoto RYO <ryo@xxx] レプリケーションの整合性チェック 8359 2003-11-03 18:08 ┗["HIROSE, Masaaki" <h] 8360 2003-11-03 18:37 ┣[Okamoto RYO <ryo@xxx] 8361 2003-11-03 21:52 ┗[とみたまさひろ <tomm] 8375 2003-11-05 01:18 ┗[Okamoto RYO <ryo@xxx] -> 8379 2003-11-06 02:05 ┗["HIROSE, Masaaki" <h] 8380 2003-11-07 00:05 ┗[とみたまさひろ <tomm]