-
MySQL | Ubuntu(우분투), MySQL 8.0↑ Replication 설정▼ DataBase, NoSQL/MySQL 2023. 1. 28. 15:13반응형
🌈 구성 환경 Master / Slave
Ubuntu 22.04 LTS, MySQL 8.0.31 Community
1. Master 설정
1-1. Replication용 계정 생성 및 replication 권한 부여
[mysql]
특정 아이피를 설정할 경우 % 대신 ip를 입력한다.
create user 유저명@'%' identified by '비밀번호'; grant replication slave on *.* to 유저명@'%';
1-2. Mysql Replication 설정 - mysqld.cnf
[터미널]
vi 명령어로 mysqld.cnf 수정한다.
vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] 바로 아래 부분에 2줄을 추가한다.server-id: 서버 아이디로 고유 값 설정
log-bin: 바이너리 로그 파일이 생성될 path/이름 설정, path를 지정하지 않을 경우 /var/lib/mysql에 생성된다.
[mysqld] server-id = 1 log-bin = mysql-bin
1-3. MySQL 재시작[터미널]
sudo systemctl restart mysql
1-4. Master 상태 확인
[mysql]
show master status;
*Slave 설정에서 사용될 File명과 Position 번호
+------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 157 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
2. Slave 설정
2-1. Master에서 복제 할 데이터베이스 Dump하여 Slave에 복원한다.
[Linux] SCP 명령어로 서버 간 파일 복사, 가져오기
2-2. Mysql Replication 설정 - mysqld.cnf
[터미널]
vi /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld] 아래 부분에 2줄을 추가한다.server-id: 서버 아이디로 고유 값 설정
log-bin: 바이너리 로그 파일이 생성 될 path/이름 설정, path를 지정하지 않을 경우 default path(/var/lib/mysql)에 해당 이름으로 로그 파일이 생성된다.
[mysqld] server-id = 2 log-bin = mysql-bin read-only = 1
2-3. MySQL 재시작[터미널]
sudo systemctl restart mysql
2-4. Slave - Master 연결
[mysql]
reset slave;
Master 서버로 연결하기 위한 설정을 한다.
change master to master_host='Master DB IP', master_user='1-1에서 생성한 replication용 계정', master_password='계정 비밀번호', master_log_file='1-4의 File명', master_log_pos=1-4의 Position 번호;
2-5. Replication 명령어
시작
[mysql]
start replica;
중지
[mysql]
stop replica;
2-6. Slave 상태 확인
[mysql]
show slave status\G;
❗ 상태에서 필수로 확인1. Master 관련 설정들
2. Slave_IO_Running: Connection or YES
3. Slave_SQL_Running: YES[mysql] 프로세스 상태 확인
show processlist\G;
no query specified
Slave 서버에 Error 가 발생하면 발생하였던 시점으로부터 Master 서버로부터 갱신된 쿼리를 실행하지 않는다. 이런 경우 Error를 넘겨야 다음 쿼리를 실행하기 때문에 Slave 서버에 다음과 같이 넣고 restart 해준다.
vi /etc/mysql/mysql.conf.d/mysqld.cnf
→ slave-skip-errors=all 추가
[mysqld] ... slave-skip-errors=all
Replication 테스트
문제 없이 Replication 설정이 완료되었다면, 실제 잘 동작하는지 확인해본다.
master DB에서 데이터를 생성하고, slave DB에 복제되어 데이터가 조회되는지 확인한다.반응형'▼ DataBase, NoSQL > MySQL' 카테고리의 다른 글
MySQL | 데이터베이스, 테이블 Dump 하기 (0) 2023.01.28 MySQL | Replication(리플리케이션)이란 (0) 2023.01.28 MySQL | Ubuntu(우분투)에서 MySQL8 설치 후 포트 개방 및 사용자 생성 (0) 2023.01.28 MySQL | 데이터베이스 엔진 InnoDB, MyISAM (0) 2023.01.28