2024. 1. 6. 01:51ㆍMySQL/Class
# 운영 서버는 사용 중인 데이터가 이미 존재하기 때문에 신규 서버처럼 binlog 와 position값으로만 복제를 해서는 안됩니다.
먼저 운영서버(master)의 데이터를 가져와서 HA 구성을 해야 합니다.
1. 백업본
모든 전체 데이터가 백업되었다고 가정하였을 때 dump로 가져오던지, 파일 복사를 이용하던지 어떤 방법을 사용하던 운영서버에는 어떠한 영향을 주지 않기 때문에 가장 깔끔하게 HA를 구성할 수 있는 방법입니다. 아래 내용들을 참고하여 백업본에서 작업을 하는 것을 추천 드립니다.
2. 파일 복사
- 운영 DB가 shutdown 된 상태에서 파일 복사가 이뤄져야 해야하기 때문에, 작업을 진행하는 동안 서비스를 중지할 수밖에 없습니다.
# Master
(1) 운영 DB shutdown
(2) 데이터 파일 복사
(3) auto.cnf 삭제
server-uuid는 유니크 해야 하기 때문에 관련 정보가 저장되어 있는 auto.cnf 파일을 삭제해줍니다. 이 파일은 mysql 데몬이 실행되면 새롭게 생성되니 문제가 되지는 않습니다.
[root@test03 mysql_data]# rm -rf auto.cnf
(4) master 정보 확인
- 복사가 완료 되면 운영DB는 바로 재시작 후 master 의 binlog와 postion 값을 확인합니다.
- 서비스가 아직까지는 내려가있는 상태입니다. DML 작업이 이뤄지지 않는다는 가정입니다.
- 해당 정보는 앞서 DB가 shutdown 하기 전에 확인하는 것도 좋습니다.
(5) 테스트 데이터 입력
- 운영 서버가 아니기 때문에 운영 서버인척 하기 위해 테스트를 해보겠습니다.
- 서비스가 올라간 순간 부터는 master 서버는 다시 운영 중이기 때문에 데이터가 계속 들어온다는 가정을 하고 테스트 데이터를 입력 해 보겠습니다.
- 이후 slave에서 replication 을 설정 이후 신규 데이터가 있다면 파일은 복사하지 않았지만, 동기화되는 것을 확인해 볼 수 있을 것입니다.
(6) replication 을 위한 계정 생성
mysql> create user replicator@'172.16.173.%' identified with mysql_native_password by '1234';
mysql> grant select, reload, replication slave, replication client, show view on *.* to replicator@'172.16.173.%';
# Replica
(1) change master
mysql> change master to
-> master_host='172.16.173.134',
-> master_user='replicator',
-> master_port=3306,
-> master_log_file='binlog.000006',
-> master_log_pos=157,
-> master_connect_retry=10,
-> master_password='1234';
Query OK, 0 rows affected, 10 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
(2) 데이터 확인
- Master 에서 인서트한 데이터가 제대로 동기화가 되었는지 확인해봅니다.
3. mysqldump
- export 진행중에도 DML이 발생하여 데이터의 변화가 발생되기 때문에 필히 DML작업을 못하도록 차단 후에 작업을 진행해야합니다.
서비스에서 막거나, DB 자체를 read-only(restart 필요)로 설정하여 작업 진행을 하면 될 것입니다. 그리고 slave는 master와 동일한 셋팅으로 DB가 있어야 합니다. DML을 차단하는 작업은 다루지는 않겠습니다. DB설치는 여기를 참고해 주세요.
# Master
(1) export
[root@centOS9-04 data]# /mysql/local/mysql_8033/bin/mysqldump -uroot -p --all-databases -S /tmp/mysql> /home/mysql/fullDB.sql
(2) master 정보 확인
(3) dump 파일 복사
(4) 데이터 insert
(5) replicator 계정 생성
mysql> create user replicator@'172.16.173.%' identified with mysql_native_password by '1234';
mysql> grant select, reload, replication slave, replication client, show view on *.* to replicator@'172.16.173.%';
# Slave
(1) 초기 DB 확인
(2) import
[root@test03 data]# /mysql/local/mysql_8033/bin/mysql -uroot -p -S /tmp/mysql_8033.sock< /home/mysql/fullDB.sql
(3) change master
mysql> change master to
-> master_host='172.16.173.134',
-> master_user='replicator',
-> master_password='1234',
-> master_port=3306,
-> master_log_file='binlog.000006',
-> master_log_pos=2578,
-> master_connect_retry=10;
Query OK, 0 rows affected, 10 warnings (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
(4) 데이터 확인
# 데이터가 존재하는 디비서버(또는 운영서버) 에 대해 HA구성을 해보았습니다.
# 다른 방법이 있다면 댓글로 알려주시면 감사하겠습니다.
# 포스팅 순서가 잘못되었다고 생각되지만, 다음에는 replication 되는 과정을 한번 살펴 보도록 하겠습니다.
'MySQL > Class' 카테고리의 다른 글
HA 구성 - (4) MHA (0) | 2024.01.18 |
---|---|
HA 구성 - (3) replication의 동작원리 (0) | 2024.01.08 |
HA 구성 - (1) 신규 서버 (0) | 2024.01.04 |
M2(Mac)용 VMWare로 가상화 만들기 - (5) 복제 (0) | 2023.12.29 |
M2(Mac)용 VMWare로 가상화 만들기 - (4) MySQL 설치 (0) | 2023.12.26 |