ホームページ  >  記事  >  データベース  >  MySQL のマスター/スレーブ レプリケーションを使用して読み取り/書き込み分離アーキテクチャを実装する方法

MySQL のマスター/スレーブ レプリケーションを使用して読み取り/書き込み分離アーキテクチャを実装する方法

WBOY
WBOYオリジナル
2023-08-02 09:21:29866ブラウズ

MySQL のマスター/スレーブ レプリケーションを使用して読み取り/書き込み分離アーキテクチャを実装する方法

従来の Web アプリケーションでは、通常、読み取り操作と書き込み操作は同じデータベース サーバーに接続されます。アプリケーションが開発され、アクセス量が増加すると、このアーキテクチャはデータベースのパフォーマンスのボトルネックを引き起こしやすくなります。この問題を解決するには、MySQL のマスター/スレーブ レプリケーションを使用して、読み取り/書き込み分離アーキテクチャを実装できます。この記事では、MySQL のマスター/スレーブ レプリケーションを使用して読み取りと書き込みの分離を実現する方法を紹介し、対応するコード例を示します。

  1. 環境の準備
    まず、サーバーに MySQL がインストールされていること、およびマスター/スレーブ データベースが正常に通信できることを確認します。 MySQL がまだインストールされていない場合は、公式ドキュメントに従ってインストールして設定してください。
  2. メイン データベースの設定
    メイン データベースで次の設定を行います。

(1) メイン データベースの設定ファイル my.cnf を開き、次の設定を次の場所に追加します。最後:

# 设置为主数据库
server-id=1
log-bin=mysql-bin

(2) メイン データベースを再起動します:

$ sudo service mysql restart
  1. スレーブ データベースを設定します
    スレーブ データベースで以下を設定します:

(1) スレーブ データベースを開きます。 データベース構成ファイル my.cnf の最後に次の構成を追加します。

# 设置为从数据库
server-id=2
relay-log=mysql-relay-bin

(2) スレーブ データベースを再起動します。

$ sudo service mysql restart
  1. ##マスター データベースにレプリケーション ユーザーを作成する

    コピー用のユーザーを作成し、対応する権限を付与します。次のコマンドを実行します:

    mysql> CREATE USER 'replication'@'%' IDENTIFIED BY 'password';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
    mysql> FLUSH PRIVILEGES;

  2. マスター/スレーブ レプリケーションの開始

    スレーブ データベースで次のコマンドを実行して、マスター/スレーブ レプリケーションを開始します:

    mysql> CHANGE MASTER TO MASTER_HOST='主数据库IP', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0;
    mysql> START SLAVE;

  3. マスター/スレーブ レプリケーションの確認

    スレーブ データベースで次のコマンドを実行して、マスター/スレーブ レプリケーションのステータスを表示します:

    mysql> SHOW SLAVE STATUS G

    次の 2 つのパラメーターの値が " YES":

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    If エラーが発生した場合は、レプリケーション構成とデータベース接続が正しく設定されているかどうかを確認する必要があります。

  4. 読み取りと書き込みの分離を実現する
  5. マスター/スレーブ レプリケーションが正常に構成されたら、読み取りと書き込みの分離を実現できます。アプリケーションでは、スレーブ データベースは読み取り操作のために接続され、マスター データベースは書き込み操作のために接続されます。これにより、データベース リソースが効果的に利用され、システムのパフォーマンスと安定性が向上します。
以下は、マスター/スレーブ データベースを接続して読み取り/書き込み分離操作を完了する方法を示す、Java 言語を使用したサンプル コードです。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ReadWriteSeparationExample {
    public static void main(String[] args) {
        // 读操作连接从数据库
        Connection readConn = null;
        String readUrl = "jdbc:mysql://从数据库IP:端口/数据库名";
        String readUser = "用户名";
        String readPassword = "密码";
        
        try {
            readConn = DriverManager.getConnection(readUrl, readUser, readPassword);
            Statement readStmt = readConn.createStatement();
            ResultSet readResult = readStmt.executeQuery("SELECT * FROM 表名");
            
            while (readResult.next()) {
                // 处理查询结果
            }
            
            readResult.close();
            readStmt.close();
            readConn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        // 写操作连接主数据库
        Connection writeConn = null;
        String writeUrl = "jdbc:mysql://主数据库IP:端口/数据库名";
        String writeUser = "用户名";
        String writePassword = "密码";
        
        try {
            writeConn = DriverManager.getConnection(writeUrl, writeUser, writePassword);
            Statement writeStmt = writeConn.createStatement();
            writeStmt.execute("INSERT INTO 表名 VALUES(1, '数据')");
            
            writeStmt.close();
            writeConn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

上記は、読み取りと書き込みの分離を実現するための MySQL のマスター/スレーブ レプリケーション アーキテクチャの手順とコード例。このアーキテクチャにより、読み取り操作をスレーブ データベースに割り当てることができ、システムのパフォーマンスと安定性が効果的に向上します。お役に立てれば!

以上がMySQL のマスター/スレーブ レプリケーションを使用して読み取り/書き込み分離アーキテクチャを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。