mysql replication 사용....
데이터 복제는 두가지 설정으로 나누어 진다.
* master 설정
* slave 설정
mysql 은 이미 설치되어 있다는 전제하에 설명하며,
두대의 서버에 각각 설치되었다고 가정한다.
master 서버의 ip 는 111.111.111.111 로 가정하고
slave 서버의 ip 는 222.222.222.222 로 가정한다.
먼저 master 설정...
1. Master Server 에 새로운 사용자 등록...(권한은 all 로 했지만 Repl_slave_priv 만 준다고 함).
(전체 데이터베이스 복제를 위해 *.* 로 한다..... 디비는 딱 세개 있음 ㅡㅡ)
grant all on *.* to 'tornado'@'%' identified by '패스워드' with grant option;
2. 권한을 줬으면 mysql 데이터베이스에 user 테이블에 현재 생성한 유져가 잘 들어있는지 체크한다.
3. my.cnf 파일을 고쳐주어야 한다. 보통 mysql 설치후 /etc/ 디렉토리에 복사해 놓고 사용하는데
없다면 MYSQL_HOME/support-files 디렉토리에 보면
-rw-r--r-- 1 root mysql 2686 6¿u 3 10:04 MySQL-shared-compat.spec
-rw-r--r-- 1 root mysql 773 6¿u 3 10:04 magic
-rw-r--r-- 1 root mysql 4874 6¿u 3 10:04 my-huge.cnf
-rw-r--r-- 1 root mysql 4850 6¿u 3 10:04 my-large.cnf
-rw-r--r-- 1 root mysql 4833 6¿u 3 10:04 my-medium.cnf
-rw-r--r-- 1 root mysql 2418 6¿u 3 10:04 my-small.cnf
-rwxr-xr-x 1 root mysql 24917 6¿u 3 10:04 mysql-4.0.17.spec
-rwxr-xr-x 1 root mysql 676 6¿u 3 10:04 mysql-log-rotate
-rwxr-xr-x 1 root mysql 5432 6¿u 3 10:04 mysql.server
-rw-r--r-- 1 root mysql 24917 6¿u 3 10:04 mysql.spec
이렇게 파일이 존재한다.
이중에... my-small.cnf 를 /etc/my.cnf 로 복사한다.
cp my-small.cnf /etc/my.cnf
4. vi 로 /etc/my.cnf 를 열어본다...
# vi /etc/my.cnf 로 보면 아래와 같은 부분이 있다.
log-bin
server-id = 1
이 부분이 주석처리 되면 안되며, server-id 는 master 서버와 slave 서버 사이에서 유일한 값이어야 한다.
6. Database 및 Table 생성
mysql 에는 test 디비가 있는데 그곳에 아래와 같이 테이블을 만든다.
create table a ( name varchar(50) );
7. Database 복사.
위에처럼 생성했다면 mysql/data/test 디렉토리에 a 테이블에 관련된 세개의 파일이 생성된다.
그럼 해당 Table 을 무식하게(?) 압축해서 slave 의 test 디렉토리로 이동한다.
[root@localhost data]# tar cvzf test.tar.gz ./test
./test/
./test/a.frm
./test/a.MYI
./test/a.MYD
You have new mail in /var/spool/mail/root
[root@localhost data]#
압축된 파일을 slave 서버의 mysql/data/ 디렉토리에 옮긴후 압축을 푼다.
# tar xvzf test.tar.gz
이제 Slave 서버 셋팅이다.
1. my.cnf 파일 수정하기..
master 서버의 my.cnf 를 복사한 것과 같은 방법으로 /etc/my.cnf 를 만들어 준다.
# vi /etc/my.cnf
파일을 보다가 server-id = 1 이라고 되어있는 부분이 있으면
server-id = 2 로 바꾸어 준다.
아래와 같이 master 서버의 주소와 사용자를 적어준다.
# Replication Configure
master-host=111.111.111.111
master-user=tornado
master-password=패스워드
master-port=3306
2. mysql 데몬 다시 시작하기.
master 서버 및 slave 서버의 데몬을 다시 시작한다.
./bin/safe_mysqld --user=mysql &
3. master 서버에서의 상태 보기.
show master status;
위 명령을 치면 master 서버의 상태를 보여준다.
그곳에 보이는 파일과 slave 에서 보이는 파일이 동일해야 한다.
4. slave 서버에서의 상태보기.
show slave status;
위 명령을 치면 master 와는 틀리게 컬럼이 좀 여러개가 보인다.
그중에 master 에 적혀 있는 파일이 정확하게 있는지 확인한다.
만약 없다면 slave 의 data/ 디렉토리에 있는 모든 파일(디렉토리는 빼고!!!) 을 싹 지운다.
보통 xxx-bin 과 같은 파일일 것임..
만약 컬럼 중간에 에러 비스무리한 것이 있다면... 잘 읽어보라.
5. slave 서버 시작/중지하기.
slave start ; <-- 슬레이브 시작하기
slave stop ; <-- 슬레이브 중지하기..
이렇게 중지해도 양쪽의 로그파일이 있기 때문에
중간에 중단되었다 해도 중단된 시점부터 다시 백업해준다.
6. 테스트
master 서버의 test 디비에서 아까 만들었던 a 테이블에 쿼리를 날려본다.
insert into a values('tornado');
마스터/슬레이브 서버에서 각각 select * from a; 를 해보고
데이터가 동일한지 확인해서 같으면 끝...
7. 문제점???
pk 컬럼의 중복 및 짜잘한 오류가 생겼을 경우 slave 가 죽는 현상이 벌어짐 ㅡㅡ
해결책 ... 모름.. 아시는 분 덧글 부탁 ^^
'SQL > MySQL' 카테고리의 다른 글
[MySQL] Got error 28 from storage engine (0) | 2008.03.03 |
---|---|
[MySQL] mysqld_multi 사용법, 데몬 두 개 운영하기 (0) | 2006.11.03 |
mysql 관리 툴 EMS (0) | 2006.09.30 |
[Mysql] GRANT로 사용자 추가하기 (0) | 2006.08.28 |
[펌] 데이터베이스 관리 (0) | 2004.06.30 |