sql >> データベース >  >> RDS >> Mysql

マスター-マスターMySQLデータベースレプリケーションの構成

    MySQLマスターマスターレプリケーションとは何ですか?

    MySQLマスター-マスターレプリケーションは、アクティブなWebサイトの速度と冗長性を追加します。レプリケーションでは、2つの別々のMySQLサーバーがクラスターとして機能します。データベースクラスタリングは、高可用性Webサイト構成に特に役立ちます。 2つの別々のLinodeを使用して、それぞれがプライベートIPv4アドレスを持つデータベースレプリケーションを構成します。

    このガイドは、root以外のユーザーを対象としています。昇格された特権を必要とするコマンドには、接頭辞としてsudoが付けられます 。 sudoに慣れていない場合 コマンドを実行すると、ユーザーとグループのガイドを確認できます。

    このガイドは、Debian 9、Ubuntu 18.04、およびUbuntu20.04を対象としています。

    以下の手順に従って、システムにインストールされているMySQLのバージョンがわからない場合は、次のコマンドを入力します。

    mysql --version
    

    MySQLのインストール

    1. 次のコマンドを使用して、各LinodeにMySQLをインストールします。

      sudo apt-get update
      sudo apt-get upgrade -y
      sudo apt-get install mysql-server mysql-client
      
    2. MySQLセキュアインストールコマンドを実行します。ルートパスワードを作成するように求められます。すべての質問に対して[はい]を選択することをお勧めします:

      mysql_secure_installation
      

    MySQLの構成を編集

    1. /etc/mysql/my.cnfを編集します 各Linodeのファイル。次の値を追加または変更します。

      サーバー1:

      ファイル:/ etc / mysql / my.cnf
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      
      [mysqld]
      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
      expire_logs_days    = 10
      max_binlog_size     = 100M
      log_replica_updates = 1
      auto-increment-increment = 2
      auto-increment-offset = 1
      注 MySQL 8.0.25以前を使用している場合は、log_replica_updatesを置き換えます log_slave_updatesを使用 (サーバー1と2の両方内)。詳細については、MySQLのドキュメントを参照してください。

      サーバー2:

      ファイル:/ etc / mysql / my.cnf
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      
      [mysqld]
      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
      expire_logs_days    = 10
      max_binlog_size     = 100M
      log_replica_updates = 1
      auto-increment-increment = 2
      auto-increment-offset = 2
      注 MySQL 8.0.25以前を使用している場合は、log_replica_updatesを置き換えます log_slave_updatesを使用 (サーバー1と2の両方内)。詳細については、MySQLのドキュメントを参照してください。
    2. bind-addressを編集します LinodeごとにプライベートIPアドレスを使用するための構成。

      ファイル:/ etc / mysql / my.cnf
      1
      
      bind-address    = x.x.x.x
    3. 完了したら、MySQLアプリケーションを再起動します。

      sudo systemctl restart mysql
      

    レプリケーションユーザーの作成

    1. 各LinodeでMySQLにログインします:

      mysql -u root -p
      
    2. 各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';
      
    3. 次のコマンドを実行して、構成をテストします。反対側のLinodeのプライベートIPアドレスを使用します:

      mysql -u replication -p -h x.x.x.x -P 3306
      

      このコマンドは、リモートサーバーのMySQLインスタンスに接続する必要があります。

    データベースレプリケーションの構成

    1. サーバー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. サーバー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;
      
    3. サーバー2で、マスターステータスを照会します。もう一度、ファイルと位置の値に注意してください。

      SHOW MASTER STATUS;
      
    4. 手順2と同様のコマンドを使用して、サーバー1でレプリカデータベースのステータスを設定します。コマンドを入力するときは、サーバー2のIPアドレスと、前の手順で収集したファイルと位置の値を使用します。

    5. データベースを作成して行を挿入してテストします:

      サーバー1:

      create database test;
      create table test.flowers (`id` varchar(10));
      

      サーバー2:

      show tables in test;
      

    照会すると、サーバー2に複製されたサーバー1のテーブルが表示されます。おめでとうございます。これでMySQLマスターマスタークラスターができました!

    詳細情報

    このトピックの詳細については、次のリソースを参照してください。これらは有用であることを期待して提供されていますが、外部でホストされている資料の正確性や適時性を保証することはできません。

    • MySQLリファレンスマニュアル

    1. ビッグデータアプリケーション、SQLまたはNoSQLにとって何が良いですか?

    2. SQLServerレプリケーションのセットアップと構成

    3. 「SQLServerがコンポーネント「アドホック分散クエリ」のステートメント「OpenRowset/OpenDatasource」へのアクセスをブロックした」を修正

    4. mysql_real_escape_string()はSQLインジェクションから完全に保護しますか?