▼ DataBase, NoSQL/MySQL

MySQL | Ubuntu(우분투), MySQL 8.0↑ Replication 설정

Valar 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에 복원한다.

[MySQL] 데이터베이스, 테이블 Dump 하기

[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에 복제되어 데이터가 조회되는지 확인한다.

 

반응형