MySQL 에서 Binary Log 바 이 너 리 로그 파일 의 기본 동작 명령 소결

MySQL Binary Log 는 흔히 말 하 는 bin-log 로 my sql 에서 변경 을 실행 하여 발생 하 는 바 이 너 리 로그 파일 로 그 주요 역할 은 두 가지 가 있 습 니 다.
*데이터 복구
*마스터 데이터베이스.슬 레이 브 단 에서 삭제 수정 을 실행 하고 master 와 동기 화 를 유지 합 니 다.
1.바 이 너 리 로그 기능 오픈
     my sql 설정 파일 을 수정 해 야 합 니 다.이 시험 환경 은 win 7 입 니 다.설정 파일 은 my sql 설치 디 렉 터 리\MySQL Server 5.1 의 my.ini 입 니 다.log 를 추가 합 니 다.bin = mysql_즉시 

  eg: 
  [mysqld] 
    ...... 
    log_bin = mysql_bin 
    ...... 
  log_bin    bin-log    ,    6      , 000001  ,       ,       : 
    mysql_bin.000001 
    mysql_bin.000002 
    ...... 
  
    저장 후 my sql 을 다시 시작 할 서버 를 설정 합 니 다.show variables like 를 사용 합 니 다.  '%bin%'bin-log 가 열 렸 는 지 확인 합 니 다.그림: 
201512893640786.png (536×205)
2.생 성 된 binary log 보기
   bin-log 는 바 이 너 리 파일 이기 때문에 메모 장 등 편집 기 를 통 해 직접 열 수 없습니다.my sql 은 두 가지 방식 으로 보기 방식 을 제공 합 니 다.소개 하기 전에 데이터 베 이 스 를 추가 삭제 하고 수정 하 는 작업 을 합 니 다.그렇지 않 으 면 log 안의 데이터 가 좀 비어 있 습 니 다. 

 create table bin( id int(10) primary key auto_increment,name varchar(255));
(테스트 전에 나 는 이미 표를 만 들 었 다) 

 insert into bin(name) values ('orange'); 
     1.클 라 이언 트 에서 사용  show binlog events in 'mysql_bin.000001'  문 구 를 살 펴 보면 정렬 이 아름 답 기 때문에 끝 에\G 를 추가 하여 결 과 를 가로 세로 로 바 꿀 수 있 습 니 다.이때 끝 은 추가 할 필요 가 없습니다.문장 끝 부호.
      eg:

mysql> show binlog events in 'mysql_bin.000001'\G 
...............  ............... 
*************************** 3. row *************************** 
 Log_name: mysql_bin.000001 
  Pos: 174 
Event_type: Intvar 
 Server_id: 1 
End_log_pos: 202 
  Info: INSERT_ID=2 
*************************** 4. row *************************** 
 Log_name: mysql_bin.000001 
  Pos: 202 
Event_type: Query 
 Server_id: 1 
End_log_pos: 304 
  Info: use `test`; insert into bin(name) values ('orange') 
*************************** 5. row *************************** 
...............  ............... 
  • Log_name:이 log 는 그 파일 에 존재 합 니 다.위 에서 보 듯 이 두 log 는 모두 my sql 와 존재 합 니 다.파일
  • Pos:log 가 bin-log 에서 시작 하 는 위치
  • Event_type:log 의 유형 정보
  • Server_id:설정 에 있 는 server 를 볼 수 있 습 니 다.id,log 는 그 서버 생 성
  • End_log_pos:log 가 bin-log 에서 의 끝 위치
  • Info:log 의 일부 비고 정 보 는 어떤 조작 을 했 는 지 직관 적 으로 볼 수 있다.
  • 2.mysql 자체 도구 mysql binlog 를 사용 합 니 다.이것 은 우리 가 bin-log 에 하 드 디스크 가 존재 하 는 위 치 를 알 아야 합 니 다.win 7 은 기본적으로 C:\ProgramData\\MySQL\MySQL Server 5.1\\data 폴 더 아래 에 존재 합 니 다.이 폴 더 가 없 으 면 설정 파일 에 있 는 것 을 통 해  datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"포 지 셔 닝,아직 없 으 면"각 시스템 의 검색 기능 이 잘 되 고 있다!"이런 조회 방식 은 그다지 아름 답지 않다.다음 과 같다.
    
    C:\ProgramData\MySQL\MySQL Server 5.1\data>mysqlbinlog mysql_bin.000001 
    /*!40019 SET @@session.max_insert_delayed_threads=0*/; 
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
    DELIMITER /*!*/; 
    # at 4 
    #121015 16:35:56 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.51-community-log created 121015 16:35:56 at startup 
    ROLLBACK/*!*/; 
    BINLOG ' 
    7Mp7UA8BAAAAZgAAAGoAAAAAAAQANS4xLjUxLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA 
    AAAAAAAAAAAAAAAAAADsyntQEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC 
    '/*!*/; 
    # at 106 
    #121015 16:36:51 server id 1 end_log_pos 174 Query thread_id=2  exec_time=0  error_code=0 
    SET TIMESTAMP=1350290211/*!*/; 
    SET @@session.pseudo_thread_id=2/*!*/; 
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1, @@session.autocommit=1/*!*/; 
    SET @@session.sql_mode=1344274432/*!*/; 
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; 
    /*!\C utf8 *//*!*/; 
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
    SET @@session.lc_time_names=0/*!*/; 
    SET @@session.collation_database=DEFAULT/*!*/; 
    BEGIN 
    /*!*/; 
    # at 174 
    #121015 16:36:51 server id 1 end_log_pos 202 Intvar 
    SET INSERT_ID=3/*!*/; 
    # at 202 
    #121015 16:36:51 server id 1 end_log_pos 309 Query thread_id=2  exec_time=0  error_code=0 
    use test/*!*/; 
    SET TIMESTAMP=1350290211/*!*/; 
    insert into bin(name) values('xishizhaohua') 
    /*!*/; 
    # at 309 
    #121015 16:36:51 server id 1 end_log_pos 336 Xid = 28 
    COMMIT/*!*/; 
    # at 336 
    #121015 16:37:25 server id 1 end_log_pos 379 Rotate to mysql_bin.000002 pos: 4 
    DELIMITER ; 
    # End of log file 
    ROLLBACK /* added by mysqlbinlog */; 
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; 
    
    
    조판 이 좀 어 지 럽 지만 그림 에서 우 리 는 시간 스탬프,자체 적 으로 증가 하 는 오프셋,자동 으로 사 무 를 제출 하 는 지 등 더 많은 정 보 를 얻 을 수 있다.아래 그림 에서 추출 한 일부분 입 니 다.
    201512893921181.png (921×129)
    3.bin 이용로그 복구 데이터
        (1).가장 오래 사용 하 는 것 은 지정 한 데이터 엔 드 의 데 이 터 를 답장 하 는 것 입 니 다.데이터 베 이 스 를 직접 복원 할 수 있 습 니 다. 
    
     mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456 
    
          sql 파일 로 내 보 낼 수도 있 고 데이터베이스 에 가 져 올 수도 있 습 니 다. 
    
      mysqlbinlog --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:\1.sql 
      source d:\1.sql 
    
         (2).시작\끝 위 치 를 지정 합 니 다.위 에서 보 는 바 이 너 리 로 그 는 어떤 로그 의 시작 부터 끝 까지 의 위 치 를 알 수 있 습 니 다.복구 과정 에서 A 위치 에서 B 위치 까지 의 로 그 를 지정 할 수 있 습 니 다.아래 두 개의 인자 로 지정 해 야 합 니 다. 
    
     --start-positon="50" //   50     
     --stop-postion="100"//   100     
    
       마지막 으로 빈 몇 개 소개 해 드릴 게 요.log 동작:
       (1).마지막 빈 로그 파일 을 보 세 요.현재 위치 입 니 다.
    201512894032929.png (527×86)
        (2).새 로그 파일 을 사용 합 니 다.일반적으로 데이터 베 이 스 를 백업 한 후 실행 합 니 다.
    201512894049040.png (553×262)
        (3).기 존의 bin-log 를 삭제 합 니 다.
    2015128101149336.png (544×256)
    4.binary log 관련 변수 와 매개 변수
    명령 행 인자
      --log-bin [=file_name]
      이 매개 변 수 를 설정 하면 binlog 기능 을 사용 하고 경로 이름 을 만 듭 니 다.
      --log-bin-index[=file]
      이 매개 변 수 를 설정 하 는 것 은 바 이 너 리 색인 파일 의 경로 와 이름 을 지정 합 니 다.
      --max_binlog_size
     Binlog 의 최대 값,최대 와 기본 값 은 1GB 입 니 다.이 설정 은 Binlog 의 크기 를 엄 격 히 제어 할 수 없습니다.특히 Binlog 가 최대 값 에 가 깝 고 큰 사 무 를 만 났 을 때,
    트 랜 잭 션 의 완전 성 을 확보 하기 위해 로 그 를 전환 하 는 동작 을 할 수 없습니다.이 트 랜 잭 션 의 모든 SQL 을 현재 로그 에 기록 할 수 있 습 니 다.트 랜 잭 션 이 끝 날 때 까지.
      --binlog-do-db=db_name
      이 매개 변 수 는 지정 한 데이터베이스 의 바 이 너 리 로그 만 기록 합 니 다.
      --binlog-ignore-db=db_name
      이 매개 변 수 는 지정 한 데이터 베 이 스 를 기록 하지 않 는 바 이 너 리 로 그 를 표시 합 니 다.
    시스템 변수
      log_bin
      binlog_cache_size
      이 매개 변 수 는 binlog 가 사용 하 는 메모리 크기 를 표시 합 니 다.상태 변 수 를 통 해 binlogcache_use 와 binlogcache_disk_use 는 테스트 를 돕는다.
      max_binlog_cache_size
      이 매개 변 수 는 binlog 가 사용 하 는 메모리 의 최대 크기 를 표시 합 니 다.
      binlog_cache_use
      바 이 너 리 로그 캐 시 를 사용 하 는 트 랜 잭 션 수
      binlog_cache_disk_use
      바 이 너 리 로그 캐 시 를 사용 하지만 binlog 를 초과 합 니 다.cache_size 값 과 임시 파일 을 사용 하여 트 랜 잭 션 의 문 구 를 저장 합 니 다.
      binlog_do_db
      binlog_ignore_db
      sync_binlog
      이 매개 변 수 는 my sql 의 성능 과 완전 성에 직접적인 영향 을 줍 니 다.
      sync_binlog=0:
      트 랜 잭 션 을 제출 하면 Mysql 은 binlog 에 불과 합 니 다.cache 의 데 이 터 는 binlog 파일 에 기록 되 지만 fsync 와 같은 디스크 는 실행 되 지 않 습 니 다.동기 화 명령 은 파일 시스템 에 캐 시 를 디스크 에 새로 고치 고 Filesystem 이 언제 동기 화 할 지 스스로 결정 하도록 합 니 다.이것 은 성능 이 가장 좋 습 니 다.
      sync_binlog=0,n 차 트 랜 잭 션 을 제출 한 후 Mysql 은 fsync 와 같은 디스크 동기 화 명령 을 실행 하여 파일 시스템 에 Binlog 파일 캐 시 를 디스크 로 새로 고침 하 라 고 알 립 니 다.
      Mysql 의 기본 설정 은 sync 입 니 다.binlog=0,즉 강제 적 인 디스크 리 셋 명령 을 하지 않 습 니 다.이때 성능 이 가장 좋 지만 위험 도 가장 큽 니 다.시스템 Crash 가 되면 파일 시스템 캐 시 에 있 는 모든 Binlog 정 보 를 잃 어 버 립 니 다.

    좋은 웹페이지 즐겨찾기