2014년 8월 7일 목요일

CentOS에서 MySQL Replication하기

CentOS에서 Mysql replication 하는 방법

Mysql에서 Replication이란?

리플리케이션(Replication)는 데이터 저장과 백업하는 방법과 관련이 있는 데이터를 호스트 컴퓨터에서 다른 컴퓨터로 복사하는 것인데 이때 다른 컴퓨터가 반드시 떨어진 지역에 있어야 하는 것은 아니다. 컴퓨터 네트워크 상태에서는 데이터 저장를 할 수 있게 하는데 로컬 데이터 물리적 기억 장치와는 완전하게 구분된다. 리플리케이션는 유명한 데이터베이스 관리 시스템 (RDBMS, Relational DataBase Management Systems)에서 추가적으로 제공하거나 여러 대의 데이터베이스 서버의 부하를 맞추어 줄 용도로 제공한다.

리플리케이션은 남아 있는 리소스와 관련이 있는데 소프트웨어 요소나 하드웨어 부품이 말해 주며, 이는 신뢰성, 허용 오차, 그리고 성능을 개선한다. 전형적으로 replication in space와 관련이 있는데 이것은 동일한 데이터를 다수의 저장 장치에 저장하거나 동일한 계산 업무를 다수 장치에서 수행하는 것이다. 또한 replication in time는 컴퓨터 계산 수행이 반복적으로 한 개의 장치에서 일어나는 것이다. [위키피디아 발췌]

위키피디아에서 발췌한 Replication의 내용인데 쉽게 말하면 실시간 데이터베이스 백업 서버를 만드는 것이에요. 보통 다른 서버에 만들기 때문에 본 데이터베이스 서버가 망가져도 실시간으로 저장된 데이터를 복구 할 수 있다는 장점이 있죠.

Replication 세팅 시 자주 쓰이는 명령어



  • 모든 유저 보기

mysql> select user, host, password from mysql.user;


  • Replication 상태보기
mysql> show master status;
mysql> show mater status\G
mysql> show slave status;
mysql> show slave status\G
mysql> show processlist\G
mysql> show processlist;

Mysql Replication 설정하기

1. 기본 설정 환경
  • Master와 Slave는 모두 CentOS
  • Mysql 버전은 5.7
  • Master 정보
        - IP: 172.16.7.5/24
        - server ID = 1
        - DB명: rep_jun
        - 계정 = rep_jun // rep_passwd
  •  Slave 정보
        - IP: 172.16.7.6/24
        - server ID = 2
        - DB명: rep_jun

2. Master 설정하기
  • 계정 생성하기
mysql>CREATE USER 'rep_jun'@'172.16.7.6' IDENTIFIED BY 'rep_passwd';
mysql>GRANT FILE ON *.* TO 'rep_jun'@'172.16.7.6';
mysql>grant replication slave on *.* TO 'rep_jun'@'172.16.7.6' identified by 'rep_passwd';
mysql>flush privileges;

  • my.cnf 편집하기
#vi /etc/my.cnf
[mysql]
log-bin = mysql-bin
server-id = 1
binlog_do_db = rep_jun






  • 백업파일 만들기
- mysqldump를 이용한 백업 방법만을 서술할게요.
#mysqldump -u root -p rep_jun > rep_jun.sql  - 데이터베이스를 sql 파일로 추출하는 명령어에요.

  • Master의 Replication 정보 조회
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File                     | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     120    | rep_jun          |                           |                              |
+------------------+----------+--------------+------------------+----------------
1 row in set (0.00 sec)
- 위에 처럼 나오면 성공한 거에요. 
- 위 정보를 띄어놓고 slave로 갑시다.

3. Slave 설정하기
- slave의 my.cnf 파일을 변경해줘야해요.
- slave의 my.cnf를 설정하는 방법은 두 가지가 있는데 먼저 자신의 버전을 확인해 주세요.
  • 5.5 버전 이전 설정하기
#vi /etc/my.cnf
[mysql]
server-id=2
master-host=172.16.7.5
master-user=rep_jun
master-password=rep_passwd
master-port=3306

  • 5.5 버전 부터 설정하기
- 저는 5.7이기 때문에 이 설정방법을 이용했습니다.
#vi /etc/my.cnf
[mysql]
server-id=2

  • dump파일 가지고 오기
#mysql -u root -p rep_jun < rep_jun.sql - 아! 빈 데이터베이스를 미리 만들어놔야 해요.

- 이렇게 설정 후 mysql을 실행시켜주세요.

mysql> stop slave;  - slave가 중지되어 있다면 안해도 상관 없으나 그냥 한번은 입력 해줍시다.
mysql> change master to master_host='172.16.7.5', master_user='rep_jun',master_password='rep_passwd', master_log_file='mysql-bin.000001',master_log_pos=120;
mysql> start slave;
- mysql 빠져 나온 후
#/etc/init.d/mysqld restart

4. 적용 여부 확인하기
  • master에서
mysql> show processlist\G
*************************** 1. row ***************************
     Id: 4
   User: root
   Host: localhost
     db: rep_jun
Command: Query
   Time: 0
  State: init
   Info: show processlist
*************************** 2. row ***************************
     Id: 5
   User: rep_jun
   Host: 172.16.7.6:40860
     db: NULL
Command: Binlog Dump
   Time: 1632
  State: Master has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
2 rows in set (0.00 sec)

- 위 밑줄 부분의 메시지 처럼 나오면 일단은maste에서 성공한 거에요.

slave에서
mysql> show slave status\G
Slave_IO_State: Waiting for master to send event
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

- 위 밑줄 항목에 밑줄과 같은 문구가 써 있다면 slave도 성공적으로 연결이 된 것입니다.

자! 이로써 Mysql Replication 설정은 다 끝났습니다. 설정이 잘 되었는지 확인하려면 테이블을 생성 후 자료를 입력 해봄으로써 확인 할 수 있습니다.

댓글 없음:

댓글 쓰기