본문 바로가기

리눅스

DBMS 이중화 - MySQL Replication 설정하기

반응형

<환경>

CentOS Linux release 7.9.2009 (Core)

DB : MariaDB 10.5.9

 

[Master 설정]

1. DB, 계정생성 및 권한 설정 

먼저 복제할 DB 와 해당 DB 관리가 가능한 계정을 생성한다 .

만약 모든 DB 를 복제하기를 원한다면 외부 접근 가능하며 , 모든 DB 에 권한을 가지고 있는 계정이 필요하다 .

root 계정을 이용하면 보안 상 좋지 않으므로 새로 생성하여 사용한다.

 

   1) DB 생성 (repl_db)

        MariaDB [(none)]> CREATE DATABASE repl_db DEFAULT CHARACTER SET utf8;

  2) 계정 생성 (repl)

      MariaDB [(none)]> CREATE USER repl@'%' IDENTIFIED BY 'test123';

 

  3) 권한 부여

      MariaDB [(none)]> GRANT ALL PRIVILEGES ON repl_db.* TO repl@'%' IDENTIFIED BY 'test123';

 

2. 리플리케이션 계정 생성

      MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO allrepl@'%' IDENTIFIED BY 'test456';

3. my.cnf 설정

    # vi /etc/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=1                       //서버 식별 ID 값

binlog-do-db=[리플리케이션 DB명]     // 생략 시 전체 DB 리플리케이션을 하겠다는 의미

위와 같은 설정 추가 or 확인 후 재시작

 

    # systemctl restart mysqld

 

4. MariaDB 접속 후 Master 정보 확인

      MariaDB [(none)]> SHOW MASTER STATUS;



[Slave 설정]

 

1. DB, 계정생성 및 권한 설정 

 1) DB 생성 (repl_db)

        MariaDB [(none)]> CREATE DATABASE repl_db DEFAULT CHARACTER SET utf8;

  2) 계정 생성 (repl)

      MariaDB [(none)]> CREATE USER repl@'%' IDENTIFIED BY 'test123';

 

  3) 권한 부여

      MariaDB [(none)]> GRANT ALL PRIVILEGES ON repl_db.* TO repl@'%' IDENTIFIED BY 'test123';

 

2. my.cnf 설정

# vi /etc/my.cnf

[mysqld]
server-id=2                        // 서버 식별 ID 값, 고유 값
replicate-do-db='[리플리케이션 DB명]' // 생략 시 전체 DB 리플리케이션 하겠다는 의미
slave-skip-errors=all              // 에러코드 발생 시 에러를 skip

위와 같은 설정 추가 or 확인 후 재시작

3. MySQL 복원

     Master DBMSdptj 복제할 DB를 dump하여 복원

 

4. Master 서버로 연결하기 위한 설정

MariaDB [(none)]> change master to
MariaDB [(none)]> master_host='[마스터 IP]',              // Master 서버 IP
MariaDB [(none)]> master_user='allrepl',                 // 리플리케이션 ID
MariaDB [(none)]> master_password='test456',             // 리플리케이션 PW
MariaDB [(none)]> master_log_file='mysql-bin.000007',    // Master Status 로그파일명
MariaDB [(none)]> master_log_pos=342;                   // Master Status에서 position값

※ master_log_file, master_log pos는 Master에서 

      MariaDB [(none)]>  SHOW MASTER STATUS\G;

    # systemctl restart mysqld

 



[MySQL Replication 상태 확인]

 

1. Master 서버 상태

 

    1) 쓰레드 상태보기

 

        MariaDB [(none)]> SHOW PROCESSLIST\G;

Master 서버에서 위 내용과 같이 명령어를 입력하면 Id:6 쓰레드의  Slave서버의 allrepl계정으로 연결되어 있는 것을 확인할 수 있음

 

2. Slave 서버 상태

 

    1) 쓰레드 상태보기

        MariaDB [(none)]> SHOW PROCESSLIST\G;

    2) Slave  상태보기

        MariaDB [(none)]> SHOW SLAVE STATUSs\G;

 



[MySQL Replication 작동 확인]

 

1. Master에서 간단한 테이블 생성

 

        MariaDB [(none)]>USE repl_db;

        MariaDB [repl_db]> CREATE TABLE TEST (
                 -> num int(10) not null,
                 -> name varchar(10) not null
                 -> );

        MariaDB [repl_db]> SHOW TABLES;

 

2. Slave에서 확인

        MariaDB [(none)]>USE repl_db;

        MariaDB [repl_db]> SHOW TABLES;

Master에서 Table 생성 전
Master에서 Table 생성 전