실서버에 넣기 위한 MariaDB의 이중화를 해야할 것 같다..!
그래서 미리-미리- 이중화해두기 ㅎㅎ 왜냐면 시스템 올렸다 내렸다 편하게 할 수 있는 건 지금뿐이니까..!
중간에 도저히 안풀리는 문제가 있어서 지선생님 도움을 좀 받았다..^^!
AWS에서 사용하니 당연히, 두 DB 간의 보안 그룹을 열어주어야 한다 😕
두 인스턴스 간의 보안 그룹 설정 및 Public Subnet으로의 ssh 연동이 확인되었다면, 설정을 시작해보자.
일단, mariadb 최신 버전에서는 my.cnf를 쓰지 않는다.
고로 my.cnf 를 하루종일 변경해도 변경점이 저장되지 않음.
이 내용을 지선생이 몰랐나보다. 계속 my.cnf를 던져주길래
라고 물어보니까 이렇게 대답하드라구여,,,, ^^ 이좌식이 ~! 처음부터 제대로 검색하란말이야ㅠㅠ!!
이래서 내가 지선생을 안쓰는건데.. 회사 오니까 다들 쓰고있어서...나도쓰게...되었다
server-id=1
log_bin=mysql-bin
binlog_do_db=your_database # 복제할 데이터베이스 이름
이렇게 써줄건데, binlog_do_db
옵션의 경우 복제할 '데이터베이스' 이름이므로,
전체를 다 백업하는 용도라면 설정하지말자!
이렇게 하고, 꼭 systemctl restart mariadb를 한번 해주자.
안하고 show master status를 때리니까 암것두 안나온당 😕
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'passwd';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
유저를 생성해준다. 이 유저는 Slave 쪽에 crud를 해줄 아이인 것으로 보임! (내가 이해한거라 확실 X)
SHOW MASTER STATUS;
마스터의 설정을 확인해서, Slave에 전달해주어야 Slave로 Master의 기록을 찾아서 가져갈 수 있으므로, 마스터의 정보 조회를 해준다.
이런식으로 나올것이다.
여기의 File
과 Position
을 써먹어야 한다.
binlog_do_db는 위의 옵션을 추가할 경우 나오는데, 나는 추가안했으므로 안나온당!
server-id=2
relay-log=mysql-relay-bin
server-id 가 master/slave를 나눠주는 priority 처럼 작동하므로 server-id를 중복시키면 안된다!
그리고 relay-log
의 경우
이런거라고 한다.
옵션이랑 같이 생각해서 체크해보면, Master 서버가 bin log에 변경된 애들을 기록해두면
slave가 와서 bin log를 읽어가고, 이 bin log를 relay log에 저장해두고 자기 DB에 업데이트를 시킨다고 보면 된다.
따라서 relay-log의 이름을 저장하라는 뜻임.
헷갈렸던 부분을 말하자면, log_bin 옵션과 relay-log 둘 다 log 파일의 이름을 저장하는 것이다.
처음 cnf 파일에는 위치가 저장되어 있을건데, (/var/log/...) 그렇게 하면 해당 로그 파일의 권한을 다시 설정해줘야 하고, 귀찮은 일들이 생긴다고 한다.
따라서 datadir이 디렉토리를 알아서 설정하게 내버려두고, 우리는 이름만 정해주자.
내가 이것때문에 시간을 2시간이나 잡아먹었는데,,;; 나는 slave 한테 bin 정보를 주길래 '아 현 상태를 알아서 복제하나보다' 했는데 그게 아니었음.
처음에는 database와 데이터들을 직접 dump 떠서 넣어줘야 한다고 한다.
따라서 master 서버에서 dump를 떠서 slave 서버로 보내주자.
대충 이렇게... ssh 접속할 수 있는 web 서버에서 옮겨줬다.
나는 pem키 때문에 master에서 slave로 바로 전송 안될거라고 생각했는데 (당연히 두 DB서버 AZ 다름)
되는거같기도 하고...?ㅠㅠ 잘 모르겠다 아무튼 이렇게 옮겨줬다
이것때문에.. 미리 하는거임 ㅠ
오류가 생기면 계속 restart 해줘야한다,,,
설정이 끝났으면, Slave한테 나 완료되었으니 이제 Master 정보 입력해줄게 ~ 시작해 ~ 라고 알려줘야한다.
CHANGE MASTER TO
MASTER_HOST='Master_DB_Private_IP',
MASTER_USER='replica_user',
MASTER_PASSWORD='passwd',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=93704;
아까 show master status 해서 나온 값을 여기에 알려줘야한다.
니 마스터는 이 사람이야~ 이 사람의 초기 데이터는 이래~ 라고 알려주는 것과 같다.
START SLAVE;
SHOW SLAVE STATUS\G;
slave 복제를 시작하고, 복제가 되고 나면 status로 현 상태를 확인해준다.
대충 이런식으로 뜬다.
Waiting for master.. 어쩌구 뜨면 성공이다.
계속 Connecting 상태로 있을 경우 아래쪽을 읽어보면 Error가 보인다.
나의 경우 ip를 복사해서 썼더니 '100.10.10.10' 이 아니라 '100-10-10-10' 이렇게 넣어서 에러가 났다.
따라서 트러블슈팅을 해주면 된다.
정상적으로 동작하는지 확인하고 싶다면, master에다가 데이터를 하나 넣어보자.
그리고 나서 slave에 데이터가 있는지 확인하면 된다!
업데이트가 잘 되고 있는 경우 데이터가 잘 들어오고 status에도 따로 error가 뜨지 않는다.
끝 -
출처 : 개발진스 짤 dev-hee 님 😃https://velog.io/@heelieben/%EA%B0%9C%EB%B0%9C%EC%A7%84%EC%8A%A4-%EC%A7%A4-%EB%8D%B0%EB%A0%A4%EA%B0%80%EC%84%B8%EC%9A%942