MASTER TO SLAVE
A server - IP : 10.0.2.10
$ vi my.cnf // 아래 내용을 추가해준다. [mysqld] bind-address = 10.0.2.10 server-id = 1 // 서버 고유아이디, Slave와 다르게 설정 log-bin = mysql-bin // MySQL(오라클의 redo로그와 유사) 로그생성 설정 expire_logs_days = 7 // 로그 보관주기 설정(일)
/* * 참고(binlog_do_db/replicate-do-db 차이) - binlog_do_db : Master 기준 어떤 DB를 Replication 허용할 것인지 설정(제외조건 binlog_ignore_db) - replicate-do-db : Slave 기준 어떤 DB를 Replication 할 것인지 설정(제외조건 replicate-ignore-db) */
$ service mysqld restart // mysql을 재실행
// 이중화할 때 사용될 사용자 계정 생성 및 권한 설정 mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'replicator'; mysql> FLUSH PRIVILEGES; mysql> GRANT SELECT, PROCESS, FILE, SUPER, REPLICATION CLIENT, REPLICATION SLAVE, RELOAD ON *.* TO 'replicator'@'%' IDENTIFIED BY 'replicator' // 8버전에서는 IDENTIFIED BY를 붙이지 않는다. 그럼에도 불구하고 이중화가 안됨. mysql> FLUSH PRIVILEGES;
// 데이터 변경을 막고 mysqldump 명령어를 이용하여 dump파일을 만든다. (READ LOCK or shutdown) mysql> FLUSH TABLES WITH READ LOCK; // READ LOCK을 할 경우 해당 명령어 수행 후 세션을 나가면 LOCK이 풀립니다. mysql> \! mysqldump -u root -p --all-dataabases --master-data > dbdump.db
## OR ##
$ service mysqld stop $ mysqldump -u root -p --all-databases --master-data > dbdump.db // --master-data 옵션을 붙여주게 되면 slave에 적용할 'CHANGE MASTER TO' 변환 작업을 해줄 필요 없게 해줌.
// READ LOCK을 풀어주거나 mysql을 start 해준다. mysql> UNLOCK TABLES;
## OR ##
$ service mysqld start |
B server - IP : 10.0.2.20
$ vi my.cnf // 아래 내용을 추가해준다. [mysqld] bind-address = 10.0.2.20 server-id = 2 // 서버 고유아이디, Slave와 다르게 설정 replicate-do-db = repl // Replication 대상 DB 지정, 이 옵션을 제거시 모든 DB 복제
// dump한 파일을 B server로 옮긴다. $ scp root@10.0.2.10:/mysql/mysql_home/dbdump.db /mysql/mysql_home/
// 가져온 dump 파일을 B server에 적용시킨다. $ mysql -u root -p -h master < /mysql/mysql_home/dbdump.db // '-h master' 옵션을 사용하면 'CHANGE MASTER TO' 구문 설정을 정의해주는 듯하나, 필자는 해당 구문 에러가 나서 '-h master' 옵션을 제거하고 실행 함. (MySQL Manual 8.0 기준) |
// A server의 master 정보를 확인한다.
// A server의 master 정보 B server slave에 설정된 값이 일치하지 않으면 직접 설정 그렇지 않으면 그냥 start slave 해준다. mysql> stop slave; mysql> change master to master_host='10.0.2.10', master_user='replicator', master_password='replicator', master_log_file='mysql-bin.000004',master_log_pos=1794; mysql> start slave; |
A server
// 생성하고자 하는 데이터베이스를 생성하여 잘 동작하는지 확인. mysql> create database repl;
// 생성된 데이터베이스에 테이블 생성하여 사용하고자 한다면 권한을 추가해줘야한다. mysql> GRANT CREATE, DROP ON repl.* TO 'replicator'@'%' IDENTIFIED BY 'replicator'; mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 VARCHAR(30)); mysql> GRANT ALTER, SELECT, DELETE, UPDATE, INSERT ON repl.t1 TO 'replicator'@'%' IDENTIFIED BY 'replicator'; mysql> insert into t1 values (1,'xxxx'); |
B server
// slave 상태 확인
mysql> show slave status \G;
// Last_Errono 와 Last_Error 의 내용이 없다면 성공적으로 replication 수행 중
// 생성된 데이터베이스에 테이블 생성하여 사용하고자 한다면 권한을 추가해줘야한다. mysql> GRANT CREATE, DROP ON repl.* TO 'replicator'@'%' IDENTIFIED BY 'replicator'; mysql> GRANT ALTER, SELECT, DELETE, UPDATE, INSERT ON repl.t1 TO 'replicator'@'%' IDENTIFIED BY 'replicator'; |
# 한 서버에 Master to Slave 로 설정하는 방법을 설명하는 글
https://www.toptal.com/mysql/mysql-master-slave-replication-tutorial
'MySQL' 카테고리의 다른 글
[MySQL] Sysbench & Percona 설치 및 사용 (yum install) (0) | 2020.05.24 |
---|---|
[MySQL] Create Function (0) | 2020.04.14 |
[MySQL] Replication Master To Master (0) | 2019.07.02 |
[MySQL] MySQL 아키텍처 (0) | 2019.05.24 |
[MySQL] 설치 및 데이터 디렉토리 구조 (0) | 2019.05.24 |