MySQL 고급

구축

이 방법은 dump의 과정에서 mysql 데이터베이스까지 dump를 하기 때문에 mysql과 관련된 권한을 모두 복제한다. 그 안에는 사용자 정보와 같은 것도 포함되기 때문에, slave의 구성이 다를 경우 아래 dump 방법에서 --all-databases를 제거하고, database를 구체적으로 특정해야 한다. 

master host

  • 192.168.0.22

replication account

  • host : 192.168.0.%
  • id : repl
  • password : 111111
 

마스터 설정

my.cnf 파일을 수정한다. server-id 값은 다른 서버와 중복되지 않은 고유한 값이어야 한다. bind-address는 외부에서 접근을 허용하는 설정인데, 이것을 주석처리하면 외부에서 접근할 수 있게 된다.

log_bin=mysql-bin
server-id = 1000
#bind-address = 127.0.0.1

mysql을 재시작한다.

/etc/init.d/mysql restart

mysql 콘솔에서 아래 명령을 입력한다.

grant replication slave, replication client on *.* to repl@'192.168.0.%' identified by '111111';

마스터의 상태를 확인한다.

show master status;

쉘에서 아래 명령을 실행한다.

mysqldump --lock-all-tables --all-databases --master-data=1 -uid -p > my.sql

dump를 압축한 후에 리플리케이션 서버로 전송한다.

tar cvfz my.tar.gz my.sql;
scp my.tar.gz 192.168.0.23:~

슬레이브 설정

my.cnf 파일 수정

log_bin = mysql-bin
sever-id = 2
relay_log =mysql-relay-bin
log_slave_updates = 1
read_only = 1

mysql 재시작

/etc/init.d/mysql restart;

슬레이브가 마스터를 바라보게 함

CHANGE MASTER TO MASTER_HOST = '192.168.0.22', MASTER_USER='repl', MASTER_PASSWORD = '111111';

마스터의 dump를 적용함

tar xvfz my.tar.gz
mysql -uid -p < my.sql

마스터의 사용자 설정을 슬레이브에서 반영하기 위해서 아래 명령을 입력한다. (동영상에서 누락된 내용임)

FLUSH PRIVILEGES;

슬레이브를 시작

start slave;

슬레이브의 상태를 확인

show slave status;

Slave_IO_Runnig와 Slave_SQL_Runngin 중 하나라도 No가 있을 경우 리플리케이션이 실패한 것이다.

오류유형

  • error connecting to master 'repl@192.168.0.22:3306' - retry-time: 60  retries: 86400
  • 마스터(192.168.0.22)가 외부접근을 허용하지 않고 있을수 있다. 마스터의 my.cnf 중 bind-address = 127.0.0.1가 주석처리 되어 있지 않다면 다른 서버에서 마스터 서버에 접근할 수 없다. 주석 처리한다.

댓글

댓글 본문
  1. cchoi
    안녕하세요. 이번에 replication에 대해서 공부하면서 궁금한점이 있어서 댓글을 남깁니다.

    제가 아직 많이 부족해서 그러는데 master / slave간에 복제가 된다면 그 주기나 또는 복제가 되는 동안에 서비스

    운영하는데 문제가 되지 않나요?

    그리고 복제가 되는 주기는 어떻게 설정을 하나요?
  2. f7000
    만약 슬레이브 권한 설정시 ERROR 1201 (HY000) 오류가 난다면
    STOP SLAVE;
    하신후 mysql 재시작 하시면 됩니다.
  3. dragoune
    master 서버에서 slave 서버로 ssh 접근이 가능하신지를 먼저 확인해 보셔야 할 것 같습니다.
    접근이 가능하다면 문제없이 파일을 전송하실 수 있을 것 같네요.

    master 서버와 slave 서버의 계정이 다른 경우라면 파일을 전송하실 때
    scp [파일이름] [계정이름]@192.168.15.231:~
    이런식으로 전송하실 서버IP 앞에 '[계정이름]@' 를 붙여주시면 될 것 같습니다.
    대화보기
    • Steve
      저는 리플리케이션 서버로 덤프 파일을 전송하려고 ssh : connect to 192.168.15.231 port 22: connection refuse lost connection 이라고 나오는데 어떻게 해결해야 할까요?
    • Starmomo
      역시, 두 번 이상은 봐야 좀 이해가 됩니다. 고맙습니다.
    • egoing
      입력은 반드시 마스터에서 해야 합니다. 그런 규칙에 따른 것이라면 적절할 것 같습니다.
      2013년 2월 18일 월요일에 Disqus님이 작성:
      대화보기
      • chris park
        저는 마스터 - 슬레이브로 하고 슬레이브서버에서 데이터를 넣어야될때 마스터 주소로 접속해서 넣고 있습니다. 슬레이브에서 자료를 모와서 정리한다음 마스터에 넣어요~ 이 방법 괜찮은건가요?
      • egoing
        예 마스터 마스터 방법은 잘 쓰지 않는 것으로 알려져 있습니다.
        대화보기
        • chris park
          너무 감사합니다. 꼭 필요한 기능이예요. 근데 마스터 - 마스터 방법은 많이 않좋을까요?