카테고리 없음

Mysql 레플리카 설정

백봉 2024. 7. 15. 10:52

운영 서버 실시간 백업을 위한 레플리카 설정

백업 대상: MASTER, 백업 위치: SLAVE

1. MASTER에 접속할 백업 전용 계정 생성

# MASTER 서버에서 Mysql에 접속
mysql -u root -p 123!@#
mysql> CREATE USER 'slave_db'@'Slave server IP' IDENTIFIED BY '패스워드';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_db'@'Slave server IP' IDENTIFIED BY '패스워드';
mysql> flush privileges;
    

my.cnf 편집하기

MySQL 5.5 이하

# vi /etc/my.cnf
[mysql]
log-bin=mysql-bin.log
server-id = 1
binlog_do_db = DB명 -- Replication 진행 할 DB 명
max_binlog_size = 100M
expire_logs_days = 10
binlog-ignore-db=mysql  -- 바이너리 로그 제외 DB
binlog-ignore-db=information_schema  -- 바이너리 로그 제외 DB
binlog-ignore-db=performance_schema  -- 바이너리 로그 제외 DB
#log_bin_trust_function_creators=1  -- function 가능하도록 설정
#binlog_format=mixed
    

MySQL 5.6 이상

# vi /etc/my.cnf
[mysql]
log-bin=mysql-bin.log
server-id = 1
expire_logs_days = 10 -- 로그 보관 주기
max_binlog_size = 100M
    

※ MySQL 5.6부터는 [binlog_do_db] 설정을 넣지 않아도 모든 DB가 Replication 자동으로 반영됩니다.

2. Master 데이터 백업

Master DB 백업

# mysqldump -u root -p DB명 > DB명.sql  - 데이터베이스를 Dump 하여 백업
    

Master의 Replication 정보 조회

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     120  | DB명         |                  |                   |
+------------------+----------+--------------+------------------+-------------------
1 row in set (0.00 sec)
    

- 위 상태의 File 값과 Position 값을 기억해야 합니다.

  • File: mysql-bin.000001
  • Position: 120

3. Slave 설정하기

my.cnf 편집하기

MySQL 5.5 이하

# vi /etc/my.cnf
[mysql]
server-id=2 -- ID의 경우 Master 에서 설정한 값과 달라야 합니다.
replicate-do-db = DB명 -- Replication 진행 할 DB 명
read_only = 1 -- 읽기 전용으로 설정 (쓰기 불가능)
max_binlog_size = 100M
expire_logs_days = 10 -- 로그 보관 주기
    

MySQL 5.6 이상

# vi /etc/my.cnf
[mysql]
server-id = 2
read_only = 1 -- 읽기 전용으로 설정 (쓰기 불가능)
max_binlog_size = 100M
expire_logs_days = 10 -- 로그 보관 주기
    

※ MySQL 5.6부터는 [replicate-do-db] 설정을 넣지 않아도 모든 DB가 Replication 자동으로 반영됩니다.

4. Slave 설정, Master dump(백업)파일 복원 (Master / Slave 데이터 동기화)

# mysql -u root -p DB명 < DB명.sql (Master 데이터 복원)
mysql> stop slave;  -- slave 중지
mysql> CHANGE MASTER TO 
        MASTER_HOST='Master Server IP', 
        MASTER_USER='slave_db', 
        MASTER_PASSWORD='패스워드', 
        MASTER_PORT=3306, 
        MASTER_LOG_FILE='mysql-bin.000001', 
        MASTER_LOG_POS=120; 
mysql> start slave;

# /etc/init.d/mysqld restart (DB 재시작)
    

5. SLAVE DB의 오류 처리

my.ini 에

slave-skip-errors=all
    

show slave status에서 발생한 오류를 넣던지, all로 설정합니다.