MySQLレプリケーションは、1つのデータベースサーバーからのデータを1つ以上のサーバーに自動的にコピーできるようにするプロセスです。
MySQLは多くのレプリケーショントポロジをサポートしており、マスター/スレーブトポロジは、1つのデータベースサーバーがマスターとして機能し、1つ以上のサーバーがスレーブとして機能する最もよく知られたトポロジの1つです。デフォルトでは、レプリケーションは非同期であり、マスターはデータベースの変更を説明するイベントをバイナリログに送信し、スレーブは準備ができたときにイベントを要求します。
このチュートリアルでは、Ubuntu18.04で1つのマスターサーバーと1つのスレーブサーバーを使用したMySQLマスター/スレーブレプリケーションの基本的な例について説明します。同じ手順がMariaDBにも当てはまります。
このタイプのレプリケーショントポロジは、リードスケーリングのためのリードレプリカの展開、ディザスタリカバリおよび分析ジョブのためのライブデータベースバックアップに最適です。
前提条件#
この例では、Ubuntu 18.04を実行している2つのサーバーがあり、プライベートネットワークを介して相互に通信できることを前提としています。ホスティングプロバイダーがプライベートIPアドレスを提供していない場合は、パブリックIPアドレスを使用して、信頼できるソースからのポート3306のみのトラフィックを許可するようにファイアウォールを構成できます。
この例のサーバーには、次のIPがあります。
Master IP: 192.168.121.190
Slave IP: 192.168.121.236
MySQLのインストール#
デフォルトのUbuntu18.04リポジトリには、MySQLバージョン5.7が含まれています。問題を回避するには、両方のサーバーに同じMySQLバージョンをインストールすることをお勧めします。
マスターサーバーにMySQLをインストールします:
sudo apt-get update
sudo apt-get install mysql-server
同じコマンドを使用して、MySQLをスレーブサーバーにインストールします。
sudo apt-get update
sudo apt-get install mysql-server
マスターサーバーを構成する#
最初のステップは、マスターMySQLサーバーを構成することです。次の変更を行います:
- プライベートIPでリッスンするようにMySQLサーバーを設定します。
- 一意のサーバーIDを設定します。
- バイナリロギングを有効にする
これを行うには、MySQL構成ファイルを開き、コメントを解除するか、以下を設定します。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
master:/etc/mysql/mysql.conf.d/mysqld.cnf bind-address = 192.168.121.190
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
完了したら、変更を有効にするためにMySQLサービスを再起動します。
sudo systemctl restart mysql
次のステップは、新しいレプリケーションユーザーを作成することです。次のように入力して、rootユーザーとしてMySQLサーバーにログインします。
sudo mysql
MySQLプロンプト内から、replica
を作成する次のSQLクエリを実行します。 ユーザーとREPLICATION SLAVE
を付与します ユーザーへの特権:
CREATE USER 'replica'@'192.168.121.236' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.236';
必ずスレーブIPアドレスでIPを変更してください。必要に応じてユーザーに名前を付けることができます。 MySQLプロンプト内で、次のコマンドを実行すると、バイナリのファイル名と位置が出力されます。
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 629
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ファイル名‘mysql-bin.000001’をメモします と位置「629」 。スレーブサーバーを構成するときにこれらの値が必要になります。これらの値は、サーバーによって異なる可能性があります。
スレーブサーバーの構成#
上記のマスターサーバーと同様に、スレーブサーバーに次の変更を加えます。
- プライベートIPでリッスンするようにMySQLサーバーを設定します
- 一意のサーバーIDを設定する
- バイナリロギングを有効にする
MySQL構成ファイルを開き、次の行を編集します。
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
スレーブ:/etc/mysql/mysql.conf.d/mysqld.cnf bind-address = 192.168.121.236
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
MySQLサービスを再起動します:
sudo systemctl restart mysql
次のステップは、スレーブサーバーがマスターサーバーに接続するために使用するパラメーターを構成することです。 MySQLシェルにログインします:
sudo mysql
まず、スレーブスレッドを停止します:
STOP SLAVE;
マスターを複製するようにスレーブを設定する次のクエリを実行します。
CHANGE MASTER TO
MASTER_HOST='192.168.121.190',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=629;
正しいIPアドレス、ユーザー名、およびパスワードを使用していることを確認してください。ログファイルの名前と位置は、マスターサーバーから取得した値と同じである必要があります。
完了したら、スレーブスレッドを開始します。
START SLAVE;
構成をテストする#
この時点で、マスター/スレーブレプリケーションのセットアップが機能しているはずです。
すべてが期待どおりに機能することを確認するために、マスターサーバー上に新しいデータベースを作成します。
sudo mysql
CREATE DATABASE replicatest;
スレーブMySQLシェルにログインします:
sudo mysql
次のコマンドを実行して、すべてのデータベースを一覧表示します。
SHOW DATABASES;
マスターサーバーで作成したデータベースがスレーブに複製されていることに気付くでしょう:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| replicatest |
| sys |
+--------------------+
5 rows in set (0.00 sec)