이 방법은 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가 주석처리 되어 있지 않다면 다른 서버에서 마스터 서버에 접근할 수 없다. 주석 처리한다.