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

RHEL、Rocky、AlmaLinuxでMySQLレプリケーションを設定する方法

    データレプリケーションは、データの可用性を向上させ、アプリケーションの信頼性とパフォーマンスを向上させるために、複数のサーバー間でデータをコピーするプロセスです。 MySQL レプリケーションでは、データの一貫性を確保し、バックアップと冗長性を提供するために、データがデータベースからマスターサーバーから他のノードにリアルタイムでコピーされます。

    このガイドでは、 MySQLを設定する方法を示します (マスタースレーブ CentOSなどのRHELベースのディストリビューションでのレプリケーション 、 Fedora Rocky Linux、 およびAlmaLinux

    MySQLレプリケーションのセットアップ

    それで、これが私たちの MySQL です レプリケーションラボのセットアップ。

    MySQL Master - 10.128.0.14
    MySQL Slave - 10.128.15.211
    

    始めましょう…

    ステップ1:マスターサーバーとスレーブサーバーにMySQLをインストールする

    まず、 MySQLをインストールします。 両方のマスターのデータベース およびスレーブ サーバー。

    $ sudo dnf install @mysql
    

    インストールが完了したら、データベースサーバーを起動するように指示します。

    $ sudo systemctl start mysqld
    

    次に、システムの起動時または再起動時に起動できるようにします。

    $ sudo systemctl enable mysqld
    

    その後、 MySQL データベースサーバーは次のように実行されています:

    $ sudo systemctl status mysqld
    

    ステップ2:マスターサーバーとスレーブサーバーでMySQLを保護する

    次のステップは、 MySQLを保護することです 両方のマスターのデータベース およびスレーブ サーバー。これは、デフォルト設定が安全でなく、ハッカーが簡単に悪用できる抜け穴があるためです。

    したがって、MySQLを強化するには、次のコマンドを実行します。

    $ sudo mysql_secure_installation
    

    まず、 MySQLを設定する必要があります ルートパスワード。強力なルートパスワードを必ず入力してください。できれば、大文字、小文字、特殊文字、数字を組み合わせた8文字以上を使用してください。

    残りのプロンプトについては、'Y'と入力します データベースサーバーを推奨設定に微調整します。

    MySQLのインストールと強化が完了したら マスターノードとスレーブノードで、次はマスターノードを構成します。

    ステップ3:マスターノード(サーバー)を構成する

    次のステップは、マスターを構成することです ノードを作成し、スレーブを付与します それへのノードアクセス。まず、 mysql-server.cnfを編集する必要があります 構成ファイル。

    $ sudo vim /etc/my.cnf.d/mysql-server.cnf
    

    [mysqld]の下に次の行を追加します セクション。

    bind-address	 = 10.128.0.14
    server-id 	 = 1
    log_bin		 = mysql-bin
    

    完了したら、変更を保存して終了します。次に、 MySQLを再起動します サーバー。

    $ sudo sysemctl restart mysqld
    

    次に、 MySQLにログインします シェル。

    $ sudo mysql -u root -p
    

    次のコマンドを実行して、レプリケーションのためにマスターとスレーブをバインドするために使用されるデータベースユーザーを作成します。

    mysql> CREATE USER 'replica'@'10.128.15.211' IDENTIFIED BY '[email protected]';
    mysql> GRANT REPLICATION SLAVE ON *.*TO 'replica'@'10.128.15.211';
    

    変更を適用して、 MySQLを終了します サーバー。

    mysql> FLUSH PRIVILEGES;
    mysql> EXIT;
    

    マスターのステータスを確認します。

    mysql> SHOW MASTER STATUS\G
    

    ファイル名と位置をメモします。これは、後でレプリケーション用にスレーブを設定するときに必要になります。この場合、ファイル名はmysql-bin.000001です。 と位置1232

    ステップ4:スレーブノード(サーバー)を構成する

    ここで、スレーブノードに戻ります。もう一度、 mysql-server.cnfを編集します 構成ファイル。

    $ sudo vim /etc/my.cnf.d/mysql-server.cnf
    

    前と同じように、これらの行を[mysqld]の下に貼り付けます セクション。スレーブのIPに対応するようにIPアドレスを変更します。また、別の server-idを割り当てます 。ここでは、 2の値を割り当てています。 。

    bind-address	 = 10.128.15.211
    server-id	 = 2
    log_bin 	 = mysql-bin
    

    変更を保存してファイルを終了します。次に、データベースサーバーを再起動します。

    $ sudo systemctl restart mysqld
    

    スレーブを構成するには マスターノードから複製するノードで、スレーブのMySQLサーバーにログインします。

    $ sudo mysql -u root -p
    

    何よりもまず、レプリケーションスレッドを停止します:

    mysql> STOP SLAVE;
    

    次に、次のコマンドを実行して、マスターからデータベースを複製するようにスレーブノードを構成します。

    mysql> CHANGE MASTER TO
         MASTER_HOST='10.128.0.14' ,
         MASTER_USER='replica' ,
         MASTER_PASSWORD='[email protected]' ,
         MASTER_LOG_FILE='mysql-bin.000001' ,
         MASTER_LOG_POS=1232;
    

    MASTER_LOG_FILEに注意してください およびMASTER_LOG_POS フラグはファイルと位置に対応します マスターからの値 ステップ1の最後のノード。

    MASTER_HOST MASTER_USER、 およびMASTER_PASSWORD マスターIPアドレス、レプリケーションユーザー、レプリケーションユーザーのパスワードにそれぞれ対応します。

    次に、スレーブレプリケーションスレッドを開始します:

    mysql> START SLAVE;
    

    ステップ4:MySQLマスター/スレーブレプリケーションのテスト

    ここで、マスターノードとスレーブノード間のレプリケーションが機能しているかどうかをテストするには、マスターノードのMySQLデータベースサーバーにログインします。

    $ sudo mysql -u root -p
    

    テストデータベースを作成します。ここでは、テストデータベースは Replication_dbと呼ばれています 。

    mysql> CREATE DATABASE replication_db;
    Verify the existence of the database.
    mysql> SHOW DATABASES;
    

    次に、スレーブノードに移動し、MySQLサーバーにログインして、複写_dbを確認します。 データベースが存在します。以下の出力から、データベースが存在することがわかります。これは、マスターからスレーブノードへのレプリケーションが行われたことの確認です。

    mysql> SHOW DATABASES;
    

    以上で、 MySQLを設定する方法のデモンストレーションに成功しました。 マスターノードからスレーブノードにデータベースを複製できるマスタースレーブ複製モデル。


    1. レコードがまだ存在しない場合、レコードを挿入するためのベストプラクティスは何ですか?

    2. SQLiteの日付/時刻関数の有効な時間文字列形式

    3. PHP PDO:文字セット、セット名?

    4. PostgreSQLでのフリーズの管理