製品&サポートサービス

pt-table-sync

コマンド

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

【必須項目】

  • ・ --execute or --dry-run : --executeを指定すると変更が実行され、--dry-runは変更を実行しません
  • ・ [ 同期元DSN ] : h=ホスト名,u=ユーザー名,p=パスワード (D=データベース名,t=テーブル名)
  • ・ [ 同期先DSN ] : h=ホスト名,u=ユーザー名,p=パスワード

※[ 同期先DSN ]にはSUPER権限のあるユーザを指定する必要があります

【主なオプション】

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

目的

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

シナリオ

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

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

mysql> STOP SLAVE;

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

mysql> CREATE TABLE test (id INT);
mysql> ALTER TABLE test ADD UNIQUE (id);
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.01 sec)

スレーブ側

 
 
Empty set (0.00 sec)
 
 
 
 
 

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

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

結果

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

mysql> SELECT * FROM test;

マスタ側

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

スレーブ側

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

良い点

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

注意点

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

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

その他

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

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

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

各データベース保守サービス比較
各データベース保守サービス見積依頼
MySQLサポートサービス
MySQL Editions
Oracle Cloudトータルサポート
Percona
MariaDBプロダクト・サポート・サービス
エンタープライズOSSサポート
高可用性ソリューション
OSSシステムソリューション
Navicat
SQL Diagnostic Manager for MySQL
SYNCNEL
OSS保守サポートサービス
Microsoft Azure
お問い合わせ
各MySQL保守サービス見積依頼
スマートスタイルOSSストア
Oracle Gold Partner

ページトップへ