maatkitでレプリケーションデータの整合性を確認 |

MySQLでレプリケーションを行うことはよくあるかと思います。
今回紹介するのはmaatkitでdatabaseの整合性チェックを行うツールです。

作業難易度 ★☆☆☆☆
作業危険度 ★★☆☆☆
実績度 ★★★☆☆
作業Step数 3 Steps

評価★について


作業内容
まず大前提にMySQLでレプリケーションされているからデータの整合性がとれているとは限りません。
Slaveがread onlyになっていない場合はSlaveに書き込みができてしまい整合性がとれなくなってしまいます。「Slave_IO_Running」「Slave_SQL_Running」が「Yes」でも整合性が取れていない場合があるのです。

そこで今回はMaster側のデータとSlave側のデータの整合性がとれているかチェックを行う作業をします。
maatkitには色々ツールがあるのですが今回紹介するのはmk-table-checksumです。

下記図のように動作し、テーブル整合性チェックを行います。

1. Master側テーブルのハッシュ値をchecksumクエリにて取得します。

2. MasterからSlaveにレプリケーションされます。

3. レプリケーションされたクエリがSlave で実行され、 Slave側でのchecksumクエリ結果が更新されます。

作業手順
▼Step 0
MySQLのレプリケーションができている状態である事を前提とします。
またmaatkitのインストールは下記URLを参照してください。
http://www.maatkit.org/download

▼Step 1
まずMaster側にchecksumを行うデータベースとテーブルを作成します

user@RHEMS:# mysql
mysql> create database maatkit;
Query OK, 1 row affected (0.03 sec)

mysql> use maatkit
Database changed
mysql> 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)
-> );

Query OK, 0 rows affected (0.57 sec)

mysql> show tables;
+——————-+
| Tables_in_maatkit |
+——————-+
| checksum |
+——————-+
1 row in set (0.01 sec)

mysql>

▼Step 2
データーベース内の各テーブルのデータをMD5でハッシュをとります。
今回のテストではsample_databaseを対象にしています。
“–databases”を外せば全てのdatabaseを確認できます。
(SUPER 権限で作業を行うでread onlyのslaveでもslave側に書き込みができるようになります)

user@RHEMS:# mk-table-checksum –replicate=maatkit.checksum h=MasterServerIP,p=MasterPassword –create-replicate-table –databases=sample_database
DATABASE TABLE CHUNK HOST ENGINE COUNT CHECKSUM TIME WAIT STAT LAG
sample_database board 0 ***.***.***.*** MyISAM 1 9a812884 0 NULL NULL NULL
sample_database messages 0 ***.***.***.*** MyISAM 2 59602b5c 0 NULL NULL NULL
sample_database thread 0 ***.***.***.*** MyISAM 1 a7ccb2c3 0 NULL NULL NULL

▼Step 3
Master/Slaveのdiffを取り何も出力されなければ整合性がとれていることになります

user@RHEMS:# diff
user@RHEMS:#

作業検証者からの一言
今回はMasterのデーターベスの中身がSlaveと整合性がとれているか確認をしました。
mk-table-checksumではMasterの既存テーブルの整合性しか確認しません。なのでSlaveに新しくテーブルを作成しても不整合としては検知されません。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中