>  기사  >  데이터 베이스  >  MySQL의 마스터-슬레이브 복제를 사용하여 읽기-쓰기 분리 아키텍처를 구현하는 방법

MySQL의 마스터-슬레이브 복제를 사용하여 읽기-쓰기 분리 아키텍처를 구현하는 방법

WBOY
WBOY원래의
2023-08-02 09:21:29907검색

MySQL의 마스터-슬레이브 복제를 사용하여 읽기-쓰기 분리 아키텍처를 구현하는 방법

기존 웹 애플리케이션에서 읽기 및 쓰기 작업은 일반적으로 동일한 데이터베이스 서버에 연결됩니다. 애플리케이션이 개발되고 액세스 볼륨이 증가함에 따라 이 아키텍처는 쉽게 데이터베이스 성능 병목 현상을 일으킬 수 있습니다. 이 문제를 해결하기 위해 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

    다음 두 매개 변수의 값이 "YES"인지 확인하세요.

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

    오류가 발생하면 복제 구성과 데이터베이스 연결이 올바르게 설정되었는지 확인해야 합니다.

  4. 읽기-쓰기 분리 달성
    마스터-슬레이브 복제가 성공적으로 구성되면 읽기-쓰기 분리가 가능합니다. 애플리케이션에서는 읽기 작업을 위해 슬레이브 데이터베이스가 연결되고 쓰기 작업을 위해 마스터 데이터베이스가 연결됩니다. 이를 통해 데이터베이스 리소스를 효과적으로 활용하고 시스템 성능과 안정성을 향상시킬 수 있습니다.

다음은 읽기-쓰기 분리 작업을 완료하기 위해 마스터-슬레이브 데이터베이스를 연결하는 방법을 보여주기 위해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.