Ubuntu18.04でMySQLマスタースレーブレプリケーションをセットアップする方法


MySQLマスタースレーブレプリケーションは、ネットワーク内の1つ以上のノード間でデータベースファイルをレプリケートまたはコピーできるようにする手順です。このセットアップは、マスターノードで障害が発生した場合でも、データベースをスレーブノードで回復できるように、冗長性とフォールトトレランスを提供します。これにより、データベースのレプリカを別のサーバーから取得できるため、万が一すべてが失われることはないという安心感が得られます。

このガイドでは、Ubuntu18.04システムでMySQLデータベースのマスタースレーブレプリケーションを実行する方法を学習します。

セットアップでは、次のIPアドレスでUbuntu18.04を実行する2台のサーバーを作成します。

Master server: 10.128.0.28
Slave server: 10.128.0.29

それでは、Ubuntuでマスタースレーブレプリケーションのセットアップを構成する方法を見てみましょう。

ステップ1:マスターノードとスレーブノードにMySQLをインストールする

Ubuntuリポジトリにはバージョン5.7のMySQLが含まれています。新しい機能を利用して潜在的な問題を回避するには、最新の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 ='[email protected]', 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マスタースレーブレプリケーションは期待どおりに機能しています!これで、障害が発生した場合に、データベースファイルのコピーがスレーブサーバーに複製されるので安心できます。

このガイドでは、Ubuntu18.04でMySQLマスタースレーブレプリケーションセットアップをセットアップする方法を学習しました。