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 | 0 | +---------------+-------+ 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 |