MySQL サーバ(ソース)のデータを別の MySQL サーバ(レプリカ)にコピーする。
用途はいくつかあるが代表的なものを記載する。
ここではアップグレードについて少し詳しく記載する。
基本的な仕組みはシングルスレッド方式 / MTA 方式でおおきな違いはない。
共通部分の説明をする。
バイナリログ
に書き込まれる(バイナリログをディスクに同期するかは sync_binlog 次第 )シングルスレッド方式、 MTA 方式によらずレプリケーションにはバイナリログのポジションを利用したレプリケーション(ポジションレプリケーション)と GTID を利用したレプリケーションの 2 種類がある。 どちらもレプリケーションを開始するに位置に関する機能。
役割 | ホスト( Docker Composer Service ) | ポート | MySQL バージョン | 文字コード |
---|---|---|---|---|
ソース | db-source | 3306 | MySQL 8.0.36 | utf8mb4 |
レプリカ | db-replica | 3306 | MySQL 8.0.36 | utf8mb4 |
ソースからフルバックアップを取得(ポジションレプリケーション)。
mysqldump -h db-source -P 3306 -u root -p --single-transaction --default-character-set=utf8mb4 --source-data=2 --routines --triggers --events --hex-blob --all-databases > source.dump
レプリカにリストア。
mysql -h db-replica -u root -p < source.dump
レプリカでレプリケーション設定する。
CHANGE REPLICATION SOURCE TO SOURCE_HOST='db-source', SOURCE_PORT=3306, SOURCE_USER='root', SOURCE_PASSWORD='password', SOURCE_LOG_FILE='binlog.000002', SOURCE_LOG_POS=157;
START REPLICA;
SHOW REPLICA STATUS\G
カラム Rplica_IO_Running, Replica_SQL_Running が Yes ならレプリケーションが開始。