【DB】レプリケーションの意味とは?バックアップとの違いも解説

レプリケーションレプリケーションとは、他のサーバーでデータのレプリカ (複製) を持つことです。

レプリケーションでは、役割ごとにサーバーを以下のように呼びます。

  • 読み書き可能なサーバー:プライマリー (マスター等)
  • 読み取りのみ可能なサーバー:レプリカ (セカンダリ/スレーブ/スタンバイ等)

なお、レプリケーションとバックアップの違いは以下のとおりです。

レプリケーションバックアップ
読み取り性能の向上⭕️ある (レプリカも読み取りに使える)❎ない
可用性⭕️高い (レプリカを予備として使える)❎低い (リストアの時間が必要)
複製するデータ更新ログ (MySQL ではバイナリログ)完全なデータ
コスト❎高い (レプリカのサーバー代)⭕️低い
関連記事:データベースの基礎知識編
学習ロードマップ
スポンサーリンク

レプリケーションの仕組み

レプリケーションは、以下の仕組みで動作します。

フェイルオーバー

フェイルオーバーとは、サーバーの障害発生時に、自動で別のサーバーに切り替える事です。

レプリケーションでは、プライマリーサーバーに障害が発生すると、自動でレプリカサーバーがプライマリーに昇格します。

スポンサーリンク

MySQL でレプリケーションを設定

MySQL 8.0.38 を利用して、実際にレプリケーションを設定してみます。

プライマリー側の設定

sudo vim /etc/my.cnf
server-id=1
gtid-mode=on                                                                    
enforce-gtid-consistency=on
sudo systemctl restart mysqld
mysql -u root -p
CREATE USER 'repl'@'192.0.2.3' IDENTIFIED BY 'Repl_1234';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.0.2.3';
eixt;
mysqldump -u root -p --single-transaction --triggers --routines --events --all-databases > dump.sql
rsync dump.sql user@192.0.2.3:~/

レプリカ側の設定

sudo vim /etc/my.cnf
server-id=2
read_only
gtid-mode=on                                                                    
enforce-gtid-consistency=on
sudo systemctl restart mysqld
mysql -u root -p < dump.sql
mysql -u root -p
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.0.2.2',
SOURCE_USER = 'repl',
SOURCE_PASSWORD = 'Repl_1234',
SOURCE_AUTO_POSITION = 1,
GET_MASTER_PUBLIC_KEY=1;
START REPLICA;

動作確認

CREATE TABLE rep(id int);
INSERT INTO rep VALUES(1);
SELECT * FROM rep;
+------+
| id   |
+------+
|    1 |
+------+
SELECT * FROM rep;
+------+
| id   |
+------+
|    1 |
+------+
SHOW REPLICA STATUS \G
スポンサーリンク

関連記事

学習ロードマップ
関連記事:データベースの基礎知識編
関連記事:データベース設計

参考記事

https://downloads.mysql.com/presentations/20151207_02_MySQL_Replication_for_Beginners.pdf