Ubuntu 18.04 で MySQL マスター/スレーブ レプリケーションをセットアップする方法
MySQL のマスター/スレーブ レプリケーションは、ネットワーク内の 1 つ以上のノード間でデータベース ファイルを複製またはコピーできるようにする手順です。この設定により、マスター ノードで障害が発生した場合でもデータベースをスレーブ ノードで回復できるように、冗長性とフォールト トレランスが提供されます。これにより、データベースのレプリカは別のサーバーから取得できるため、万が一の場合でもすべてが失われることはなく、ユーザーは安心できます。
このガイドでは、Ubuntu 18.04 システム上で MySQL データベースのマスター/ スレーブ レプリケーションを実行する方法を学習します。
前提条件
セットアップでは、次の IP アドレスを持つ Ubuntu 18.04 を実行する 2 台のサーバーを用意します。
Master server: 10.128.0.28 Slave server: 10.128.0.29
それでは、Ubuntu でマスター/ スレーブ レプリケーション セットアップを構成する方法を見てみましょう。
ステップ 1: MySQL をマスター ノードとスレーブ ノードにインストールする
Ubuntu リポジトリには、MySQL のバージョン 5.7 が含まれています。新しい機能を利用し、潜在的な問題を回避するには、最新の MySQL バージョンをインストールする必要があります。ただし、その前に、次の apt コマンドを使用して 2 つのノードを更新しましょう。
$ sudo apt update

両方のノードにMySQL をインストールするには、コマンドを実行します。
$ sudo apt install mysql-server mysql-client

次に、mysql 構成ファイルを開きます。
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
以下に示すように、マスター ノードでスクロールして bind-address
属性を見つけます。
bind-address =127.0.0.1
ループバック アドレスをマスター ノードの IP アドレスと一致するように変更します。
bind-address =10.128.0.28

次に、[mysqld]
セクションの server-id
属性の値を指定します。選択する番号は、他のサーバー ID 番号と一致しないでください。値 1
を割り当てましょう。
server-id =1

構成ファイルの最後に、以下の行をコピーして貼り付けます。
log_bin = /var/log/mysql/mysql-bin.log log_bin_index =/var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index
構成ファイルを終了し、MySQL サービスを再起動して変更をマスター ノードに有効にします。
$ sudo systemctl restart mysql
MySQL サーバーが期待どおりに実行されていることを確認するには、次のコマンドを発行します。
$ sudo systemctl status mysql

完全! MySQL サーバーは期待どおりに実行されています。
ステップ 2: マスター ノードでレプリケーション用の新しいユーザーを作成する
このセクションでは、マスター ノードにレプリケーション ユーザーを作成します。これを実現するには、図に示すように MySQL サーバーにログインします。
$ sudo mysql -u root -p
次に、以下のクエリを実行してレプリカ ユーザーを作成し、レプリケーション スレーブへのアクセスを許可します。 IP アドレスを忘れずに使用してください。
mysql> CREATE USER 'replication_user'@'10.128.0.29' IDENTIFIED BY 'replica_password'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user '@'10.128.0.29';

次に、次のコマンドを実行します。
mysql> SHOW MASTER STATUS\G
出力は以下のようになります。

mysql-bin.000002
の値と位置 ID 1643
に注目してください。これらの値はスレーブ サーバーを設定するときに重要になります。
ステップ 3: MySQL スレーブサーバーを構成する
スレーブ サーバーに移動し、マスター サーバーの場合と同様に、MySQL 構成ファイルを開きます。
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
マスター サーバーと同様に、次の行の編集に進みます。
bind-address = 10.128.0.29

前と同様に、[mysqld]
セクションの server-id
属性の値を指定します。今回は別の値を選択します。 2
を使用してみましょう。
server-id =2

もう一度、構成ファイルの最後に以下の行を貼り付けます。
log_bin = /var/log/mysql/mysql-bin.log log_bin_index =/var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index
次に、スレーブ ノードで MySQL サーバーを再起動します。
$ sudo systemctl restart mysql
完了したら、保存してテキストエディタを終了します
次に、図に示すように MySQL シェルにログインします。
$ sudo mysql -u root -p
このステップでは、スレーブ サーバーがマスター サーバーに接続できるように構成を行う必要があります。ただし、最初に、図に示すようにスレーブ スレッドを停止します。
mysql> STOP SLAVE;
スレーブ サーバーがマスター サーバーを複製できるようにするには、次のコマンドを実行します。
mysql> CHANGE MASTER TO MASTER_HOST ='10.128.0.28', MASTER_USER ='replication_user', MASTER_PASSWORD ='', MASTER_LOG_FILE = 'mysql-bin.000002', MASTER_LOG_POS = 1643;

十分に熱心であれば、スレーブ レプリケーション ユーザーの作成後に表示された mysql-bin.00002
値と位置 ID 1643
を使用していることに気づくでしょう。
さらに、マスター サーバーの IP アドレス、レプリケーション ユーザー、およびパスワードが使用されています。
後で、以前に停止したスレッドを開始します。
mysql> START SLAVE;
ステップ 4: MySQL マスター/スレーブ レプリケーションを確認する
セットアップが実際に期待どおりに機能しているかどうかを確認するために、マスター上に新しいデータベースを作成し、それが MySQL スレーブ サーバー上にレプリケートされているかどうかを確認します。
マスターサーバーの MySQL にログインします。
$ sudo mysql -u root -p
テスト用のデータベースを作成しましょう。この場合、replication_db というデータベースを作成します。
mysql> CREATE DATABASE replication_db;
次に、スレーブ サーバーの MySQL インスタンスにログインします。
$ sudo mysql -u root -p
次に、クエリを使用してデータベースを一覧表示します。
mysql> SHOW DATABASES;

マスターで作成したデータベースがスレーブにレプリケートされていることがわかります。素晴らしい ! MySQL のマスター/スレーブ レプリケーションは期待どおりに機能しています。これで、障害が発生した場合でも、データベース ファイルのコピーがスレーブ サーバーに複製されるので、安心していただけます。
結論
このガイドでは、Ubuntu 18.04 で MySQL マスター/スレーブ レプリケーション セットアップをセットアップする方法を学習しました。