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