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