MYSQL

[MYSQL] Replication을 이용한 실시간 동기화방법


[MYSQL] Replication을 이용한 실시간 동기화방법


  2021-10-09  535 View 공개

설치환경



마스터서버

192.168.88.138


슬레이브서버

192.168.88.139


Centos 6.9

동일 mysql 설치



마스터서버 설정


# vi /etc/my.cnf

[mysqld]  
log-bin  
server-id=1

슬레이브서버 설정

# vi /etc/my.cnf

[mysqld] 
master-host=192.168.88.138  
// 마스터서버 아이피
master-user=test  
// 리플리케이션계정 
master-password=testforever 
// 리플리케이션계정 비밀번호
master-port=3306  
// 마스터서버 mysql포트
server-id=2     
// server-id 지정

설정부분에서 중요한 것은 접속계정이다. 슬레이브에서 리플리케이션 계정을 생성해주면 마스터서버에서 다음과 같이 계정설정을 해주어야한다.
grant replication slave on *.* to 'test'@'%' identified by 'testforever';



설정완료 후 마스터서버와 슬레이브서버의 mysql를 재시작한다.

다수의 슬레이브서버를 구축하고 싶으시면 server-id를 늘려서 설정가능하다. 단 동일 server-id설정은 안됨.




마스터서버와 슬레이브서버의 데이터동기화 

mysql서비스를 중지시키고 마스터서버와 슬레이브서버의 데이터를 동기화 시켜줍니다. (rsync,mysqldump 등)




동기화서비스 실행

모든 설정이 완료되었으면 mysql 서비스를 올리고 테스트를 진행한다.


마스터서버 (mysql)
mysql> show master status;
+-------------------+----------+--------------+------------------+ 
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
+-------------------+----------+--------------+------------------+ 
| mysqld-bin.000005 |      551 |              |                  | 
+-------------------+----------+--------------+------------------+



슬레이브서버(mysql)
mysql> show slave status\G

*************************** 1. row *************************** 
               Slave_IO_State: Waiting for master to send event 
                  Master_Host: 192.168.88.138 
                  Master_User: test 
                  Master_Port: 3306 
                Connect_Retry: 60 
              Master_Log_File: mysqld-bin.000005 
          Read_Master_Log_Pos: 551 
               Relay_Log_File: mysqld-relay-bin.000010 
                Relay_Log_Pos: 252 
        Relay_Master_Log_File: mysqld-bin.000005 

             Slave_IO_Running: Yes 
            Slave_SQL_Running: Yes 


Slave Running이 yes가 되어있는지 확인한다.

--------------------- 중략 -------------------------




동기화 확인

마스터서버에서 테스트용 DB를 생성하여 정상적으로 슬레이브서버에 동기화되는지 확인한다.




- REPLICATION 이 지원하지 않는 것 - 

Mysql Replication 은 쿼리 단위로의 미러링을 지원한다.
이에 따른 중요 문제가 발생한다.

1. RAND() in updates does not replicate properly. Use RAND 
(some_non_rand_expr) if you are replicating updates with RAND(). You 
can, for example, use UNIX_TIMESTAMP() for the argument to RAND(). 

랜덤 함수에 의해 발생되어지는 자료에 대한 업데이트가 이루어지지 않다.
랜덤 함수가 발생한 필드의 자료는 공란(null)로 입력됩니다.

2. LOAD DATA INFILE will be handled properly as long as the file 
still resides on the master server at the time of update 
propagation. LOAD LOCAL DATA INFILE will be skipped. 

load data infile 에 의한 데이터 입력시 마스터 서버에 파일이 남아 있 
는 상태에서만 가능하다. 이와는 반대로 load local data infile 은 업데 
이트 되지 않는다. Load Local INFILE 문은 Replication이 안된다는 단 
점이 있다.

 REPLICATION 의 장점

mysql 쿼리의 부하분산을 지원한다.
마스터서버에서 UPDATE, INSERT, DELETE 쿼리를 사용하고 슬레이브서버에서  SELECT문을 사용한다면 부하를 분산시킬 수 있다.
마스터서버에서 장애발생 시 슬레이브서버를 통하여 데이터를 거의 유실없이 복구시킬 수 있다.


Tags  #MySql  



🚩 MYSQL 글 모음 (총 37 건)

[macOS] zsh: command not found: mysql 해결 방법

Last Updated : 2023-09-29
#MySql

Mysql DB생성 및 유저등록

Last Updated : 2023-09-29
#Mysql

Mysql 백업 및 복구

Last Updated : 2023-09-29
#MySql

MySql - POD 예제

Last Updated : 2023-09-29
#MySql

데이터베이스에서 작은따옴표(')를 다루는 방법 : SQL 인젝션 예방과 데이터 출력

Last Updated : 2023-09-29
#Mysql

[mySQL] 특정 레코드가 몇 번째인지 알아내는 방법

Last Updated : 2023-09-10
#mySQL #row_number