1. オーバーレイネットワークの作成
docker network create --driver overlay shared-net --attachable
2. MySQLコンテナの起動
マスターノード:
docker run -d \
--name primary-db \
--network shared-net \
-e MYSQL_ROOT_PASSWORD=securePass \
-p 3306:3306 \
mysql:8.0 \
--default-authentication-plugin=mysql_native_password
スレーブノード:
docker run -d \
--name replica-db \
--network shared-net \
-e MYSQL_ROOT_PASSWORD=securePass \
-p 3307:3306 \
mysql:8.0 \
--default-authentication-plugin=mysql_native_password
3. レプリケーション設定
マスター設定:
docker run -it --rm --network shared-net mysql:8.0 \
mysql -hprimary-db -uroot -psecurePass \
-e "SET PERSIST server_id=100;" \
-e "SET PERSIST_ONLY gtid_mode=ON;" \
-e "SET PERSIST_ONLY enforce_gtid_consistency=ON;" \
-e "CREATE USER 'sync_user'@'%' IDENTIFIED BY 'replicaPass' REQUIRE SSL;" \
-e "GRANT REPLICATION SLAVE ON *.* TO 'sync_user'@'%';"
スレーブ設定:
docker run -it --rm --network shared-net mysql:8.0 \
mysql -hreplica-db -uroot -psecurePass \
-e "SET PERSIST server_id=200;" \
-e "SET PERSIST_ONLY gtid_mode=ON;" \
-e "SET PERSIST_ONLY enforce_gtid_consistency=ON;"
4. コンテナ再起動
docker restart primary-db replica-db
5. レプリケーション接続設定
docker run -it --rm --network shared-net mysql:8.0 \
mysql -hreplica-db -uroot -psecurePass \
-e "CHANGE REPLICATION SOURCE TO SOURCE_HOST='primary-db', SOURCE_PORT=3306, SOURCE_USER='sync_user', SOURCE_PASSWORD='replicaPass', SOURCE_AUTO_POSITION=1, SOURCE_SSL=1;" \
-e "START REPLICA;"
6. レプリケーション状態確認
docker run -it --rm --network shared-net mysql:8.0 \
mysql -hreplica-db -uroot -psecurePass \
-e "SHOW REPLICA STATUS\G"
正常な状態:
Replica_IO_Running: Yes Replica_SQL_Running: Yes
7. データ同期検証
マスターでテストデータベース作成:
docker run -it --rm --network shared-net mysql:8.0 \
mysql -hprimary-db -uroot -psecurePass \
-e "CREATE DATABASE test_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
スレーブでデータベース確認:
docker run -it --rm --network shared-net mysql:8.0 \
mysql -hreplica-db -uroot -psecurePass \
-e "SHOW DATABASES;"
出力例:
+--------------------+ | Database | +--------------------+ | test_db | | information_schema | | mysql | | performance_schema | | sys | +--------------------+
注意: コマンドラインでのパスワード使用はセキュリティリスクがあります