글수 13
[ Replication 란 ? ]
여러대의 디비서버가 동일한 데이타를 지속적으로 가지고있을수있는 기능이라 말할수있다.이 기능을 사용하면 실시간 백업이 가능할것이며, DB 서버의 부하 분산도 가능할것이라고 생각한다.
Replication을 이용하면 Master의 데이타와 동일한 데이타를 가진 여러개의 Slave를 만들수있다.
이 기능은 Mysql-3.23.15 부터 Replication 기능이 지원된다고 한다.
Mysql에서는 모든 데이타변동시에 로그를 남기는 기능이있다.
이 기능을 이용한것이 Replication 기능이다.
Slave 서버는 이 로그의 내용을 가지고 자기자신에 UPDATE 수행한다.
그러므로 모든 UPDATE QUERY는 MASTER 에서만 수행되어야하며,SELECT와 같은 단순한 QUERY는 Slave에서 사용하능하다.
아래의 내용은 버전은 mysql-3.23.44 와 mysql-3.23.39 에서의 구현하였다.
[ Replication 구현하기 ]
* 예제로 사용할 데이타베이스명 : soma , 테이블명 : soma
1. master 서버에 replication에 사용될 사용자 추가하기
ex) 'soma' 라는 사용자추가
mysql>grant file on *.* to soma@"%" identified by "패스워드" ;
Query OK, 0 rows affected (0.00 sec)
* mysql-4.x 버전에서는 아래와 같이 추가한다.
GRANT REPLICATION SLAVE ON *.* TO 'soma'@'%' IDENTIFIED BY '패스워드';
mysql>select * from user;
추가된 사용자를 확인할수있다.
2. Replication을 구현할 Slave 서버에 Master 데이타 옮기기
Master 에있는 데이타 파일만 Slave 로 옮기면된다.
/usr/local/mysql/var/soma 라는 파일 밑에있는 모든 파일을 압축을해서 Slave
서버의 해당 디렉토리로 옮겨주면 자동으로 database & table 이 생성된다.
그렇게하면 Slave 서버에도 soma 라는 데이타베이스와 soma 라는 테이블이 생성
된다. 이것으로 두 테이블간의 데이타의 동기화는 이룬것이다.
3. Master 서버에 설정하기
[root@angelsoma]vi /etc/my.cnf 파일을 만든다
[mysqld]
log-bin
server-id=1 -> master 서버와 모든 salve 서버를 통털어 유일한 ID 번호
위의 내용을 설정하고 저장하고 나온다.
4. Slave 서버에 설정하기
[root@slave]vi /etc/my.cnf 파일을 만든다.
[mysqld]
master-host=192.168.0.2 -> master 서버의 IP or Host 명
master-user=soma -> 위에서 추가한 사용자
master-password=abcdefg -> 위에서 지정한 패스워드
master-port=3306 -> mysql 이 사용하는 TCP/IP 포트
server-id=2 -> slave 서버들간의 고유한 ID 번호
log-slave-updates -> slave에서 master를 동기화하는 옵션
5. Mysql 데몬 재 시작하기 - master & slave 서버
master 서버의 데몬을 구동한다.
mysql-3.23.44 버전에서는 mysql 데몬을 mysql사용자로 구동해야한다.
이전 버전에서는 root 사용자로 데몬이 구동되었다.
[root@angelsoma]/usr/local/mysql/bin/safe_mysqld --user=mysql &
slave 서버의 데몬 구동하기
[root@angelsoma]/usr/local/mysql/bin/safe_mysqld &
6. 확인하기
SLAVE 확인하기
mysql> show slave status;
Master_Host : 192.168.0.2
Master_User : soma
Master_port : 3306
Connect_retry : 60
Log_File : angelsoma-bin.001
Pos : 444
Slave_Running : Yes
mysql> show processlist ;
Id : 1
User : system user
Host : none
db : null
Command : connect
Time : 4637
State : Reading master update
Info : null
MASTER 확인하기
mysql> show master status;
File : angelsoma-bin.001
Position : 444
Binlog_do_db :
Binlog_ignore_db :
File에 출력된 값과 Postion 에 출력된 값은 SLAVE 에서 출력된 정보와 동일해야한다.
mysql> show processlist ;
Id : 1
User : soma
Host : 192.168.0.2
db : null
Command : Binlog Dump
Time : 5248
State : Slave connection : waiting for binlog update
Info : null
위의 내용들이 이상없이 출력이 된다면 정상적으로 설정이되었다는 말이다.
7. 테스트하기
master DB 에서 값 insert 하기
mysql>insert into soma (name,etc) values('soma','연습중');
slave DB 에서 확인하기
mysql>select * from soma;
+-----+------+--------+
| num | name | etc |
+-----+------+--------+
| 1 | soma | 연습중 |
+-----+------+--------+
1 row in set (0.00 sec)
master DB 값 update 하기
mysql>update soma set name='jeje' where num='1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from soma;
+-----+------+--------+
| num | name | etc |
+-----+------+--------+
| 1 | jeje | 연습중 |
+-----+------+--------+
1 row in set (0.00 sec)
slave DB 에서 확인하기
mysql> select * from soma;
+-----+------+--------+
| num | name | etc |
+-----+------+--------+
| 1 | jeje | 연습중 |
+-----+------+--------+
1 row in set (0.00 sec)
8. SLAVE 서버에 Replication 기능 중지하기 & 시작하기
mysql> slave stop;
Query OK, 0 rows affected (0.00 sec)
SLAVE 에서 Replication 서비스를 중지한후 Master 에서는 계속적인 update 가
발생하게된다.
하지만 걱정할 필요는없다. SLAVE 에서 다시 서비스를 시작해주면 로그파일에서
필요한 정보를가져와 다시 업데이트를 시켜주기때문에 항상 동일한 데이타를 유지할수있다.
mysql>slave start;
Query OK, 0 rows affected (0.00 sec)
9. 기타
* MASTER 변경 쿼리
CHANGE MASTER TO
MASTER_HOST='hostname',
MASTER_USER='soma',
MASTER_PASSWORD='패스워드',
MASTER_PORT=포트,
MASTER_LOG_FILE='로그파일',
MASTER_LOG_POS=278,
MASTER-CONNECT_RETRY=30;
* reset master;
* reset slave;
: reset slave는 master.info와 relay-log.info를 삭제하는 명령어이다.
* Slave 서버에 master.info 파일이 존재하면 my.cnf나 명령 라인에서 옵션으로
지정하는 것보다 master.info의 내용을 우선한다.
여러대의 디비서버가 동일한 데이타를 지속적으로 가지고있을수있는 기능이라 말할수있다.이 기능을 사용하면 실시간 백업이 가능할것이며, DB 서버의 부하 분산도 가능할것이라고 생각한다.
Replication을 이용하면 Master의 데이타와 동일한 데이타를 가진 여러개의 Slave를 만들수있다.
이 기능은 Mysql-3.23.15 부터 Replication 기능이 지원된다고 한다.
Mysql에서는 모든 데이타변동시에 로그를 남기는 기능이있다.
이 기능을 이용한것이 Replication 기능이다.
Slave 서버는 이 로그의 내용을 가지고 자기자신에 UPDATE 수행한다.
그러므로 모든 UPDATE QUERY는 MASTER 에서만 수행되어야하며,SELECT와 같은 단순한 QUERY는 Slave에서 사용하능하다.
아래의 내용은 버전은 mysql-3.23.44 와 mysql-3.23.39 에서의 구현하였다.
[ Replication 구현하기 ]
* 예제로 사용할 데이타베이스명 : soma , 테이블명 : soma
1. master 서버에 replication에 사용될 사용자 추가하기
ex) 'soma' 라는 사용자추가
mysql>grant file on *.* to soma@"%" identified by "패스워드" ;
Query OK, 0 rows affected (0.00 sec)
* mysql-4.x 버전에서는 아래와 같이 추가한다.
GRANT REPLICATION SLAVE ON *.* TO 'soma'@'%' IDENTIFIED BY '패스워드';
mysql>select * from user;
추가된 사용자를 확인할수있다.
2. Replication을 구현할 Slave 서버에 Master 데이타 옮기기
Master 에있는 데이타 파일만 Slave 로 옮기면된다.
/usr/local/mysql/var/soma 라는 파일 밑에있는 모든 파일을 압축을해서 Slave
서버의 해당 디렉토리로 옮겨주면 자동으로 database & table 이 생성된다.
그렇게하면 Slave 서버에도 soma 라는 데이타베이스와 soma 라는 테이블이 생성
된다. 이것으로 두 테이블간의 데이타의 동기화는 이룬것이다.
3. Master 서버에 설정하기
[root@angelsoma]vi /etc/my.cnf 파일을 만든다
[mysqld]
log-bin
server-id=1 -> master 서버와 모든 salve 서버를 통털어 유일한 ID 번호
위의 내용을 설정하고 저장하고 나온다.
4. Slave 서버에 설정하기
[root@slave]vi /etc/my.cnf 파일을 만든다.
[mysqld]
master-host=192.168.0.2 -> master 서버의 IP or Host 명
master-user=soma -> 위에서 추가한 사용자
master-password=abcdefg -> 위에서 지정한 패스워드
master-port=3306 -> mysql 이 사용하는 TCP/IP 포트
server-id=2 -> slave 서버들간의 고유한 ID 번호
log-slave-updates -> slave에서 master를 동기화하는 옵션
5. Mysql 데몬 재 시작하기 - master & slave 서버
master 서버의 데몬을 구동한다.
mysql-3.23.44 버전에서는 mysql 데몬을 mysql사용자로 구동해야한다.
이전 버전에서는 root 사용자로 데몬이 구동되었다.
[root@angelsoma]/usr/local/mysql/bin/safe_mysqld --user=mysql &
slave 서버의 데몬 구동하기
[root@angelsoma]/usr/local/mysql/bin/safe_mysqld &
6. 확인하기
SLAVE 확인하기
mysql> show slave status;
Master_Host : 192.168.0.2
Master_User : soma
Master_port : 3306
Connect_retry : 60
Log_File : angelsoma-bin.001
Pos : 444
Slave_Running : Yes
mysql> show processlist ;
Id : 1
User : system user
Host : none
db : null
Command : connect
Time : 4637
State : Reading master update
Info : null
MASTER 확인하기
mysql> show master status;
File : angelsoma-bin.001
Position : 444
Binlog_do_db :
Binlog_ignore_db :
File에 출력된 값과 Postion 에 출력된 값은 SLAVE 에서 출력된 정보와 동일해야한다.
mysql> show processlist ;
Id : 1
User : soma
Host : 192.168.0.2
db : null
Command : Binlog Dump
Time : 5248
State : Slave connection : waiting for binlog update
Info : null
위의 내용들이 이상없이 출력이 된다면 정상적으로 설정이되었다는 말이다.
7. 테스트하기
master DB 에서 값 insert 하기
mysql>insert into soma (name,etc) values('soma','연습중');
slave DB 에서 확인하기
mysql>select * from soma;
+-----+------+--------+
| num | name | etc |
+-----+------+--------+
| 1 | soma | 연습중 |
+-----+------+--------+
1 row in set (0.00 sec)
master DB 값 update 하기
mysql>update soma set name='jeje' where num='1';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from soma;
+-----+------+--------+
| num | name | etc |
+-----+------+--------+
| 1 | jeje | 연습중 |
+-----+------+--------+
1 row in set (0.00 sec)
slave DB 에서 확인하기
mysql> select * from soma;
+-----+------+--------+
| num | name | etc |
+-----+------+--------+
| 1 | jeje | 연습중 |
+-----+------+--------+
1 row in set (0.00 sec)
8. SLAVE 서버에 Replication 기능 중지하기 & 시작하기
mysql> slave stop;
Query OK, 0 rows affected (0.00 sec)
SLAVE 에서 Replication 서비스를 중지한후 Master 에서는 계속적인 update 가
발생하게된다.
하지만 걱정할 필요는없다. SLAVE 에서 다시 서비스를 시작해주면 로그파일에서
필요한 정보를가져와 다시 업데이트를 시켜주기때문에 항상 동일한 데이타를 유지할수있다.
mysql>slave start;
Query OK, 0 rows affected (0.00 sec)
9. 기타
* MASTER 변경 쿼리
CHANGE MASTER TO
MASTER_HOST='hostname',
MASTER_USER='soma',
MASTER_PASSWORD='패스워드',
MASTER_PORT=포트,
MASTER_LOG_FILE='로그파일',
MASTER_LOG_POS=278,
MASTER-CONNECT_RETRY=30;
* reset master;
* reset slave;
: reset slave는 master.info와 relay-log.info를 삭제하는 명령어이다.
* Slave 서버에 master.info 파일이 존재하면 my.cnf나 명령 라인에서 옵션으로
지정하는 것보다 master.info의 내용을 우선한다.
Skin Technical Note
Sites validated CSS, XHTML & IE6, IE7, FireFox, Opera and Safari Accessiable. Generator & Powered by Zeroboard XE. This site inspired by Slabovia and developed by WTA

