기초공부 - (16) slave-skip-errors

2024. 5. 23. 00:31MySQL/Class

반응형

# slave_skip_errors는 슬레이브에서 지정(설정)한 에러가 발생했을 경우 skip해주는 파라미터이다.

 

당연한 결과이겠으나, skip이 되는지 직접 눈으로 확인해보려고 합니다.

slave_skip_erros를 수정하기 위해서는 my.cnf에서 수정 후 인스턴스를 재시작해야합니다.

 

1. 설정

두 대의 slave 중 하나의 slave 에만 특정 에러를 skip 할 수 있도록 설정을 하도록 하겠습니다.

2개이상의 에러를 설정할 때는 콤마(,)를 이용하여 구분지을 수 있다.

 

- 1062, Duplicate entry 에러를 발생시키기 위해 테이블 생성과 데이터를 source(master)에서 셋팅해 보도록 하겠습니다.

mysql> create table emp
    -> (emp_no int not null,
    -> name varchar(20) default null,
    -> PRIMARY KEY (emp_no));
Query OK, 0 rows affected (0.10 sec)

mysql> insert into emp values(10,'basketball');
Query OK, 1 row affected (0.01 sec)

mysql> insert into emp values(20,'golf');
Query OK, 1 row affected (0.01 sec)

mysql> insert into emp values(30,'soccer');
Query OK, 1 row affected (0.01 sec)

mysql> set session sql_log_bin=off;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from emp where  emp_no=10;
Query OK, 1 row affected (0.00 sec)

mysql> select * from emp;
+--------+--------+
| emp_no | name   |
+--------+--------+
|     20 | golf   |
|     30 | soccer |
+--------+--------+
2 rows in set (0.00 sec)


# 이럴경우 master는 2건 , slave는 3건이 존재합니다.
mysql> select * from test.emp;
+--------+------------+
| emp_no | name       |
+--------+------------+
|     10 | basketball |
|     20 | golf       |
|     30 | soccer     |
+--------+------------+
3 rows in set (0.00 sec)

 

 

2. 실행

# slave에는 emp_no=10이 존재합니다.
# 그러나 master 에는 존재하지 않기 때문에 master에는 insert가 되겠지만,
# slave에서는 에러가 발생될 것입니다.

mysql> insert into emp values(10,'football');
Query OK, 1 row affected (0.01 sec)

 

slave_skip_errors를 설정한 slave는 master와 다른 값을 가지고 있지만, 에러를 내지 않고 replication 연결이 끊어지지 않았습니다.

 

slave_skip_errors=OFF 로 설정한 slave는 master와 다른 값을 가지고 있지만, 1062 에러를 발생시키며 replication 연결이 끊어지는 것을 볼수 있습니다.

 

 

slave_skip_errors는 유용하게 사용할 수 있는 파라미터 인 것 같습니다.

그러나 데이터를 지속적으로 skip을 했다면 마스터와의 데이터 정합성이 맞지 않을 수 있다는 것을 기억하고 주의를 해야할 것 같습니다.

 

반응형