티스토리 뷰
Replication 이란?
Replication 은 번역하면 복제라는 뜻으로 말그대로 1 번 DB - Master 의 DB 혹은 테이블을 2 번 DB - Slave 에 복제 하는것을 말하며 일반적인 방법으로 로그를 이용합니다.
MariaDB 의 경우 Galera Cluster 를 이용하는 방법도 있지만 이 글에서는 간단하게 Mysql 과 동일한 방법으로 Replication 하는 방법을 설명드리겠습니다.
MariaDB 의 버전은 10.1.3 입니다.
* 여기서의 Replication 은 복제할 DB 나 테이블의 구조가 이미 Master 와 Slive 에 모두 존재 해야 합니다. mysqldump 혹은 쿼리를 이용해 생성하고 진행하여 주시기 바랍니다.
* 원격 상에서 DB 를 복제 하신다고 하신다면 당연히 bind-address 를 주석처리 해주시거나 slave 의 ip 를 적어주셔야 합니다. 참고
1. Master 설정
참고 : MariaDB 의 경우 간단한 셋팅들은 주석 처리 되어 있으니 그냥 풀어 주시기만 하셔도 쉽게 이용하실수 있습니다.
우선 vim 혹은 nano 를 이용하여 /etc/mysql/my.cnf 를 열어서 replication 을 검색해 보시기 바랍니다.
# The following can be used as easy to replay backup logs or forreplication. # note: if you are setting up a replication slave, see README.Debian about # other settings you may need to change. server-id = 1 #report_host = master1 #auto_increment_increment = 2 #auto_increment_offset = 1 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index # not fab for performance, but safer #sync_binlog = 1 expire_logs_days = 10 max_binlog_size = 100M # slaves #relay_log = /var/log/mysql/relay-bin #relay_log_index = /var/log/mysql/relay-bin.index #relay_log_info_file = /var/log/mysql/relay-bin.info #log_slave_updates #read_only
검색을 재대로 하셨다면 위와 같은 라인들을 보실수 있으실탠대요. 위의 설정과 같이 주석을 제거해 주시면됩니다. 아래는 정리만 해봤습니다.
server-id = 1 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index expire_logs_days = 10 max_binlog_size = 100M
위 부분의 주석만을 제거해 주시기 바랍니다. 그리고 service mysql restart 를 이용하여 재시작 하여 주시기 바랍니다.
# service mysql restart * Stopping MariaDB database server mysqld [ OK ] * Starting MariaDB database server mysqld [ OK ]
재시작이 완료 되셧다면 MariaDB 로 접속하여 Replication 사용자를 생성 후 replication 권한만을 주도록 합니다.
MariaDB [(none)]> CREATE USER 'repliUser'@'%' IDENTIFIED BY '비밀번호'; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO repliUser;
* REPLICATION SLAVE 권한을 줄때 특정 DB 나 테이블을 설정하진 못하는것 같더군요.
이제 Slave 에서 사용할 현재 Master DB 로그 정보 를 받을 시간입니다. ( DB 가 이미 사용중이시라면 mysqldump 를 이용하여 DB 데이터 까지 옴겨 주셔야 합니다. 이전의 데이터들이 상관 없으시거나 비어 있다면 구조만 똑같이 생성 하셔도 됩니다. )
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; # 테이블에 락을 걸어 줍니다. MariaDB [(none)]> SHOW MASTER STATUS; #마스터의 정보를 가져 옵니다. +--------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+------------------+ | mariadb-bin.000170 | 447118 | | | +--------------------+----------+--------------+------------------+
Slave 설정시 필요한 정보는 File 과 Position 이니 복사해 두시기 바랍니다.
Master 설정은 여기까지 입니다. LOCK 의 경우 replication 종료 후 혹은 서비스 중이 아니시라면 unlock tables 를 이용하여 바로 풀으셔도 됩니다. 사용중이 아니실 경우는 당연히 락을 거실 필요도 없습니다.
MariaDB [(none)]> UNLOCK TABLES;
2. Slave 설정
이제 Slave 를 설정할 차례 입니다. 우선 Master 와 마찬가지로 vim 혹은 nano 를 이용하여 replication 파트를 찾으셔서 아래와 같이 주석을 제거하고 설정하시기 바랍니다.
# The following can be used as easy to replay backup logs or for replication. # note: if you are setting up a replication slave, see README.Debian about # other settings you may need to change. server-id = 2 #report_host = master1 #auto_increment_increment = 2 #auto_increment_offset = 1 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index # not fab for performance, but safer #sync_binlog = 1 expire_logs_days = 10 max_binlog_size = 100M # slaves relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index relay_log_info_file = /var/log/mysql/relay-bin.info replicate-do-table = wp_ms.wp_posts log_slave_updates #read_only
Master 와 다른점은 server-id 의 경우 Master 와 겹쳐서는 안됩니다. 다수의 Slave 가 있다면 마찬가지로 모든서버가 각각의 server-id 를 가지고 있어야 합니다.
그리고 slaves 쪽의 주석들을 풀어 주시기 바랍니다. 간단히 정리해 보자면
server-id = 2 log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index expire_logs_days = 10 max_binlog_size = 100M relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index relay_log_info_file = /var/log/mysql/relay-bin.info replicate-do-table = wp_ms.wp_posts log_slave_updates
위의 설정 중 기본에서 추가된 부분은 replicate-do-table = wp_ms.wp_posts 라는 부분입니다. 이 부분은 wp_ms.wp_posts 그러니까 wp_ms 라는 데이터베이스의 wp_posts 만을 복사 한다는 뜻입니다. 참고
설정을 모두 완료 하셨다면 Master 에서와 마찬가지로 DB 서비스를 재시작 하여 주시기 바랍니다.
이제 mysql 로 접속하여 설정하라 차례 입니다.
* 다시 한번 말씀 드리지만 동일한 DB 혹은 Table 의 구조가 이미 적용되 있어야 합니다. 데이터 까지 똑같을 필요는 없습니다. mysqldump 를 이용하여 복사 하지 않으신다고 해도 DB 구조가 같다면 Replication 설정 이후 데이터가 정상적으로 들어 가는 것을 확인하실수 있습니다.
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='아이피', MASTER_USER='repliUser', MASTER_PASSWORD='비밀번호', MASTER_PORT=포트번호, MASTER_LOG_FILE='Master File', MASTER_LOG_POS=Master Position, MASTER_CONNECT_RETRY=10; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> START SLAVE;
아이피, 사용자, 비밀번호, 그리고 Master 에서 확인했던 File 과 Position 을 모두 입력하고 쿼리로 날려 주시기 바랍니다.
만약 정상적으로 적용 되었다면 큰 에러 없이 바로 적용 되실 것 입니다.
작동 확인
우선 작동 확인은 show slave status\G 를 통하여 대략 확인이 가능합니다.
MariaDB [(none)]> show slave status\G;
위와 같이 에러가 없다면 Insert 를 통해서 데이터를 넣을 경우 정상적으로 입력되는 것을 확인하실수 있습니다.
'Database > MariaDB' 카테고리의 다른 글
MariaDB ( MySql ) 데이터베이스 보기. 생성, 삭제하기 (0) | 2015.05.04 |
---|---|
MariaDB ( Mysql ) 초기 원격 데이터베이스 설정하기 (0) | 2015.04.28 |
Ubuntu 14.04LTS 에 MariaDB 10 를 apt로 설치하기 (1) | 2015.03.02 |
- Total
- Today
- Yesterday
- 웹
- cocos2d-x
- 서버
- 데이터베이스
- SNS
- Tutorialbook
- 웹 개발자
- html
- 설치
- 서버 개발
- it
- php
- 웹 개발
- 웹 서버
- Developer
- JavaScript
- 우분투
- 게임
- 에러
- 인터넷
- Database
- 개발자
- Laravel
- 게임 개발
- ubuntu
- 튜토리얼북
- 맥
- 개발
- mac
- Nodejs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |