#
ドキュメント

Document

自分のための備忘録です。

レプリケーション 8.0.x

レプリケーションとは

MySQL サーバ(ソース)のデータを別の MySQL サーバ(レプリカ)にコピーする。

レプリケーションの用途

用途はいくつかあるが代表的なものを記載する。

  • 読み取り専用
  • アップグレード
  • フェイルオーバー

アップグレード

ここではアップグレードについて少し詳しく記載する。

  1. 既存 MySQL サーバーから mysqldump などを使って論理バックアップする
  2. アップグレード先 MySQL サーバーにリストアする
  3. 既存 MySQL サーバー(ソース)からアップグレード先 MySQL サーバー(レプリカ)にレプリケーションを組む
  4. レプリケーションが組まれるとソースの更新がアップグレード先であるレプリカに同期されるのでレプリカのデータを最新に保つことができる
  5. アップグレード先 MySQL (レプリカ)サーバーをソースに昇格
  6. 昇格したソースに書き込みを許可
  7. アプリケーションの接続先を昇格したソース(アップグレード先)に切り替える

レプリケーションのアーキテクチャ

  • シングルスレッド方式
  • MTA (マルチスレッドアプライアー)方式

基本的な仕組みはシングルスレッド方式 / MTA 方式でおおきな違いはない。
共通部分の説明をする。

  1. ソースで INSERT や UPDATE などのコミットが発生( ≒ イベントが発行される)
  2. 発行イベントは バイナリログ に書き込まれる(バイナリログをディスクに同期するかは sync_binlog 次第 )
  3. バイナリログの内容がレプリカのリレーログに書き込まれる
  4. リレーログの更新をレプリカに適用する

レプリケーションの種類

シングルスレッド方式、 MTA 方式によらずレプリケーションにはバイナリログのポジションを利用したレプリケーション(ポジションレプリケーション)と GTID を利用したレプリケーションの 2 種類がある。 どちらもレプリケーションを開始するに位置に関する機能。

バイナリログ

バイナリログ(バックアップログ)

レプリケーション

前提

役割 ホスト( Docker Composer Service ) ポート MySQL バージョン 文字コード
ソース db-source 3306 MySQL 8.0.36 utf8mb4
レプリカ db-replica 3306 MySQL 8.0.36 utf8mb4

作業

1. フルバックアップ(ソース)

ソースからフルバックアップを取得(ポジションレプリケーション)。

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

2. リストア(レプリカ

レプリカにリストア。

mysql -h db-replica -u root -p < source.dump

3. レプリケーション設定(レプリカ)

レプリカでレプリケーション設定する。

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;

4. レプリケーション開始(レプリカ)

START REPLICA;

5. レプリケーション確認

SHOW REPLICA STATUS\G

カラム Rplica_IO_Running, Replica_SQL_Running が Yes ならレプリケーションが開始。

用語