MySQLマスターマスターレプリケーションとは何ですか?
MySQLマスター-マスターレプリケーションは、アクティブなWebサイトの速度と冗長性を追加します。レプリケーションでは、2つの別々のMySQLサーバーがクラスターとして機能します。データベースクラスタリングは、高可用性Webサイト構成に特に役立ちます。 2つの別々のLinodeを使用して、それぞれがプライベートIPv4アドレスを持つデータベースレプリケーションを構成します。
注 このガイドは、root以外のユーザーを対象としています。昇格された特権を必要とするコマンドには、接頭辞として
sudo
が付けられます 。sudo
に慣れていない場合 コマンドを実行すると、ユーザーとグループのガイドを確認できます。このガイドは、Debian 9、Ubuntu 18.04、およびUbuntu20.04を対象としています。
以下の手順に従って、システムにインストールされているMySQLのバージョンがわからない場合は、次のコマンドを入力します。
mysql --version
MySQLのインストール
-
次のコマンドを使用して、各LinodeにMySQLをインストールします。
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
MySQLセキュアインストールコマンドを実行します。ルートパスワードを作成するように求められます。すべての質問に対して[はい]を選択することをお勧めします:
mysql_secure_installation
MySQLの構成を編集
-
/etc/mysql/my.cnf
を編集します 各Linodeのファイル。次の値を追加または変更します。サーバー1:
- ファイル:/ etc / mysql / my.cnf
注 MySQL 8.0.25以前を使用している場合は、 log_replica_updates
を置き換えますlog_slave_updates
を使用 (サーバー1と2の両方内)。詳細については、MySQLのドキュメントを参照してください。サーバー2:
- ファイル:/ etc / mysql / my.cnf
注 MySQL 8.0.25以前を使用している場合は、 log_replica_updates
を置き換えますlog_slave_updates
を使用 (サーバー1と2の両方内)。詳細については、MySQLのドキュメントを参照してください。 -
bind-address
を編集します LinodeごとにプライベートIPアドレスを使用するための構成。- ファイル:/ etc / mysql / my.cnf
-
完了したら、MySQLアプリケーションを再起動します。
sudo systemctl restart mysql
レプリケーションユーザーの作成
-
各LinodeでMySQLにログインします:
mysql -u root -p
-
各Linodeでレプリケーションユーザーを設定します。
x.x.x.x
を置き換えます 相手のLinodeのプライベートIPアドレスとpassword
強力なパスワードを使用する場合:MySQL8以降
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
MySQL8より下
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
次のコマンドを実行して、構成をテストします。反対側のLinodeのプライベートIPアドレスを使用します:
mysql -u replication -p -h x.x.x.x -P 3306
このコマンドは、リモートサーバーのMySQLインスタンスに接続する必要があります。
データベースレプリケーションの構成
-
サーバー1でMySQLにログインしているときに、マスターステータスを照会します。
SHOW MASTER STATUS;
表示されるファイルと位置の値に注意してください:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
サーバー2のMySQLプロンプトで、そのデータベースのレプリカ機能を設定します。
x.x.x.x
を置き換えます 最初のサーバーからのプライベートIPを使用します。source_log_file
の値も置き換えます 前の手順のファイル値とsource_log_pos
の値を使用します 位置の値で。MySQL 8.0.22以降:
STOP REPLICA; CHANGE REPLICATION SOURCE TO source_host='x.x.x.x', source_port=3306, source_user='replication', source_password='password', source_log_file='mysql-bin.000001', source_log_pos=106; START REPLICA;
MySQL 8.0.22以前:
STOP SLAVE; CHANGE MASTER TO master_host='x.x.x.x', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=106; START SLAVE;
-
サーバー2で、マスターステータスを照会します。もう一度、ファイルと位置の値に注意してください。
SHOW MASTER STATUS;
-
手順2と同様のコマンドを使用して、サーバー1でレプリカデータベースのステータスを設定します。コマンドを入力するときは、サーバー2のIPアドレスと、前の手順で収集したファイルと位置の値を使用します。
-
データベースを作成して行を挿入してテストします:
サーバー1:
create database test; create table test.flowers (`id` varchar(10));
サーバー2:
show tables in test;
照会すると、サーバー2に複製されたサーバー1のテーブルが表示されます。おめでとうございます。これでMySQLマスターマスタークラスターができました!
詳細情報
このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。
- MySQLリファレンスマニュアル