-
생활코딩 MySQL Replication (2)replica설정, checksum, sync생활코딩 DB 2023. 3. 17. 16:46
---
https://youtube.com/playlist?list=PLzk28xMxwFP9eEKTSnLEL2Ynj-RQQR96p
생활코딩 데이터베이스
www.youtube.com
---
(5)https://youtu.be/92hy_A8PLMQ
슬레이브 서버의 설정
my.cnf파일 실행. 관리자 권한으로
sudo vi /etc/mysql/my.cnf
master에 있는 log_bin과 slave에 있는 log_bin이 같으면 된다. 절대경로, 상대경로는 상관없음
server-id라는 값을 2라고 지정해서 다르게. 복제에 참여하고 있는 각각의 서버들을 식별하는 id니까 중복되면 안돼
relay_log 라는걸 추가해서 릴레이로그의 이름을 명시적으로 특정
log_slave_updates를 추가해서 = 1하면 설정이 활성화 된 것 => 바이너리로그에 기록, 다른 슬레이브가 그걸 가져갈 수 있도록
read_only = 1하면 슬레이브의 데이터를 읽기 전용으로 바꾸는 것. 어떤 사용자가 임의로 변경할 가능성이 있어. 그럼 마스터에 있는 데이터와 충돌이 날 수 있다. 에러가 나면 리플리케이션이 멈추면서 리플리케이션이 깨진다
저장 :wq
새로시작 /etc/init.d/mysql restart;
---
슬레이브가 마스터를 바라보게 해야해
네 마스터가 어느 IP에 있는데, 니가 이 IP에 접근할 떈 어떤 id, pw로 접근해야돼
CHANGE MASTER TO MASTER_HOST='10.0.1.8', MASTER_USER='repl', MASTER_PASSWORD='rP4\$\$w0rd'
그리고 mysql을 잠깐 빠져나와서, 아까 scp를 이용해서 전송한 덤프를 적용
압축해제
---
방금 잠깐 빠져나올 때
컨트롤 z한다음에
fg눌러서 다시 mysql클라이언트로 들어오네?
그리고 start slave; 명령을 날림
그리고
show slave status;를 입력하면 뭔가 복잡하게 나오는데,
Slave_IO_Running, Slave_SQL_Running이 두개에 대한 대답이 밑에 Yes, Yes인 것
IO 쓰레드가 정상적으로 작동한다
SQL 쓰레드가 정상적으로 작동한다
라는 뜻
에러는 저기 Last_IO_Error, Last_SQL_Error 부분에 표시가 될거야 Yes Yes 한 것처럼 그거보고 에러를 해결하면 됨.
여기서 확인하는게 불편하면
mysql을 나가서
tail -f 로그를 꼬리부터 보는 명령 /var/log/mysql/error.log 그럼메시지를 확인할 수 있다
에러가 있으면 [Error] 하면서 나올것
---
그 중에서 제가 경험했던 몇가지 오류를 설명
마스터 서버가 로컬호스트에서만 접속할 수 있도록 설정된 경우
이렇게 돼 있을 때 네트웍을 통해선 직접적으로 접속할 수가 없게 됨. 앞에 # 붙이면 된다
---
(6)https://youtu.be/AMVht8A1ozA
잘 작동하는지 확인
▽dump를 했으니까 같겠지?
---
select 해보고 insert해보면
재빠르게 해도 반영이 돼 있다
---
(7)https://youtu.be/p2wjxpVKfLE
정상적으로 동기화 돼 있는지 확인하는 방법에 대해, 이때 사용하는 기법이 checksum
checksum은 두 개의 데이터가 서로 동일한 데이터인지 확인할 때 쓰는 기법
소프트웨어를 다운받을 때 checksum이란것을 확인할 때가 있다
MD5 옆에 숫자가 적혀 있는데, 이 숫자와 내가 다운로드 받은 파일, 아니면 다른 곳에서 구한 파일을 MD5라는 걸 통해서 돌려보면 이 프로그램(프로그램은 데이터로 이뤄져 있다)에 대한 MD5값이 나옴
그것과 MySQL에서 배포하고 있는 프로그램의 MD5값이 같은지 확인하면
두개가 같으면 같은 프로그램인것
두개가 다르다면 누군가에 의해 변조됐을 수 있어
변조된 프로그램은 악의적인 의도가 포함됐을 수 있다
이런걸 하는 작업이 checksum
---
pt-table-checksum 이라는 프로그램을 사용할 것
checksum기법과, master데이터가 slave로 전파된다는 특성을 이용한 도구
percona tools에 여러개 프로그램이 포함돼 있는데 그 중 하나
maatkit tools의 일부분이었는데 이걸 만든 사람이 percona에 입사함
---
replication이라는게 slave쪽에서 정상적으로 잘 작동하고 있다고 상태로는 표시가 된다해도 여러가지 이유로 인해 깨질 수 있는 가능성이 항상 있어. 이런것들을 주기적으로 파악하는게 상당히 중요하다
그때 사용하는 도구를 mysql에서는 아직까지(2012년) 기본적으로 제공하고 있지 않다
---
설치는 저 링크 걸어놓은 URL이 PERCONA 홈페이지임
인스톨을 할 만한 요소가 없는 프로그램이라서 다운로드해서 풀어놓기만 해도 쓸 수 있다
debian이나 우분투는 세번째줄
밑에는 PERCONA TOOLS에 속해있는 애들을 개별적으로 다운로드 하는 방법
---
wget으로 다운 받고,
sudo dpkg -i로 해서 install
뭔가 필요하대. 의존성이 있는 것 같네
그럼 저걸 복사해서
이런식으로 처리하면 된다
그리고 다시하면 설치 됨
---
입력했는데 뭐가 뜨면 설치 완료
저대로만 쳐도 checksum을 체크하는걸 시도해.
기본적인 설정만으로는 접속이 안되니까
나름 찾은 짧으면서 많은 경우의 수를 포괄할 수 있는 케이스를 산정해서 보여드릴게요
---
pt-table-checksum이라는게 어떻게 동작하는지 설명드리고, 디테일한 설정은 뒤에서 설명
실행하면 제일 먼저 master database서버에 percona라고 하는 db를 생성한다. 그 안엔 checksums라는 테이블이 생성
마스터 서버에 있는 각각의 데이터들에 접근해서 checksum을 만들고 checksums테이블에 기록한다
이렇게 기록한 내용이 자연스럽게 각각의 replication서버에 전파
전파가 될때까지 pt table checksum이 기다리고 있다가, 전파가 끝나면 각각의 replication된 slave에 접속해서 slave에 있는 데이터들을 확인하면서 master로부터 전파된 percona db에 있는 checksums에 있는 테이블의 내용과 일치하는지를 일일이 대조. 그 후 결과를 리포팅
---
이걸 쓰기 위해선, 프로그램이 replication된 서버, 즉 master, slave을 다룰 수 있는 권한이 필요
권한은 저 표로 정리. 저 권한들을 갖고 있어야 해
이 3개의 권한은 pt table checksum이 master서버에 접속한 다음, master에 접속돼 있는 다른 slave서버들을 파악하기 위해, 이 명령들을 이용함
select는 slave에 접근해서 checksum을 만들기 위해
insert, update, delete는 얘가 percona라는 db를 만들고, 그 안에 checksums라는 테이블을 만들고, 그것들을 다루기 위해
이게 최소한의 권한, 상당히 강력한 권한들이다. 계정의 보안에 각별히 신경을 써야 한다. 아래 비밀번호 111111은 예시라서. 이거 이상의 권한을 줄 필욘 없을 것 같아
저 두가지 전제를 따르고, 이렇게 입력하기만 하면 계정이 만들어지고 권한이 부여됨
같은 대역에 있지 않다면 대역에 해당되는 계정들을 따로 만들면 됨
---
master서버 콘솔로 들어와서
flush로 권한을 실제로 서버에 반영
---
그 다음 실행
---
h= : DNS옵션, 호스트를 지정하는 옵션
localhost를 써도 되는데왜 192.168.0.14를 썼냐? 아까 replicawatch@192.168.0.%이었으니까
뭔가 복잡하게 올라옴
▽여기서 명령어 날려도 알아서 slave에 접속해서 데이터를 확인하는건가봐
ts시간, ROWS는 그 테이블이 몇개의 레코드, time은 체크하는데 걸린 시간, table은 작업의 대상
중요한건 DIFFS
0이라고 돼 있으면 master와 slave가 일치한다는 것. 0이 아니면 내가 동기화 상태를 체크해야해
저 위에 그림에 percona tools에서 pt table sync라는 프로그램을 제공
비교의 경우가 diff가 나온 경우, master와 slave를 동기화 시키는 역할을 하는 프로그램이다
좀 더 쉽고 안전하게 동기화를 할 수 있다
---
replication은 실제로 동기화가 깨져 있는 경우가 많아
pt table checksum같은 프로그램을 이용해서 master,slave데이터가 일치하는지를 주기적으로 확인해야한다
'생활코딩 DB' 카테고리의 다른 글
생활코딩 PostgreSQL 입문 (0) 2023.08.18 생활코딩 MySQL Replication (1)개념들, source설정 (0) 2023.03.17 DB2 - MySQL (5)DB&internet, database server, database client, mysql monitor, 원격 접속, workbench, index, modeling, backup, cloud, mysql api (0) 2023.01.21 DB2 - MySQL (4)RDB, 테이블나누기, join, IT와 중복제거 (0) 2023.01.17 DB2 - MySQL (3)CRUD, select 1+1; (0) 2023.01.16