製品&サポートサービス

pt-table-sync

コマンド

pt-table-sync [ オプション ] [ 同期元DSN ] [ 同期先DSN ]

【必須項目】

  • ・ --execute or --dry-run : --executeを指定すると変更が実行され、--dry-runは変更を実行しません
  • ・ [ 同期元DSN ] : h=ホスト名,u=ユーザー名,p=パスワード (D=データベース名,t=テーブル名)
  • ・ [ オプション ] : -p パスワード
  • ・ [ 同期先DSN ] : h=ホスト名,u=ユーザー名,p=パスワード
    ※[ 同期先DSN ]にはSUPER権限のあるユーザを指定する必要があります

【主なオプション】

  • ・ --sync-to-master : 同期先DSNで指定したホスト(スレーブ)のマスタを同期元DSNとすることができます
    ※このオプションを使用する場合、[ 同期元DSN ] を書く必要はありません

目的

ホスト間でテーブルの同期を行うことができます

シナリオ

今回は、レプリケーション環境で、マスタ(同期元)とスレーブ(同期先)のテーブルを同期させます

スレーブ側でレプリケーションを停止します

mysql> STOP SLAVE;

マスタ側に以下のようなテーブルを用意し、レコードを挿入します

mysql> CREATE TABLE test (id INT);
mysql>INSERT INTO test (id) VALUES(1),(2),(3);
mysql>SHOW MASTER STATUS;

スレーブ側にもマスタと同じ定義の空テーブルを用意し、改めてマスタとレプリケーションを組みます

> RESET SLAVE ALL;
> CHANGE MASTER TO …
> START SLAVE;

マスタ側とスレーブ側でデータが異なっていることを確認します

mysql> SELECT * FROM test;

マスタ側

+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)

スレーブ側

 
 
Empty set (0.00 sec)
 
 
 
 
 

スレーブ側でpt-table-syncを実行します

pt-table-sync --execute --sync-to-master u=root,p=password

結果

スレーブ側のテーブルにマスタのテーブルが同期されます

mysql> SELECT * FROM test;

マスタ側

mysql>+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)

スレーブ側

mysql>+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.00 sec)

良い点

テーブル間の同期を簡単に行うことができます

良い点

双方に同じ定義のテーブルが存在している必要があります

--sync-to-masterを使う場合、ユニークキーの設定されていないテーブルを同期することはできません

その他

ホスト名を指定することで、任意のホスト間でテーブルを同期させることができます

mysql># pt-table-sync --execute h=host1,D=database,t=table h=host2

※host1(同期元)のテーブルをhost2(同期先)に同期します

MySQLや関連ソリューションに関するお問い合わせ、お見積などがございましたら、ご連絡ください。

お問い合わせ各MySQL保守サービス見積依頼スマートスタイルOSSストア

ページトップへ