MySQL Replication 구성 방법

Replication 의 간략한 소개

MySQL 데이터를 물리적으로 다른 서버에 복제하는 기술이다.
구성은 1개의 Master Node와 N개의 Slave Node로 이루어지고, 읽기 분산의 목적으로 많이 사용된다.
Replication 구성에서 오직 Master Node에만 쓰기(insert, update, delete, alter…)가 가능하고 읽기(select)는 N개의 slave 서버에서 가능하다.

구성 시나리오

아래와 같이 3대의 MySQL서버가 준비되어 있다고 가정하고 각각의 서버 IP는 아래와 같다.
– MySQL_1(Master 용) : 10.10.10.10
– MySQL_2(Slave 용) : 10.10.10.20
– MySQL_3(Slave 용) : 10.10.10.20

Master Node 작업

  • my.cnf 수정

vi /etc/my.cnf
server-id=1
# mysql 서버 실행시에 --skip-networking 옵션을 주거나,
#설정 파일내에 skip-networking이 있는 경우, 서버는 로컬에서의 유닉스 소켓 접속만을 허용하게 된다. 설정되어 있다면 해제한다.
# skip-networking
service mysqld start
Starting MySQL...
  • MySQL접속해 Replication용으로 사용할 user 생성 및 권한 부여

mysql> CREATE USER repl_user IDENTIFIED BY 'PASSWORD';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY 'PASSWORD';
Query OK, 0 rows affected (0.00 sec)
  • Slave Node 구성을 위한 Master Node binlog 파일명과 log position 확인

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      678 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
  • Slave Node 작업

my.cnf 수정 : Slave Node의 server-id는 Master Node 와 달라야 한다.

vi /etc/my.cnf # 아래와 같이 server-id 수정함
server-id=2
service mysqld start # SLAVE SERVER 구동
Starting MySQL...                                          [  OK  ]
  • Slave Node의 Master 정보 수정

mysql> CHANGE MASTER TO MASTER_HOST='10.10.10.10', MASTER_USER='repl_user', MASTER_PASSWORD='PASSWORD', MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=353;
Query OK, 0 rows affected (0.00 sec)
mysql> SLAVE START;
Query OK, 0 rows affected (0.00 sec)
  • 구성 확인

Slave Node에서 “show slave status” 명령어로 아래와 유사한 내용이 출력되면 구성완료!

mysql> show slave statusG
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.86
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 678
               Relay_Log_File: localhost-relay-bin.000004
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 678
              Relay_Log_Space: 413
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다