2018. 6. 18. 15:06

Centos 6.X for windows Mysql Replication 구성

Master Server 구성.


O/S : Centos 6.x

mysql> select version();

+------------+

| version()  |

+------------+

| 5.1.73-log |

+------------+




Slave Server 구성.


O/S : Windows 20012 R2

mysql> select version();

+-----------+

| version() |

+-----------+

| 5.5.27    |

+-----------+




# 위와 같은 구성으로 MySql Replication 구성을 진행한다.



1. Master Server 에서 구성.


# vi /etc/my.cnf


다음 항목을 추가 및 수정한다


 

[client]

default-character-set=utf8

[mysqld]

character-set-server=utf8


skip-external-locking     // skip-locking을 skip-external-locking으로 변경


log-bin=mysql-bin    //주석해제


binlog_format=mixed     //주석해제


// skip-external-locking : external-locking이 활성화되면 아무리 방화벽 포트설정 등이 다 풀려있어도 외부에서 해당 서버에 접속을 할 수 없게됨. mysql에서 skip은 해당 옵션을 disable 로 하겠다는 뜻

 기존의 skip-locking이라는 옵션을 MySQL 버전업이 됨에 따라 바뀐 이름인 skip-external-locking 으로 명시적으로 변경해주는 작업


// log-bin=mysql-bin : 가장 중요한 설정으로, 동기화할 binary log file의 이름. 슬레이브가 업데이트할 카피레코드가 들어있다. 우측이 파일 이름인데 기본 경로는 /var/lib/mysql/mysql-bin으로 시작하는 파일


// binlog_format=mixed : 위 로그 파일을 작성할 형식을 결정. row/statement/mixed 방식이 있다고 함, 기본값인 mixed로 둠


*추가옵션*

binlog_do_db=[디비명]    //슬레이브에게 복제를 허용할 DB. 미기재시 전체 DB 복제

binlog_ignore_db=[디비명]    //여기 적힌 DB를 빼고 나머지 DB의 복제를 허용함



2. Slave Server 에서 구성.


Slave 서버는 Windows 서버이기 때문에 아래의 위치에서 My.ini 파일을 수정한다.


C:\ProgramData\MySQL\MySQL Server 5.5\my.ini



[client]

port=3306

default-character-set=utf8

[mysql]


default-character-set=utf8

skip-external-locking

server-id=2




3. Master 의 데이터 동기화를 위한 백업.

   # mysql -uroot -p --all-databases > alldb.sql


4. Slave 에 백업파일 복원.

# mysql -uroot -p < alldb.sql


5. Master 서버 & Slave 서버 설정하기.


   5-1. Master 에 Slave 서버의 정고 입력해주기.




# mysql -uroot -p mysql


> grant replication slave on *.* to repuser@'10.0.0.2' identified by '1';


> flush privileges;



   5-2. Master 의 정보 확인.


         show master status;


mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000003 |      643 |              |                  |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


빨간 색 숫자를 확인한다.


  5-3 Slave 에 설정 입력.

# mysql -uroot -p mysql


 > change master to 

 

 -> master_host='10.0.0.1', 

 // 마스터의 IP

 -> master_user='repuser'

 // replication 권한을 가진 유저

 -> master_port=3306, 

 // 포트를 변경했다면 이 항목을 명시, 그렇지 않으면 생략가능

 -> master_password='1'

 // repuser의 비밀번호

 -> master_log_file='mysql-bin.XXXXXXX',

 // 위 master status에서 본 binary file의 이름

 -> master_log_pos=XXX 

 // 위 master status에서 본 POS값




6. Slave 에서 start 진행.


 mysql> slave start;

Query OK, 0 rows affected (0.00 sec)




완료.



추가 : 6번과정에서 오류가 발생할경우.


ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO


    -> 위와 같은 오류는 Slave 서버에 입력한 Server-id 의 값이 반영되지 않아서 발생한 오류이다.

        아래의 명령어로 확인후 값을 넣어주고 slave start 를 진행하면 된다.



 mysql> start slave

    -> ;

ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     |   |

+---------------+-------+

1 row in set (0.00 sec)


mysql> set global server_id=2;

Query OK, 0 rows affected (0.00 sec)


mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

1 row in set (0.00 sec)


mysql> start slave;

Query OK, 0 rows affected (0.00 sec)





상태값 확인.


mysql> show slave status\G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.0.0.1

                  Master_User: repuser

                  Master_Port: 3306

                Connect_Retry: 30

              Master_Log_File: mysql-bin.000003

          Read_Master_Log_Pos: 643

               Relay_Log_File: WIN-IPA4BCR338V-relay-bin.000002

                Relay_Log_Pos: 252

        Relay_Master_Log_File: mysql-bin.000003

             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: 643

              Relay_Log_Space: 418

              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)


ERROR:

No query specified