MySQL binlog_ignore_db 매개 변수의 구체 적 인 사용

선언: 
앞의 글 을 통 해 우 리 는 binlog 가 데이터베이스 에서 실 행 된 모든 DDL 과 DML 문 구 를 기록 할 것 이라는 것 을 알 게 되 었 다.기본 적 인 상황 에서 모든 라 이브 러 리 의 작업 을 기록 할 수 있 습 니 다.예 를 들 어 특정한 라 이브 러 리 에 만 binglog 를 기록 하거나 특정한 라 이브 러 리 에 binlog 를 기록 하도록 한다 면 이러한 수 요 를 지원 하 시 겠 습 니까?이 문장 을 우리 함께 봅 시다.
1. binlog_do_db 와 binlogignore_db
데이터베이스 인 스 턴 스 가 binlog 를 열 때 show master status 명령 을 실행 하면 Binlog 가 있 습 니 다.Do_DB 와 BinlogIgnore_DB 옵션.

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000009 |   282838 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
기본 적 인 상황 에서 이 두 옵션 이 비어 있 으 면 이 두 매개 변 수 는 어떤 역할 을 합 니까?그 말 그대로 하나의 라 이브 러 리 에 binglog 만 기록 하 게 하 는 것 이 아 닙 니까?필 자 는 공식 문 서 를 찾 아 보고 이 두 매개 변수의 역할 을 간단하게 설명 한다.
  • binlog_do_db:이 매개 변 수 는 지정 한 데이터베이스 의 바 이 너 리 로그 만 기록 하고 모든 기록 을 기본 으로 합 니 다
  • binlog_ignore_db:이 매개 변 수 는 지정 한 데이터베이스 의 바 이 너 리 로 그 를 기록 하지 않 음 을 표시 합 니 다
  • 이 두 매개 변 수 는 상호 배척 관계 로 보통 하나의 설정 만 선택 하고 시작 명령 줄 이나 설정 파일 에 만 추가 할 수 있 습 니 다.여러 개의 데이터 베 이 스 를 줄 별로 기록 할 것 을 지정 합 니 다.예 를 들 어 다음 과 같 습 니 다.
    
    #    db1 db2   binlog
    [mysqld]
    binlog_do_db = db1
    binlog_do_db = db2
    
    #    db3 db4   binlog
    [mysqld]
    binlog_ignore_db = db3
    binlog_ignore_db = db4
    또한,이 두 가지 인자 의 구체 적 인 역할 여 부 는 binlog 형식 과 관련 이 있 으 며,어떤 경우 에는 binlog 형식 을 STATEMENT 또는 ROW 로 설정 하면 서로 다른 효과 가 있 을 수 있 습 니 다.실제 응용 에서 binlogignore_db 의 용도 가 더욱 광범 위 합 니 다.예 를 들 어 특정한 라 이브 러 리 의 데 이 터 는 그다지 중요 하지 않 습 니 다.서버 의 기록 압력 을 줄 이기 위해 서 저 희 는 이 라 이브 러 리 에 binlog 를 기록 하지 못 하 게 할 수 있 습 니 다.인터넷 에 도 binlog 를 설치 하 라 는 글 이 있 습 니 다.ignore_db 는 라 이브 러 리 동기 화 오 류 를 초래 할 수 있 습 니 다.이 매개 변 수 를 설정 하 는 것 이 어떤 효과 가 있 는 지 구체 적 으로 실험 해 보 겠 습 니 다.
    2. binlog_ignore_db 구체 적 효과
    먼저 설명 하 겠 습 니 다.제 테스트 데이터 베 이 스 는 5.7.23 커 뮤 니 티 버 전 으로 모두 testdb,logdb 두 개의 업무 창고 가 있 습 니 다.저 희 는 logdb 를 설정 하여 binlog 를 기록 하지 않 습 니 다.다음은 구체 적 인 실험 을 하 겠 습 니 다.
    
    # binlog   ROW    
    
    # 1.    use db
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |      154 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    mysql> select database();
    +------------+
    | database() |
    +------------+
    | NULL       |
    +------------+
    1 row in set (0.00 sec)
    mysql> CREATE TABLE testdb.`test_tb1` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.06 sec)
    
    mysql> insert into testdb.test_tb1 values (1001,'sdfde');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |      653 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> CREATE TABLE logdb.`log_tb1` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> insert into logdb.log_tb1 values (1001,'sdfde');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |      883 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    mysql> insert into logdb.log_tb1 values (1002,'sdsdfde'); 
    Query OK, 1 row affected (0.01 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |      883 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    
    mysql> alter table logdb.log_tb1 add column c3 varchar(20);   
    Query OK, 0 rows affected (0.12 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     1070 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    #   :        logdb    DDL    DML
    
    # 2.   use testdb  
    mysql> use testdb;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> select database();
    +------------+
    | database() |
    +------------+
    | testdb     |
    +------------+
    1 row in set (0.00 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     1070 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> CREATE TABLE `test_tb2` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> insert into test_tb2 values (1001,'sdfde');
    Query OK, 1 row affected (0.04 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     1574 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> CREATE TABLE logdb.`log_tb2` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     1810 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> insert into logdb.log_tb2 values (1001,'sdfde');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     1810 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    #   :  logdb    DDL    DML 
    
    # 3.   use logdb  
    mysql> use logdb;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> select database();
    +------------+
    | database() |
    +------------+
    | logdb      |
    +------------+
    1 row in set (0.00 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     1810 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> CREATE TABLE testdb.`test_tb3` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.23 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     1810 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> insert into testdb.test_tb3 values (1001,'sdfde');
    Query OK, 1 row affected (0.02 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     2081 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> CREATE TABLE `log_tb3` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     2081 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> insert into log_tb3 values (1001,'sdfde');
    Query OK, 1 row affected (0.02 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     2081 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    #   :logdb              DDL
    
    # 4.             
    mysql> use testdb;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     2081 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> CREATE TABLE `test_tb4` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> insert into test_tb4 values (1001,'sdfde');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     2585 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> use logdb;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> CREATE TABLE `log_tb4` ( id int , name varchar(30) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     2585 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> insert into log_tb4 values (1001,'sdfde');
    Query OK, 1 row affected (0.01 sec)
    
    mysql> show master status;
    +---------------+----------+--------------+------------------+-------------------+
    | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +---------------+----------+--------------+------------------+-------------------+
    | binlog.000011 |     2585 |              | logdb            |                   |
    +---------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    #   :        logdb    
    마찬가지 로 binlog 형식 을 STATEMENT 로 설정 하고 다시 테스트 를 진행 합 니 다.여기 서 테스트 과정 을 더 이상 설명 하지 않 고 STATEMENT 형식 에서 의 실험 결 과 를 정리 합 니 다.
    4.567917.데이터 베 이 스 를 선택 하지 않 고 모든 것 을 기록 합 니 다
  • testdb 를 선택 하여 testdb 와 logdb 를 각각 조작 하고 모든 라 이브 러 리 가 기록 합 니 다
  • logdb 를 선택 하여 testdb 와 logdb 를 각각 조작 하고 모든 라 이브 러 리 는 기록 하지 않 습 니 다
  • 4.567917.특정한 라 이브 러 리 를 선택 하고 현재 라 이브 러 리 만 조작 하면 기록 이 정상 적 이 고 logdb 를 기록 하지 않 습 니 다이렇게 많은 실험 데 이 터 를 보 았 는데 당신 은 눈 이 어 지 럽 습 니까?다음은 우리 가 사고 지도 형식 으로 다음 과 같이 요약 합 니 다.

    그 러 고 보 니 binlogignore_db 매개 변수의 효 과 는 확실히 여러 가지 요소 와 관련 이 있 습 니 다.특히 라 이브 러 리 에서 메 인 라 이브 러 리 는 이 매개 변 수 를 사용 하 는 것 을 특히 조심해 야 합 니 다.메 인 동기 화 오류 가 발생 하기 쉽 습 니 다.그러나 엄격 한 기준 에 따라 현재 데이터 베 이 스 를 조작 하면 문제 가 되 지 않 는 다.이 는 엄격하게 기준 에 따라 업무 계 정의 특정한 라 이브 러 리 에 만 권한 을 부여 하고 각종 문제 가 발생 하지 않도록 해 야 한 다 는 것 을 알려 준다.
    요약: 
    여러분 독자 들 이 이런 매개 변 수 를 소개 하 는 글 에 관심 이 있 는 지 모 르 겠 습 니 다.데이터베이스 운영 자 들 이 관심 이 많 았 나 봐 요.이 글 은 주로 binlog 에 관 한 binlog 를 소개 합 니 다.ignore_db 매개 변수 의 구체 적 인 역할 은 본 글 의 실험 환경 이 아직 주도면밀 하지 않 을 수 있 습 니 다.관심 이 있 는 학생 들 은 공식 문 서 를 참고 하여 이 매개 변수 에 대해 더욱 깊이 이해 하 는 데 도움 이 될 것 입 니 다.
    이상 은 MySQL binlog 매개 변수 사용 에 대한 상세 한 내용 입 니 다.MySQL binlog 매개 변수 에 대한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기