マスタ、スレーブともにテーブルロックして比較するのが正攻法ですが、サービスに必ず影響が出ます。
そこで、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 件のコメント:
コメントを投稿