MySQLで別データベース間でテーブルをレプリケートする方法
MySQLでは2つの方法で、データベース間のレプリケーションに対応するテーブルを作成できます。
方法1:INSERT INTO SELECT ステートメントの利用
- 空のテーブルをターゲットデータベースに作成し、ソースデータベースのテーブル構造と同じ構造にします。
- INSERT INTO SELECTを使って元のデータベースのデータを宛先データベースのテーブルへ挿入する。
サンプルコードは以下のとおりです。
INSERT INTO destination_database.destination_table
SELECT * FROM source_database.source_table;
MySQLレプリケーション機能を利用する方法
- ソースデータベースのmy.cnf設定ファイルに次の設定を追加する:
server-id=1
log-bin=mysql-bin
- 構成を有効にするため、ソースデータベースサーバーを再起動します。
- ターゲットデータベースのmy.cnf設定ファイルに次の設定を追加してください。
server-id=2
log-bin=mysql-bin
replicate-do-db=source_database
- 再起動して構成を有効にします。
- コピー元のテーブルと同じテーブルを対象データベース上に作成します。
- ターゲットデータベース内で以下のコマンドを実行し、ターゲットデータベースとソースデータベース間にレプリケーション関係を作成します。
CHANGE MASTER TO
MASTER_HOST='source_database_host',
MASTER_USER='replication_user',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=123456;
source_database_hostがソースデータベースのホスト名、replication_userがレプリケーション権限を持つユーザー、replication_passwordは当該ユーザーのパスワード、mysql-bin.000001はソースデータベースでバイナリログアーカイブのファイル名、123456はソースデータベースでバイナリログアーカイブのポジション
START SLAVE;
注意事項:
- レプリケーション機能を使用する場合は、必ずソースデータベースとターゲットデータベースのバージョンが同じであることを確認してください。
- コピー操作を行う前に、宛先データベースにコピー元のデータベースにあるテーブルと同じ名前のテーブルがないことを確認してください。そうしないとコピーが失敗します。
- レプリケーション時、ソースデータベースとターゲットデータベース間のネットワーク接続が利用可能である必要があります。そうしないと、レプリケーションは中断されます。