MASTER TO MASTER
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 // 로그 보관주기 설정(일) replicate-do-db = repl // Replication 대상 DB 지정, 이 옵션을 제거시 모든 DB 복제 /* * 참고(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; |
// B server의 master 정보를 확인한다.
// B server의 master 정보를 A server에 설정 mysql> stop slave; mysql> change master to master_host='10.0.2.20', master_user='replicator', master_password='replicator', master_log_file='mysql-bin.000004',master_log_pos=1441; mysql> start slave; |
B server - IP : 10.0.2.20
$ vi my.cnf // 아래 내용을 추가해준다. [mysqld] bind-address = 10.0.2.20 server-id = 2 // 서버 고유아이디, Slave와 다르게 설정 log-bin = mysql-bin // MySQL(오라클의 redo로그와 유사) 로그생성 설정 expire_logs_days = 7 // 로그 보관주기 설정(일) replicate-do-db = repl // Replication 대상 DB 지정, 이 옵션을 제거시 모든 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; |
// A server의 master 정보를 확인한다.
// A server의 master 정보를 B server에 설정 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
// slave 상태 확인
mysql> show slave status \G;
// Last_Errono 와 Last_Error 의 내용이 없다면 성공적으로 replication 수행 중 // 위와 같이 특정 메시지가 나온다면 다시 설정 // 생성하고자 하는 데이터베이스를 생성하여 잘 동작하는지 확인. 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> create database repl; // 생성된 데이터베이스에 테이블 생성하여 사용하고자 한다면 권한을 추가해줘야한다. 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'; |
// 설치 시 에러
// 양쪽의 mysql server UUID가 같아서 생기는 문제
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
// 해결 방법 : A,B server /var/lib/mysql/auto.cnf 의 server-uuid 값을 다르게 해주고 replication 재실행
// SSL 통신 필요해서 생기는 문제
Last_IO_Error: error connecting to master 'replicator@192.168.105.8:3306' - retry-time: 60 retries: 1 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
// 해결 방법 1 : A,B server CHANGE MASTER TO GET_MASTER_PUBLIC_KEY=1; 수행 후 replication 재실행
// 해결 방법 2 : default_authentication_plugin variable 을 mysql_native_password 로 변경
'MySQL' 카테고리의 다른 글
[MySQL] Sysbench & Percona 설치 및 사용 (yum install) (0) | 2020.05.24 |
---|---|
[MySQL] Create Function (0) | 2020.04.14 |
[MySQL] Replication Master To Slave (0) | 2019.07.02 |
[MySQL] MySQL 아키텍처 (0) | 2019.05.24 |
[MySQL] 설치 및 데이터 디렉토리 구조 (0) | 2019.05.24 |