CentOS/RHEL 7 および Debian 8/9 で MariaDB (マスター/スレーブ) レプリケーションをセットアップする方法
一部の IT 担当者は、「データベース レプリケーション」というフレーズを聞いたとしても、ハードウェア障害やデータ破損が発生した場合のデータ損失を避けるために、同じ情報の複数のコピーを保持する必要性を連想することがよくあります。それはある程度真実ですが、データベースのレプリケーションには、データベースのバックアップとデータの可用性という一般的な概念よりもはるかに多くの意味があります。
マスター/スレーブ設定におけるデータベース レプリケーションのその他の利点としては、次のものが挙げられます。
- バックアップは、マスターでの書き込み操作に影響を与えることなく (また影響を受けずに) スレーブ サーバー上で実行できます。
- リソースを大量に消費する操作 (データ分析など) は、マスターのパフォーマンスに影響を与えることなく、スレーブ上で実行できます。
この記事では、MariaDB 10.1 でマスター/スレーブ レプリケーションを設定する方法について説明します。クラシック レプリケーションとは対照的に、MariaDB はv10.0 でグローバル トランザクション ID (GTID) の概念を導入し、スレーブを次のように変更できます。別のマスターへの接続と複製が簡単に行えます。さらに、スレーブの状態はクラッシュセーフな方法で記録されます (状態の更新は、データの更新と同じトランザクションで行われます)。
CentOS/RHEL 6 での MySQL レプリケーションを探している場合は、このガイド「CentOS/RHEL 6 での MySQL (マスター/スレーブ) レプリケーションのセットアップ」に従ってください。
CentOS/RHEL 7 および Debian 8/9 への MariaDB 10.1 のインストール
テスト環境は次のマシンで構成されています (両方ともCentOS 7)。
Master: 192.168.0.18
Slave: 192.168.0.19
MariaDB の最新バージョンをインストールするには、そのリポジトリをサーバーに追加する必要があります。 MariaDB の古いバージョン (5.5 など) を使用している場合は、以下の記事を使用して最新の 10.1 バージョンにアップグレードすることを検討してください。
- MariaDB 5.5 から MariaDB 10.1 へのアップグレード
CentOS/RHELの場合
/etc/yum.repos.d 内に MariaDB.repo
という名前のファイルを作成し、マスターとスレーブ<の両方に次の内容を含めます。 システム:
MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
ファイルを保存し、yum を使用して両方のサーバーに MariaDB をインストールします。
yum update && yum install MariaDB-server MariaDB-client
Debian/Ubuntu の場合
パッケージと MariaDB リポジトリを認証するためのキーを追加します。
apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'
注: 上の強調表示された行のディストリビューションの名前とコード名を置き換えます。
apt-get コマンドを使用してインストールします。
apt-get update
apt-get install mariadb-server
MariaDB をインストールしたら、マスターとスレーブの両方で mysql_secure_installation
プロシージャを実行します。マスター マシンにサンプル テスト データベースをセットアップしましょう。
マスター上でのサンプル MySQL データベースのセットアップ
次に、https://github.com/datacharmer/test_db の Employees
データベースをマスター サーバーにセットアップします (4 のデータセットを提供します)。 6 つのテーブルにまたがる強力な > 百万件のレコード)を、2 つの簡単な手順で実行できます。
リポジトリのクローンを作成し、それを使用してサンプル データベースを MariaDB インストールにインポートします。
git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql
マスターでの MySQL サーバーの構成
マスターを構成するには、次の手順に従います。
ステップ 1: /etc/my.cnf
ファイルを編集します。 [mysqld]
セクションの下に、次の 4 行を追加します。
log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18
そして MariaDB を再起動します。
systemctl restart mariadb
ステップ 2: MariaDB サーバーに root としてログオンし、ユーザー スレーブを作成して、必要な権限を割り当てます。
MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;
最後の コマンド (SHOW MASTER STATUS) は、バイナリ ログ内の現在位置 (スレーブが複製を開始する正確な位置を示す正確な座標) を返します。
ステップ 3: MariaDB プロンプトを (exit;
で) 終了し、次のコマンドを使用して従業員データベースのスナップショットを取得します。 Enter を押すと、以前に mysql_secure_installation
で設定した root のパスワードを入力するように求められます。
mysqldump -u root -p employees > employees-dump.sql
ダンプが完了したら、データベース サーバーに再度接続してテーブルのロックを解除し、終了します。
MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;
ステップ 4: ダンプをスレーブにコピーします。
scp employees-dump.sql [email :/root/
ステップ 5: mysql_upgrade
プロシージャを実行してシステム テーブルをアップグレードします (MariaDB root パスワードの入力を求められます)。
mysql_upgrade -u root -p
ステップ 6: データベース サービスがファイアウォールを通過できるようにします。
firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload
次に、スレーブを設定しましょう。
スレーブでの MySQL サーバーの構成
スレーブを構成するには、次の手順に従います。
ステップ 1: レプリケーション タスクを実行するアカウントを作成します。次のコマンドを使用してローカルの MariaDB サーバーに接続します。
mysql -u root –p
先ほど設定したパスワードを入力します。
ステップ 2: データベース サーバーに接続したら、ユーザーと空のデータベースを作成し、権限を付与します。
MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
ステップ 3: MariaDB プロンプトを終了し、マスター サーバーで作成されたダンプをロードします。
mysql -u root -p employees < employees-dump.sql
ステップ 4: /etc/my.cnf
ファイルを編集して、[mysqld]< の下のスレーブにサーバーIDを割り当てます。
セクション。マスターでは 1 を使用したため、1 とは異なる整数である必要があることに注意してください。
server_id=2
replicate-do-db=employees
データベースサーバーを再起動します。
systemctl restart mariadb
ステップ 5: mysql_upgrade
プロシージャを実行してシステム テーブルをアップグレードします (MariaDB root パスワードの入力を求められます)。
mysql_upgrade -u root -p
ステップ 6: ダンプがスレーブにインポートされたら、ほんの数ステップでレプリケーションを開始できます。データベースにログオンし、MariaDB プロンプトで次のコマンドを実行します。 MASTER_LOG_FILE
変数と MASTER_LOG_POS
変数に特に注意してください。これらは、「マスターの構成」のステップ 2 の SHOW MASTER STATUS によって返される値と一致する必要があります。その上。
MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='192.168.0.18',
MASTER_USER='slave',
MASTER_PASSWORD='SlavePassword',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=314,
MASTER_CONNECT_RETRY=10,
MASTER_USE_GTID=current_pos;
ステップ 7: スレーブを起動し、MariaDB プロンプトを終了せずにステータスを確認します。
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;
これは今必要というわけではありませんが、次のようにしてスレーブを停止できることに注意してください。
MariaDB [(none)]> STOP SLAVE;
SHOW SLAVE STATUS\G;
コマンドがエラーを返した場合。これらのエラーをトラブルシューティングに使用し、START SLAVE;
を実行して再度テストします。
MySQL/MariaDB データベース レプリケーションのテスト
マスター サーバーの employees テーブルにレコードを追加しましょう。
MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');
次に、この変更がスレーブにレプリケートされたことを確認します。
MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;
ご覧のとおり、レプリケーションはマスターからスレーブまで正しく機能しています。
まとめ
この記事では、CentOS/RHEL 7 および Debian 8/9 に MariaDB の最新バージョンをインストールする方法を説明し、GTID を使用してマスター/スレーブ レプリケーションを設定する方法について説明しました。詳細については、MariaDB レプリケーション ガイドを参照してください。ご質問やコメントがある場合は、以下のフォームを使用してお気軽にお問い合わせください。