메뉴 닫기

mysql 리플리케이션 설정

mysql 리플리케이션은 두개의 서버의 디비를 일방적 동기화 작업이다.

위와같은 작업을 진행하려면 mysql이 설치된 2개의 서버가 필요하다.

 

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 = 2                      // 서버 식별자(유니크)
    binlog_do_db = smile1          // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
    binlog_do_db = smile2         // 여러 개의 DB일경우, 계속 추가
———————————————————————————————————-
/etc/my.cnf 파일에 위와같이 수정을 해준다. (없을경우 추가해준다.)

2.mysql 재가동(MasterServer)

 
#/etc/init.d/mysqld restart 를 통해 재시작을 해준다.

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.000009|     21780 |                     |                             |
 +——————–+———+—————-+———————-+
 
 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 = 3                       // 서버 식별자(유니크)
   replicate-do-db = smile1        // 리플리케이션DB명(생략시엔 전체DB를 리플리케이션함)
   replicate-do-db = smile2        // 여러 개의 DB일경우, 계속 추가
———————————————————————————————————-    

7.mysql 재가동(SlaveServer)

# /etc/init.d/mysqld restart

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.000009
                   Position: 21780
           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: 115.68.74.248
                      Master_User: young
                      Master_Port: 3306
                  Connect_Retry: 60
                Master_Log_File: mysql-bin.000009
       Read_Master_Log_Pos: 21780
                   Relay_Log_File: SlaveDB1-relay-bin.000002
                  Relay_Log_Pos: 21780
       Relay_Master_Log_File: mysql-bin.000009
               Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                        ・・・・・・・
                        ・・・・・・・
                Master_Server_Id: 2
  1 row in set (0.00 sec)
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x