MySQL 데이터 오류 삭제 빠 른 해결 방법(MySQL 플래시 도구)

개술
Binlog2sql 은 Python 이 개발 한 MySQL Binlog 분석 도구 로 Binlog 를 원시 SQL 로 해석 할 수 있 으 며,Binlog 를 스크롤 하 는 SQL 로 해석 할 수 있 으 며,메 인 키 를 제거 한 INSERT SQL 도 지원 하 며 DBA 와 운영 자 데이터 복구 에 도 도움 이 됩 니 다.
설치 설정
1.1 용도
데이터 빠 른 스크롤 백(플래시)
주 전환 후 새 master 에서 데 이 터 를 잃 어 버 린 복구
binlog 에서 표준 SQL 을 생 성하 여 가 져 온 파생 기능
MySQL 5.6,5.7 지원
1.2 설치
shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
shell> pip install -r requirements.txt
2.사용 방법
2.1 사용 전 설정
2.1.1 매개 변수 설정

[mysqld] 
server_id = 1 
log_bin = /var/log/mysql/mysql-bin.log 
max_binlog_size = 1G 
binlog_format = row 
binlog_row_image = full
2.1.2 user 에 필요 한 최소 권한 집합

select, super/replication client, replication slave
제안 권한 부여

select, super/replication client, replication slave
권한 설명
  • select:서버 쪽 정 보 를 읽 어야 합 니 다schema.COLUMNS 표,표 구조의 메타 정 보 를 얻 고 시각 화 된 sql 문 구 를 연결 합 니 다
  • 슈퍼/replication client:두 권한 모두 가능 합 니 다.'SHOW MASTER STATUS'를 실행 하고 server 엔 드 의 binlog 목록 을 가 져 와 야 합 니 다
  • replication slave:BINLOGDUMP 프로 토 콜 이 binlog 내용 을 가 져 올 수 있 는 권한 입 니 다
  • 2.2 기본 용법
    2.2.1 기본 용법
    표준 SQL 분석
    
    shell> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -t test3 test4 --start-file='mysql-bin.000002' 
    출력:
    
    INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'english', 4); #start 570 end 736 
    UPDATE `test`.`test3` SET `addtime`='2016-12-10 12:00:00', `data`='  ', `id`=3 WHERE `addtime`='2016-12-10 13:03:22' AND `data`='  ' AND `id`=3 LIMIT 1; #start 763 end 954 
    DELETE FROM `test`.`test3` WHERE `addtime`='2016-12-10 13:03:38' AND `data`='english' AND `id`=4 LIMIT 1; #start 981 end 1147
    스크롤 백 SQL 분석
    
    shell> python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttest3 --start-file='mysql-bin.000002' --start-position=763 --stop-position=1147 
    출력:
    
    INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'english', 4); #start 981 end 1147 
    UPDATE `test`.`test3` SET `addtime`='2016-12-10 13:03:22', `data`='  ', `id`=3 WHERE `addtime`='2016-12-10 12:00:00' AND `data`='  ' AND `id`=3 LIMIT 1; #start 763 end 954
    2.2.2 옵션
    mysql 연결 설정
    -h host; -P port; -u user; -p password
    해석 모드
    --stop-never 는 binlog 를 지속 적 으로 해석 합 니 다.선택 할 수 있다.기본 False,명령 을 실행 할 때 최신 binlog 위치 로 동기 화 합 니 다.
    -K,--no-primary-key 는 INSERT 문 구 를 홈 키 로 제거 합 니 다.선택 할 수 있다.기본 false
    -B,--flashback 은 스크롤 SQL 을 생 성하 고 큰 파일 을 처리 할 수 있 으 며 메모리 제한 을 받 지 않 습 니 다.선택 할 수 있다.거짓 을 묵인 하 다.stop-never 나 no-primary-key 와 동시에 추가 할 수 없습니다.
    --back-interval-B 모드 에 서 는 1 천 줄 씩 SQL 을 출력 할 때마다 SLEEP 를 몇 초 추가 하고,SLEEP 를 추가 하지 않 으 려 면 0 으로 설정 하 세 요.선택 할 수 있다.기본 1.0.
    해석 범위 제어
    --start-file 은 파일 이름 만 있 으 면 전체 경로 가 필요 하지 않 습 니 다.반드시.
    --start-position/--start-pos 시작 분석 위치.선택 할 수 있다.기본 값 은 start-file 의 시작 위치 입 니 다.
    --stop-file/--end-file 분석 파일 을 종료 합 니 다.선택 할 수 있다.기본 값 은 start-file 과 같은 파일 입 니 다.분석 모드 가 stop-never 이면 이 옵션 은 유효 하지 않 습 니 다.
    --stop-position/--end-pos 해석 위 치 를 종료 합 니 다.선택 할 수 있다.기본 값 은 stop-file 의 마지막 위치 입 니 다.분석 모드 가 stop-never 이면 이 옵션 은 유효 하지 않 습 니 다.
    --start-datetime 시작 분석 시간,형식'%Y-%m-%d%H:%M:%S'.선택 할 수 있다.기본적으로 필터 하지 않 습 니 다.
    --stop-datetime 해석 종료 시간,형식'%Y-%m-%d%H:%M:%S'.선택 할 수 있다.기본적으로 필터 하지 않 습 니 다.
    대상 필터
    -d,--databases 는 대상 db 의 sql 만 분석 하고 여러 라 이브 러 리 는 빈 칸 으로 분리 합 니 다.예 를 들 어-d db1 db2.선택 할 수 있다.기본 값 이 비어 있 습 니 다.
    -t,--tables 는 대상 table 의 sql 만 분석 하고 여러 장의 시 계 는 빈 칸 으로 구분 합 니 다.예 를 들 어-t tbl 1 tbl 2.선택 할 수 있다.기본 값 이 비어 있 습 니 다.
    --only-dml 는 dml 만 해석 하고 ddl 은 무시 합 니 다.선택 할 수 있다.거짓 을 묵인 하 다.
    --sql-type 은 지 정 된 형식 만 분석 하고 INSERT,UPDATE,DELETE 를 지원 합 니 다.여러 종 류 는 빈 칸 으로 구분 합 니 다.예 를 들 어 sql-type INSERT DELETE.선택 할 수 있다.기본 값 은 첨삭,수정 모두 해석 합 니 다.이 인 자 를 사 용 했 지만 유형 을 채 우지 않 으 면 세 가 지 는 해석 하지 않 습 니 다.
    2.3 응용 사례
    2.3.1 전체 표 데 이 터 를 잘못 삭제 하면 긴급 스크롤 백 이 필요 합 니 다.
    플래시 상세 소 개 는 example 디 렉 터 리 에서 example/mysql-flashback-priciple-and-practice.md 를 참조 할 수 있 습 니 다.
    테스트 라 이브 러 리 tbl 표 기 존 데이터
    
    mysql> select * from tbl; 
    +----+--------+---------------------+ 
    | id | name | addtime | 
    +----+--------+---------------------+ 
    | 1 |    | 2016-12-10 00:04:33 | 
    | 2 |    | 2016-12-10 00:04:48 | 
    | 3 |    | 2016-12-13 20:25:00 | 
    | 4 |    | 2016-12-12 00:00:00 | 
    +----+--------+---------------------+ 
    4 rows in set (0.00 sec) 
    ​ 
    mysql> delete from tbl; 
    Query OK, 4 rows affected (0.00 sec) 
    ​ 
    20:28 ,tbl       
    
    mysql> select * from tbl; 
    Empty set (0.00 sec)
    복구 데이터 단계:
    1.my sql 에 로그 인하 여 현재 binlog 파일 보기
    
    mysql> show master status; 
    +------------------+-----------+ 
    | Log_name | File_size | 
    +------------------+-----------+ 
    | mysql-bin.000051 | 967 | 
    | mysql-bin.000052 | 965 | 
    +------------------+-----------+
    2.최신 binlog 파일 은 my sql-bin.000052 입 니 다.SQL 을 잘못 조작 한 binlog 위 치 를 다시 찾 습 니 다.오 작 동 자 는 대체적인 오 작 동 시간 만 알 수 있 고 우 리 는 대체적인 시간 에 따라 데 이 터 를 필터 한다.
    
    shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-datetime='2016-12-13 20:25:00' --stop-datetime='2016-12-13 20:30:00'
    출력:
    
    INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:26:00', 4, '  '); #start 317 end 487 time 2016-12-13 20:26:26 
    UPDATE `test`.`tbl` SET `addtime`='2016-12-12 00:00:00', `id`=4, `name`='  ' WHERE `addtime`='2016-12-13 20:26:00' AND `id`=4 AND `name`='  ' LIMIT 1; #start 514 end 701 time 2016-12-13 20:27:07 
    DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:33' AND `id`=1 AND `name`='  ' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 
    DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-10 00:04:48' AND `id`=2 AND `name`='  ' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 
    DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-13 20:25:00' AND `id`=3 AND `name`='  ' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05 
    DELETE FROM `test`.`tbl` WHERE `addtime`='2016-12-12 00:00:00' AND `id`=4 AND `name`='  ' LIMIT 1; #start 728 end 938 time 2016-12-13 20:28:05
    3.우 리 는 sql 을 잘못 조작 한 정확 한 위 치 를 728-938 사이 에 얻 었 습 니 다.그 다음 에 위치 에 따라 더 걸 러 내 고 fllashback 모드 로 스크롤 sql 을 생 성하 여 스크롤 sql 이 정확 한 지 확인 합 니 다(주:실제 환경 에서 이 단 계 는 필요 한 sql 을 계속 선별 합 니 다.grep,편집기 등 결합)
    
    shell> python binlog2sql/binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttbl --start-file='mysql-bin.000052' --start-position=3346 --stop-position=3556 -B > rollback.sql | cat
    출력:
    
    INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-12 00:00:00', 4, '  '); #start 728 end 938 time 2016-12-13 20:28:05 
    INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-13 20:25:00', 3, '  '); #start 728 end 938 time 2016-12-13 20:28:05 
    INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:48', 2, '  '); #start 728 end 938 time 2016-12-13 20:28:05 
    INSERT INTO `test`.`tbl`(`addtime`, `id`, `name`) VALUES ('2016-12-10 00:04:33', 1, '  '); #start 728 end 938 time 2016-12-13 20:28:05
    4.스크롤 백 sql 이 정확 한 지 확인 하고 스크롤 백 문 구 를 실행 합 니 다.mysql 에 로그 인하 여 데이터 스크롤 백 에 성 공 했 습 니 다.
    
    shell> mysql -h127.0.0.1 -P3306 -uadmin -p'admin' < rollback.sql 
    ​ 
    mysql> select * from tbl; 
    +----+--------+---------------------+ 
    | id | name | addtime | 
    +----+--------+---------------------+ 
    | 1 |    | 2016-12-10 00:04:33 | 
    | 2 |    | 2016-12-10 00:04:48 | 
    | 3 |    | 2016-12-13 20:25:00 | 
    | 4 |    | 2016-12-12 00:00:00 | 
    +----+--------+---------------------+
    3.총화
    3.1 제한(대비 mysqlbinlog)
    my sql server 를 열 어야 합 니 다.오프라인 모드 에서 분석 할 수 없습니다.
    파라미터 binlogrow_image 는 FULL 이 어야 합 니 다.MINIMAL 은 지원 되 지 않 습 니 다.
    분석 속도 가 mysql binlog 보다 못 합 니 다.
    3.2 장점(대비 mysql binlog)
    순수 Python 개발,설치 및 사용 모두 간단 합 니 다.
    자체 flashback,no-primary-key 분석 모드,패 치 를 설치 할 필요 가 없습니다.
    flashback 모드 에 서 는 실전 으로 되 돌아 가기 에 더욱 적합 합 니 다.
    표준 SQL 로 해석 하여 이해,선별 이 편리 합 니 다.
    코드 는 쉽게 개조 되 고 더 많은 개성 화 된 해석 을 지원 할 수 있 습 니 다.
    총결산
    위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 MySQL 데이터 오 류 를 삭제 하 는 빠 른 해결 방법 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
    만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

    좋은 웹페이지 즐겨찾기