2012년 5월 13일 일요일

❑ MySQL Replication 설정

1.환경설정(MasterServer)

 # vi /etc/my.cnf
----------------------------------------------------------------------------------------------------------    
[mysqld]

    #log setting    
    log-bin = mysql-bin             // 로그파일명
    max_binlog_size = 100M      // 로그파일크기
    expire_logs_days = 7          // 로그보존주기

    #Replication for master server    
    server-id = 3                      // 서버 식별자(유니크)
    binlog_do_db = test1          // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
    binlog_do_db = test2         // 여러 개의 DB일경우, 계속 추가
----------------------------------------------------------------------------------------------------------

2.mysql 재가동(MasterServer)

 # mysqladmin -u root -p shutdown
 # mysqld_safe &

3.유저추가(MasterServer)

 mysql> GRANT REPLICATION SLAVE ON *.*
        -> TO 'username'@'%' IDENTIFIED BY 'password';
 mysql> FLUSH PRIVILEGES;

4.데이터 백업(MasterServer)

 mysql> FLUSH TABLES WITH READ LOCK;    // DB Write 금지
 # mysqldump -u root -p [DB명] >BackupData.sql
 ※ 리플리케이션대상 DB를 백업함

 mysql> SHOW MASTER STATUS;
 +--------------------+---------+----------------+----------------------+
 | File                     | Position | Binlog_Do_DB | Binlog_Ignore_DB     |
 +--------------------+---------+----------------+----------------------+
 | mysql-bin.000012|     2074 |                     |                             |
 +--------------------+---------+----------------+----------------------+

 1 row in set (0.00 sec)

 mysql> UNLOCK TABLES;                           // DB Write 금지해제

5.데이터 복사(SlaveServer)

 # mysql -u root -p [DB명] < BackupData.sql

6.환경설정(SlaveServer)

 # vi /etc/my.cnf

----------------------------------------------------------------------------------------------------------    
[mysqld]

   #Replication for master server
   server-id = 4                       // 서버 식별자(유니크)
   replicate-do-db = test1        // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
   replicate-do-db = test2        // 여러 개의 DB일경우, 계속 추가
----------------------------------------------------------------------------------------------------------    

7.mysql 재가동(SlaveServer)

 # mysqladmin -u root -p shutdown
 # mysqld_safe &

8.마스터접속설정(SlaveServer)

 mysql> CHANGE MASTER TO 
        -> MASTER_HOST='MasterServerIP',
        -> MASTER_USER='username',             // Master DB에서 Grant로 설정했던 ID
        -> MASTER_PASSWORD='password',
        -> MASTER_PORT=3306,
        -> MASTER_LOG_FILE='MasterDB의 Status에 기록된 파일명',
        -> MASTER_LOG_POS=MasterDB의 Status에 기록된 Position;"

9.리플리케이션시작

 mysql> START slave;

10.에러 유무 확인(MasterServer)

 mysql> SHOW MASTER STATUS\G
 *************************** 1. row ***************************
                          File: mysql-bin.000013
                   Position: 107
           Binlog_Do_DB:
      Binlog_Ignore_DB:
 1 row in set (0.00 sec)

11.에러 유무 확인(SlaverServer)

 mysql>  SHOW SLAVE STATUS\G
 *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.0.3
                      Master_User: repl
                      Master_Port: 3306
                  Connect_Retry: 60
                Master_Log_File: mysql-bin.000013
       Read_Master_Log_Pos: 107
                   Relay_Log_File: SlaveDB1-relay-bin.000006
                  Relay_Log_Pos: 253
       Relay_Master_Log_File: mysql-bin.000013
               Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                        ・・・・・・・
                        ・・・・・・・
                Master_Server_Id: 3
  1 row in set (0.00 sec)


❑ MySQL Replication 종류

1.Single Master Replication


2.Chained Master Replication


※ Chained Master Replication경우, 3번항목부터 11번항목까지 SlaveDB3과 SlaveDB4에서 설정할 필요가 있다. 이 때, Slave이자 Master가 되는 SlaveDB3에는 반드시 log-save-update옵션이 설정되어 있어야 한다.
(log-save-update 옵션이 설정되어 있지 않을 경우, SlaveDB4가 갱신되지 않는다.)
                                           
※ 장애발생 시, 특정 Slave를 Master(Master전용)로 변경하는 경우, log-save-update 옵션이 설정되어 있어선 안된다. 설정되어 있는 상태에서 Slave에서 Master로 변경하게 되면 다른 서버(변경후의 Slave)에 이전 Master에서 받았던 업데이트를 다시 하게 된다.
                                           
※ Backup용 Slave가 존재하면 다음과 같은 명령어로 온라인백업이 가능하다.
Backup용 Slave서버에서 백업실시
# mysqldump -u user -p --delete-master-logs > xxxxxx.sql
(Backup이 진행되는 동안 락으로 인해 Backup용 Slave서버에 데이터 입력이 안됨)




댓글 없음:

댓글 쓰기