[DB] 데이터베이스 이중화

최동혁·2023년 2월 13일
0

데이터베이스

목록 보기
17/18

db server 연결

  1. 방화벽 해제
    • setenforce 0
    • systemctl stop firewalld
  2. Mysql 설치
    • yum install mysql-server
    • systemctl restart mysqld
  3. MySQL root 패스워드 설정
    • mysql_secure_installation
      y
      0
      qwer1234
      qwer1234
      y
      y
      y
      y
      y
  4. 위의 과정으로 vm 2개 연결해준다.

Master 설정 (server 1)

  1. /etc/my.cnf.d/mysql-server.cnf 파일 설정

    • 이렇게 맨 마지막줄에 server-id = 1과 log-bin = mysql-bin 을 추가해준다.
    • 그리고 설정 파일을 수정했으니 systemctl restart mysqld 로 재시작 해준다.
  2. master 상태 확인

    • mysql -u root -p로 mysql에 로그인한다.

    • show master status 명령어로 상태를 확인한다.
  3. 이중화할 계정 생성

    CREATE USER 'slave'@'%' IDENTIFIED BY 'Dkagh1234!';
    GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; 
    • IDENTIFIED BY 뒤에는 자신이 쓸 패스워드를 적는 것이다.
    • 일단 use mysql;로 mysql 스키마로 들어간다.

    • select user, host from user 로 slave user가 잘 만들어졌는지 확인

    • select * from mysql.user where user='slave'\G

    • 위의 명령어를 입력해서 Repl_slave_priv 속성이 Y로 되어있는지 확인한다.

  4. 현재 데이터 백업

    CREATE DATABASE cdh;
    
    USE cdh;
    
    CREATE TABLE student ( sname VARCHAR(10), sage INT );
    
    INSERT INTO student (sname, sage) VALUES ('kim', 30);
    
    quit
    
    mysqldump -u root -p --all-databases > back.db		
    
    scp  ./back.db  [슬레이브 IP]:/root/back.db
  • cdh 데이터베이스를 생성하고, 그 안에 student 테이블을 만든다.

  • 테이블 안에 임의의 데이터 값을 넣어준다.

  • sql을 나간 후, 현재 저장한 데이터베이스를 back.db 라는 파일로 저장해준다.

  • scp 명령어는 다른 컴퓨터에게 파일을 전송해주는 것이다.

  • 방금 저장한 back.db 파일을 slave 컴퓨터에 /root 경로에 back.db 파일로 저장해준다.

  • 위의 그림을 보면 scp 명령어로 slave 컴퓨터에 back.db 파일이 잘 도착한 것을 볼 수있다. 왼쪽이 master 컴퓨터, 오른쪽이 slave 컴퓨터이다.

    Slave 설정 (server 2)

  1. /etc/my.cnf.d/mysql-server.cnf 파일 설정

    • 위의 그림처럼 server-id = 2 만 추가해준다.
    • 그리고 설정 파일을 변경했으니, systemctl restart mysqld 명령어를 이용해 재시작해준다.
  2. 데이터 복구

    • mysql -u root -p < back.db
    • 위 명령어를 이용해 back.db 파일을 db에 불러와준다.
  3. master 지정

    • 일단 mysql -u root -p 를 이용해 로그인한다.
    change master to
    master_host='[마스터 IP]',
    master_user='[이중화 계정]',
    master_password='Dkagh1.',
    master_log_file='mysql-bin.[마스터의 로그 번호]',
    master_log_pos=[마스터의 포지션 번호];
    • master ip는 master 서버의 ip 입력

    • master_user는 위에서 이중화 계정 생성할 때 생성한 user의 이름을 써준다. 나는 slave로 했다.
    • use mysql; mysql 스키마로 들어가서 select user, host from user; 쿼리문을 입력하면 나온다.
    • master_password도 위에서 생성할 때 썻던 비밀번호를 써준다.
    • 그리고 master로 와서 아까 봤던 show master status; 명령어를 이용해 들어가본다.

    • 위의 그림에 나오는 것을 이용해서 master_log_file에 mysql-bin.000002를 써준다.
    • master_log_pos는 1062를 써준다.
    • 각자 status 값에 따라 다르게 써주어야 한다!!
  4. 동기화 시작

    • start slave; 명령어로 동기화를 시작한다.
    • 만약 slave가 켜져있다는 명령어가 나온다면, stop slave; 로 꺼준 후, 다시 start를 눌러주던가 하자.
  5. slave 상태 확인

    • show slave status\G; 명령어로 상태를 확인하자.

    • 일단 slave_io_state가 위의 그림처럼 떠야 한다.

이중화 확인

  1. master 계정에 mysql 로그인
  2. use [데이터베이스 이름]; 으로 데이터베이스 접속

  1. select * from student; 로 테이블 확인

  2. slave도 위의 과정과 동일하게 접속 후, 테이블 확인

    • 위의 그림과 똑같이 나온다.
  3. master에 데이터 추가

    • INSERT INTO student (sname, sage) VALUES ('kkk', 40);
  4. slave에서 동기화가 잘 되었는지 확인하기 위해 데이터가 추가되었는지 확인

    • master와 같이 동기화가 잘 된것을 확인할 수 있다.
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글