MySQLレプリケーションは、1つのデータベースサーバー(マスター)から1つ以上のサーバー(スレーブ)にデータをコピーするプロセスです。
MySQLはいくつかのレプリケーショントポロジをサポートしています。マスター/スレーブトポロジは、1つのデータベースサーバーがマスターとして機能し、1つ以上のサーバーがスレーブとして機能する最もよく知られたトポロジの1つです。デフォルトでは、レプリケーションは非同期であり、マスターはデータベースの変更を説明するイベントをバイナリログに送信し、スレーブは準備ができたときにイベントを要求します。
このガイドでは、Debian 10で1つのマスターサーバーと1つのスレーブサーバーを使用してMariaDBマスター/スレーブレプリケーションを設定する方法を示します。MariaDBは、DebianでのMySQLのデフォルトの実装です。同じ手順がOracleMySQLにも当てはまります。
このタイプのレプリケーショントポロジは、リードスケーリングのためのリードレプリカの展開、ディザスタリカバリのためのライブデータベースバックアップ、および分析ジョブに最適です。
前提条件#
Debian 10を実行している2台のサーバーがあり、プライベートネットワークを介して相互に通信していることを前提としています。ホスティングプロバイダーがプライベートIPアドレスをサポートしていない場合は、パブリックIPアドレスを使用して、信頼できるソースからのポート3306のみのトラフィックを許可するようにファイアウォールを構成できます。
この例で使用されているサーバーには、次のIPアドレスがあります。
Master IP: 10.10.8.12
Slave IP: 10.10.8.164
MariaDBのインストール#
デフォルトのDebian10リポジトリには、MariaDBバージョン10.3が含まれています。潜在的な問題を回避するために、両方のサーバーに同じMariaDBバージョンをインストールすることをお勧めします。
次のコマンドを発行して、マスターとスレーブの両方にMariaDBをインストールします。
sudo apt-get update
sudo apt-get install mariadb-server
マスターサーバーの構成#
最初のステップは、マスターサーバーをセットアップすることです。次の変更を行います:
- プライベートIPでリッスンするようにMariaDBサーバーを設定します。
- 一意のサーバーIDを設定します。
- バイナリログを有効にします。
MariaDB構成ファイルを開き、コメントを解除するか、次の行を設定します。
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
master:/etc/mysql/mariadb.conf.d/50-server.cnf bind-address = 10.10.8.12
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
完了したら、ファイルを保存してMySQLサービスを再起動し、変更を有効にします。
sudo systemctl restart mariadb
次のステップは、新しいレプリケーションユーザーを作成することです。 rootユーザーとしてMariaDBサーバーにログインします:
sudo mysql
次のSQLクエリを実行して、replica
という名前のユーザーを作成します REPLICATION SLAVE
を付与します ユーザーへの特権:
CREATE USER 'replica'@'10.10.8.164' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'10.10.8.164';
必ずスレーブIPアドレスでIPを変更してください。必要に応じてユーザーに名前を付けることができます。 MySQLプロンプト内で、次のコマンドを実行すると、バイナリのファイル名と位置が出力されます。
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 328
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.001 sec)
ファイル名‘mysql-bin.000001’をメモします と位置「328」 。これらの値はスレーブサーバーを構成するときに必要であり、サーバーによって異なる可能性があります。
スレーブサーバーの構成#
スレーブサーバーでも、マスターサーバーと同じ変更を加えます。
- プライベートIPでリッスンするようにMySQLサーバーを設定します。
- 一意のサーバーIDを設定します。
- バイナリログを有効にします。
MariaDB構成ファイルを開き、次の行を編集します。
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
スレーブ:/etc/mysql/mariadb.conf.d/50-server.cnf bind-address = 10.10.8.164
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
MariaDBサービスを再起動します:
sudo systemctl restart mariadb
次のステップは、スレーブサーバーがマスターサーバーに接続するために使用するパラメーターを構成することです。 MariaDBシェルにログインします:
sudo mysql
スレーブスレッドを停止することから始めます:
STOP SLAVE;
次のクエリを実行して、マスター/スレーブレプリケーションを構成します。
CHANGE MASTER TO
MASTER_HOST='10.10.8.12',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;
正しい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)