MariaDBは、無料のオープンソースリレーショナルデータベース管理システムであり、最も人気のあるオプションの1つです。レプリケーションは、あるマスターデータベースサーバーから別のスレーブデータベースサーバーにデータをコピーするプロセスです。マスター/スレーブトポロジでは、1つのサーバーがマスターとして機能し、他のサーバーがスレーブとして機能します。マスタースレーブレプリケーションでは、データは一方向にのみレプリケートされます。スレーブサーバー上のデータを変更した場合、そのデータはマスターサーバーに複製されません。マスターサーバーがダウンした場合でも、スレーブサーバーからデータを回復できます。
MariaDBマスタースレーブレプリケーションは、いくつかの目的に使用できます。これらのいくつかを以下に示します:
- スケーラビリティと高可用性
- バックアップ
- 分析
- 負荷分散
- データベースパフォーマンスの向上
- フェイルオーバーの軽減
- データセキュリティ
このチュートリアルでは、Ubuntu18.04サーバーでMariaDBマスタースレーブレプリケーションを設定する方法を示します。
前提条件
- Atlantic.Netクラウドプラットフォーム上の2つの新しいUbuntu18.04VPS。
- 両方のサーバーで構成された静的ルートパスワード。
ステップ1–Atlantic.Netクラウドサーバーを作成する
まず、Atlantic.Netクラウドサーバーにログインします。 2GB以上のRAMを搭載したオペレーティングシステムとしてUbuntu18.04を選択して、新しいサーバーを作成します。 SSH経由でクラウドサーバーに接続し、ページの上部で強調表示されているクレデンシャルを使用してログインします。
Ubuntu 18.04サーバーにログインしたら、次のコマンドを実行して、ベースシステムを最新の利用可能なパッケージで更新します。
apt-get update -y
ステップ2–両方のサーバーにMariaDBをインストールする
まず、両方のサーバーにMariaDBをインストールする必要があります。次のコマンドを実行してインストールできます:
apt-get install mariadb-server mariadb-client -y
MariaDBをインストールした後、次のコマンドを実行してMariaDBのインストールを保護します。
mysql_secure_installation
以下に示すように、すべての質問に答えてください。
Enter current password for root (enter for none): Press Enter Set root password? [Y/n] Y New password: Re-enter new password: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
この時点で、両方のMariaDBサーバーをインストールして保護しました。
ステップ3–マスターサーバーの構成
次に、マスターサーバーでバイナリログとレプリケーションを有効にする必要があります。これを行うには、お好みのテキストエディタでファイル/etc/mysql/mariadb.conf.d/50-server.cnfを開きます。
nano /etc/mysql/mariadb.conf.d/50-server.cnf
行bind-addressを見つけ、値を0.0.0.0に変更して、インバウンド接続を許可します。
bind-address = 0.0.0.0
次に、ファイルの最後に次の行を追加します。
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
終了したら、ファイルを保存して閉じます。次に、MariaDBサービスを再起動して、変更を実装します。
systemctl restart mariadb
次に、レプリケーションユーザーを作成する必要があります。スレーブサーバーはこのユーザーを使用してマスターサーバーにログインし、バイナリログを要求します。
まず、次のコマンドを使用してMariaDBシェルにログインします。
mysql -u root -p
プロンプトが表示されたらrootパスワードを入力し、次のコマンドでユーザーを作成します。
CREATE USER 'replication'@'%' identified by 'your-password';
次に、次のコマンドを使用して、このユーザーにレプリケーションスレーブ特権を付与します。
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
次に、次のコマンドを使用して特権をフラッシュします。
FLUSH PRIVILEGES;
次に、次のコマンドを使用してマスターサーバーのステータスを確認します。
show master status;
次の出力が得られるはずです:
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 313 | | | +------------------+----------+--------------+------------------+
次に、次のコマンドを使用してMariaDBシェルを終了します。
EXIT;
注 :ファイルを覚えておいてください および位置 上記の出力からの詳細。スレーブサーバーを構成するときにこれらの値が必要になります。
ステップ4–スレーブサーバーを構成する
次に、スレーブサーバーにログインし、ファイル/etc/mysql/mariadb.conf.d/50-server.cnf:
を開きます。nano /etc/mysql/mariadb.conf.d/50-server.cnf
行bind-addressを見つけて、以下に示すように値を0.0.0.0に変更します。
bind-address = 0.0.0.0
次に、ファイルの最後に次の行を追加します。
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
終了したら、ファイルを保存して閉じます。次に、MariaDBサービスを再起動して、変更を実装します。
systemctl restart mariadb
次に、次のコマンドを使用してMariaDBシェルにログインします。
mysql -u root -p
プロンプトが表示されたらrootパスワードを入力し、次に示すようにスレーブスレッドを停止します。
stop slave;
次に、次のコマンドを実行して、マスターを複製するようにスレーブを設定します。
CHANGE MASTER TO MASTER_HOST = 'your-master-host-ip', MASTER_USER = 'replication', MASTER_PASSWORD = 'your-password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 313;
次に、スレーブスレッドを開始し、以下に示すようにMariaDBシェルを終了します。
start slave; exit;
注 :上記のコマンドを修正して、前の手順で作成したマスターホストのIPアドレスとパスワードを使用します。マスターサーバーから取得したログファイル名と位置の値を使用してください。
ステップ5–データベースレプリケーションのテスト
この時点で、マスター/スレーブレプリケーションを構成しました。次に、マスターからスレーブへのレプリケーションをテストします。
マスターサーバーで、次のコマンドを使用してMariaDBシェルにログインします。
mysql -u root -p
プロンプトが表示されたらrootパスワードを入力し、次に示すようにmydbという名前のデータベースを作成します。
create database mydb;
次に、mydbデータベース内に「products」という名前のテーブルを作成します。
use mydb; CREATE TABLE products(product_id INT NOT NULL AUTO_INCREMENT,product_name VARCHAR(100) NOT NULL,product_manufacturer VARCHAR(40) NOT NULL,submission_date DATE,PRIMARY KEY ( product_id ));
次に、次のコマンドを実行してテーブルを確認します。
SHOW TABLES;
出力:
+----------------+ | Tables_in_mydb | +----------------+ | products | +----------------+
スレーブサーバーで、次のコマンドを使用してMariaDBシェルにログインします。
mysql -u root -p
プロンプトが表示されたらrootパスワードを入力し、スレーブのステータスを確認します。
SHOW SLAVE STATUS \G
次の出力が表示されます。
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: your-master-host-ip Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 721 Relay_Log_File: mysql-relay-bin.000002 Relay_Log_Pos: 945 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes
次に、次のコマンドを実行して、データベースが複製されているかどうかを確認します。
show databases;
マスターサーバー上に作成したmydbデータベースが表示されます。
+--------------------+ | Database | +--------------------+ | information_schema | | mydb | | mysql | | performance_schema | +--------------------+
次に、マスターサーバーで作成した製品テーブルを確認します。
MariaDB [(none)]> use mydb; MariaDB [mydb]> show tables;
次の出力に製品テーブルが表示されます。
+----------------+ | Tables_in_mydb | +----------------+ | products | +----------------+
おめでとう! MariaDBマスタースレーブレプリケーションは期待どおりに機能しています。これで、障害が発生した場合にデータベースを簡単に回復できます。 Atlantic.NetのVPSホスティングパッケージを使用して、MariaDBマスタースレーブレプリケーションを今すぐ始めましょう。