CentOS7에 MariaDB 10.3.x 슬레이브 서버 구축 Replication DB 구축하기 슬레이브는 synology nas 에다가 구축해봤습니다.

먼저 synology nas 에 접속해서 패키지를 설치했습니다.
mariadb 10 으로 깔았구요..
apache2.4에 php7 로 설치했어요.

ssh 접속하면 설치경로는 아래와 같습니다. 따로 mysql파일 실행경로에 링크 안되어있으니 경로 타고 들어가서 실행해줘야합니다.

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


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

이제 DB의 업데이트를 막기위해 웹서버 실행을 중지!
systemctl stop httpd

디비서비 재실행
systemctl restart mariadb

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

리플리케이션을 하기위한 아이디(replication)와 비밀번호(bigs3cret)를 세팅했다.(물론 변경가능하다)
CREATE USER 'replication'@'%' IDENTIFIED BY 'bigs3cret';

리플리케이션 사용자가 슬레이브서버로 백업할수있는 권한을 준다.
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';


아래 쿼리문을 실행하면 File 와 Position 이 나온다. 메모하자.
SHOW MASTER STATUS;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| master1-bin.000002 |    455330 |              |                  |
+--------------------+----------+--------------+------------------+


로그포지션 확인 후, 모든 DB를 백업해서 슬레이브서버로 보내자.
슬레이브 서버에 쓰레기 데이터가 기존테이블삭제 하라는 문구도 넣었다.
mysqldump -uroot -p -add-drop-table -A > all_database.sql


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

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


디비접속
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;

mysql을 나간다
quit;

아까뜬 덤프파일을 슬레이브 dB에 집어 넣는다..
mysql -uroot -p < all_database.sql

다 들어갔으면. 다시 슬레이브 db 로 들어가서 아래 sql문 실행
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

댓글 없음:

댓글 쓰기