このブログを検索

2011年2月10日木曜日

[MySQL]Maatkitによりレプリケーションの整合性をチェックする

何かしらの事情でマスタとスレーブに差異が出ることがあります。
マスタ、スレーブともにテーブルロックして比較するのが正攻法ですが、サービスに必ず影響が出ます。
そこで、Maatkitでチェックします。

1.しくみ
テーブルのチェックサム情報をマスタにinsertします。
ステートメントベースでスレーブに転送されるので、スレーブ側に差異があればマスタと異なるチェックサムが記録されます。

2.チェックサム記録用テーブルの作成
SQL> use mysql;
SQL> CREATE TABLE checksum (
     db         char(64)     NOT NULL,
     tbl        char(64)     NOT NULL,
     chunk      int          NOT NULL,
     boundaries char(100)    NOT NULL,
     this_crc   char(40)     NOT NULL,
     this_cnt   int          NOT NULL,
     master_crc char(40)         NULL,
     master_cnt int              NULL,
     ts         timestamp    NOT NULL,
     PRIMARY KEY (db, tbl, chunk)
  );

3.スレーブ→マスタ権限追加

4.チェックサムの記録
スレーブから実行します。
$ mk-table-checksum --replicate=mysql.checksum <マスタ名> -uroot -pxxxxxxxxxxxx -S/usr/local/db_data/mysql/mysql.sock 

DATABASE TABLE                     CHUNK HOST    ENGINE      COUNT         CHECKSUM TIME WAIT STAT  LAG
mysql    columns_priv                  0 sssdb12 MyISAM          0             NULL    0 NULL NULL NULL
mysql    db                            0 sssdb12 MyISAM         24         7bed06ed    0 NULL NULL NULL
                                        (略)
DATABASE  TABLE                 CHUNK HOST    ENGINE      COUNT         CHECKSUM TIME WAIT STAT  LAG
quest001i tbl_quest_item_hist1      0 sssdb12 InnoDB        298         61b07870    0 NULL NULL NULL
quest001i tbl_quest_user1           0 sssdb12 InnoDB     250027         333f3110    1 NULL NULL NULL
quest001i tbl_quest_user_area1      0 sssdb12 InnoDB          5         29fa5071    0 NULL NULL NULL

5.マスタとスレーブの比較
スレーブから実行します。
$ mk-table-checksum --replicate-check=1 --replicate=mysql.checksum <マスタ名> -uroot -pxxxxxxxxxxxx -S/usr/local/db_data/mysql/mysql.sock 

Differences on P=3306,h=sssdb13.smc.indexweb.co.jp
DB        TBL                   CHUNK CNT_DIFF CRC_DIFF BOUNDARIES
quest001i tbl_quest_item_hist1      0        0        1 1=1
quest001i tbl_quest_user1           0       -2        1 1=1
quest001i tbl_quest_user_area1      0        0        1 1=1

0 件のコメント:

コメントを投稿