2018년 9월 17일

MariaDB 10.3.x 이중화 마스터,슬레이브 서버 구축 Replication DB 구축하기 슬레이브는 synology nas 로

마스터는 CentOS7 이고, 슬레이브는 시놀로지(synology) nas 에 를 사용합니다.

시놀로지는 mariadb설치시 경로가 다음과 같습니다.

/var/packages/MariaDB10/var/mariadb10   : 데이터경로
/volume1/@appstore/MariaDB10/usr/local/mariadb10/bin/   실행파일 경로
/var/packages/MariaDB10/etc/my.cnf  설정파일 경로

그외 일반적인 리눅스는 다음과같습니다.
/etc/my.cnf    설정파일 경우

1. 마스터 서버의 my.cnf 의 [mysqld] 섹션 또는  [mariadb] 섹션을 찾아서 수정합니다.
[mysqld]
log-bin
server_id=1

2. 디비서버 재실행해서 설정파일이 적용되도록 한다
systemctl restart mariadb

3. 디비접속해서 슬레이브서버에서 사용할 사용자를 만들고, DB백업을 함
mysql -uroot -p
password : 입력

4. 리플리케이션을 하기위한 아이디(replication)와 비밀번호(bigs3cret)를 세팅했다.(물론 변경가능)  2번째 줄은 리플리케이션 사용자가 슬레이브서버로 백업할수있는 권한을 준다.
CREATE USER 'replication'@'%' IDENTIFIED BY 'bigs3cret';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';

5. 아래 쿼리문을 2개를 실행하고 ssh 창을 잠시 열어둔다.
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| master1-bin.000002 |    455330 |              |                  |
+--------------------+----------+--------------+------------------+
로그파일명  master1-bin.000002  와  position 455330 을 기록한다.

6. mysql을 빠져나오면 테이블락이 해제되므로. 빠져나오지 말로 ssh 를 하나더 접속해서.. db파일을 덤프뜬다..슬레이브 서버에 쓰레기 데이터가 있으면 기존테이블삭제 하라는 문구도 넣었다.
/path/to/mysqldump -add-drop-table -A -uroot -p > all_databases.sql



7. 이제 슬레이브 DB서버로 덤프파일을 이동시키고 슬레이브 dB에 집어 넣는다..
mysql -uroot -p < all_database.sql

이제 슬레이브 서버의 my.cnf 파일을 수정한다.
특정DB만 복제할 경우 replication-do-db를 사용해서 DB명을 입력하자. db가 여러개면 ,(콤마)로 구분해서 여러개를 쓸수있다.

[mysqld]
server-id=2
replicate-do-db='repl_db, repl2_db'


설정파일을 변경했으면 mariadb재시작시켜주고.  시놀로지에서 재시작을 한다.

synopkg restart MariaDB10


디비접속
mysql -uroot -p
password : 입력.

아래 쿼리문의 마스터DB설정값을 쓰고, 로그파일과 포지션을 본인에게 맞게 수정해서 쿼리 실행

CHANGE MASTER TO
  MASTER_HOST='211.182.233.2',
  MASTER_USER='replication',
  MASTER_PASSWORD='bigs3cret',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master1-bin.000002',
  MASTER_LOG_POS=455330,
  MASTER_CONNECT_RETRY=10;

start slave;

동작이 잘되는지 확인한다.
show slave status\G

다음 2 줄이 Yes 나오면 제대로 되고있음...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


slave가 동작이 잘되는지 계속해서 확인하다가 어느순간 에러로 멈추는 경우가 있다. 슬레이브 서버로 insert를 하거나 update를 하게되면 마스터 DB와충돌이 일어나기에 반드시 select구문만 슬레이브 서버에서 운용하도록 하자.

에러 구문을 확인해서 별것 아닌 에러면 그냥 하나 스킵하면 되고.. 나머지 중요한 에러 같으면 슬레이브DB에서 거기 맞도록 적용하고 넘어가야 겠다..
일단 쿼리가 막혔을때 해당 쿼리 하나만 그냥 넘어가고 다음을 진행하라는 명령어.. 아래 3줄을 복사해서 mysql 슬레이브에서 붙여넣기하면 해당오류만 스킵하고 다음 sql문부터 업데이트를 시킨다.

stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;

에러를 아예 무시하려면 my.cnf 에   slave-skip-errors=all  구문을 한줄 넣어주면 에러는 모두 무시하고 다음으로 넘어간다.



[mysqld]
slave-skip-errors=all



마스터,슬레이브로  DB를 사용하기위해선 insert 나 update 구문은 반드시 마스터 DB에서만 실행하여야 한다. 슬레이브 DB를 먼저 변경할 경우  DB충돌이 일어나게 된다.


또한 슬레이브 서버를 더이상 사용하지 않을때는 다음 명령어를 통해 슬레이브 설정을 완전 삭제할 수 있따.
stop slave;
reset slave all;

댓글 없음:

댓글 쓰기

추천 게시물

Elisabeth Chaplin (1890~1982)

 프랑스의 예술가 집안에서 태어난 '엘리자베스 채플린'은, 10살 때 가족과 함께 이탈리아로 이사를 갔습니다. 우피치미술관을 방문하고 나서 미술에 푹 빠져버렸죠.  정식교육을 받지는 않았지만 그녀는 우피치미술관에서 명작들을 보고 따라그리...