>  기사  >  데이터 베이스  >  binlog를 통한 MySQL 데이터 복구 방법 소개(코드 예)

binlog를 통한 MySQL 데이터 복구 방법 소개(코드 예)

不言
不言앞으로
2019-01-07 10:42:115607검색

이 기사에서는 binlog(코드 예제)를 통한 MySQL 데이터 복구 방법에 대해 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

binlog 로그의 관련 구성을 이해하면 binlog

mysql 로그 파일을 통해 데이터베이스의 데이터 복구 작업을 쉽게 마스터할 수 있습니다.

모든 성숙한 소프트웨어에는 성숙한 로그 시스템이 있습니다. 소프트웨어에 문제가 있을 때 이러한 로그는 문제의 원인을 쿼리할 수 있는 보물창고입니다. 마찬가지로 mysql도 예외는 아닙니다. mysql의 실행 상태를 기록하는 일련의 로그도 있습니다.

mysql에는 주로 다음과 같은 로그가 있습니다.

  • 오류 로그: mysql 작업 중 오류 정보를 기록합니다.

    #🎜🎜 #
  • 일반 쿼리 로그: 쿼리, 수정, 업데이트 등의 각 SQL을 포함하여 mysql이 실행 중인 명령문을 기록합니다.

  • 느린 쿼리 log : 쿼리하는데 시간이 많이 걸리는 SQL문을 기록

  • binlog 로그 : 테이블 생성, 데이터 업데이트 등 데이터 수정 기록을 기록

    # 🎜🎜##🎜 🎜#

    이러한 로그는 my.cnf 파일에 구성해야 합니다. mysql 구성 파일 경로를 모르는 경우 mysql 명령을 사용하여 찾을 수 있습니다.
mysql --verbose --help|grep -A 1 'Default options’ #该命令会罗列出my.cnf 顺序查找的路径。

binlog log# 🎜🎜#

binlog는 바이너리 로그, 즉 테이블 업데이트와 레코드 업데이트를 포함한 모든 데이터베이스 업데이트 문을 기록하는 바이너리 로그 파일입니다. 데이터 조작 언어(DML)는 주로 데이터 복구 및 구성 마스터에 사용됩니다. 복제 등에서

데이터 복구: 데이터베이스가 실수로 삭제되었거나 설명할 수 없는 일이 발생한 경우, binlog를 통해 해당 데이터를 특정 시점으로 복원할 수 있습니다.
  • Master-slave 복제: 데이터베이스가 업데이트되면 마스터 데이터베이스가 이를 기록하고 binlog를 통해 슬레이브 데이터베이스에 업데이트를 알리므로 마스터-슬레이브 데이터베이스 데이터가

  • mysql은 기능에 따라 서비스 레이어 모듈과 스토리지 엔진 레이어 모듈로 구분됩니다. 서비스 레이어는 클라이언트 연결, SQL 문을 담당합니다. 최적화 및 기타 작업 처리, 스토리지 엔진 계층은 데이터 저장 및 쿼리를 담당합니다. binlog는 서비스 계층 모듈의 로그에 속합니다. 즉, 데이터 엔진의 모든 데이터 변경 사항은 기록됩니다. binlog 로그. 데이터베이스 충돌 시 InnoDB 엔진을 사용하면 binlog 로그를 통해 InnoDB redo 로그의 커밋 상태도 확인할 수 있습니다.
binlog 로그 열기

로그 열기 방법:

1. 추가 구성

log_bin=ON
log_bin_basename=/path/bin-log
log_bin_index=/path/bin-log.index
2. log-bin 매개변수만 설정

 log-bin=/path/bin-log

binlog 로그가 활성화되면 mysql은 log_bin_index로 지정된 .index 파일과 여러 바이너리 로그 파일을 생성합니다. . mysql에서 사용하는 모든 binlog 파일은 인덱스에 순서대로 기록됩니다. binlog 로그에는 지정된 이름(또는 기본값)과 증가된 숫자가 접미사로 붙습니다(예: bin-log.000001). 다음 세 가지 상황이 발생하면 binlog 로그가 재구성됩니다.

# 🎜🎜# 파일 크기가 max_binlog_size 매개변수 값에 도달

로그 플러시 명령 실행

mysql 서비스 다시 시작

binlog 로그 형식

#🎜 🎜#binlog_format 매개변수의 값을 통해 binlog 형식을 설정할 수 있습니다. 선택적 값은 명령문, 행, 혼합
  * statement 格式:记录数据库执行的原始 SQL 语句
  * row 格式:记录具体的行的修改,这个为目前默认值
  * mixed 格式:因为上边两种格式各有优缺点,所以就出现了 mixed 格式

binlog 로그 보기 도구: mysqlbinlog# 🎜🎜##🎜🎜 #binlog는 바이너리 파일이기 때문에 다른 파일처럼 직접 열어서 볼 수는 없습니다. 그러나 mysql은 바이너리 파일을 구문 분석할 수 있는 binlog 보기 도구인 mysqlbinlog를 제공합니다. 물론, 서로 다른 형식의 로그 구문 분석 결과는 다릅니다.

1. statement 格式日志,执行 mysqlbinlog  /path/bin-log.000001,可以直接看到原始执行的 SQL 语句
2. row格式日志,则可读性没有那么好,但仍可通过参数使文档更加可读 mysqlbinlog -v  /path/bin-log.000001

mysqlbinlog 두 쌍의 매우 중요한 매개변수

  1. --start-datetime  --stop-datetime 解析某一个时间段内的binlog;
  2. --start-position  --stop-position   解析在两个position之间的binlog;

binlog를 사용하여 데이터 복원: # 🎜🎜#

binlog를 사용하여 데이터를 복구한다는 것은 본질적으로 binlog를 통해 모든 DML 작업을 찾아 잘못된 SQL 문을 제거한 다음 다시 장정의 길을 거쳐 데이터를 복구하는 것입니다.

오프라인 연습:

데이터 테이블 생성 및 초기값 삽입

    CREATE TABLE `users` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `age` int(8) DEFAULT NULL,
              PRIMARY KEY (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
     INSERT INTO `users` (`id`, `name`, `age`)
        VALUES
            (null, '姓名一', 5);
데이터베이스 위치 찾기 및 binlog 마지막 전체 백업(ps :물론 시간이 지나면 복원도 가능합니다). 여기서는 현재 상태를 백업의 초기값으로 사용하며,

    mysqldump -uroot -p T > /path/xxx.sql;   # 备份数据库
    show master status;   # 查看当前的position位置,此时值为154
여러 레코드 삽입

  INSERT INTO `users` (`id`, `name`, `age`)
  VALUES
     (null, '姓名二', 13),
     (null, '姓名三', 14),
     (null, '姓名四', 15),
     (null, '姓名五', 16),
     (null, '姓名六', 17);
오조작을 하고, 오조작 후 여러 데이터를 삽입# 🎜🎜#
update users set age = 5;
 INSERT INTO `users` (`id`, `name`, `age`)
 VALUES
    (null, '姓名七', 16),
    (null, '姓名八', 18);
오작동을 발견한 후 데이터 복구를 수행합니다. 먼저 mysql의 외부 서비스를 중지하고 백업 데이터를 사용하여 마지막 데이터를 복원합니다.

mysqlbinlog 명령을 사용하여 바이너리 파일 및 발견된 분석 결과를 분석합니다# 🎜🎜#

    误操作发生在position为706位置,且上次正常操作的结束位置在513
    在1152到结尾位置有正常执行的SQL执行
mysqlbinlog 명령을 통해 binlog 로그에서 실행 가능한 SQL 파일을 내보내고 데이터를 mysql로 ​​가져옵니다

 mysqlbinlog --start-position=154  --stop-position=513  bin-log.000001 > /path/bak.sql;
 mysql -uroot -p < /path/bak.sql;
잘못된 업데이트 건너뛰기 문을 작성한 후 7단계의 논리를 수행합니다. 후속 일반 문을 다시 실행하여 데이터 복구 작업을 완료합니다

Summary

상관없습니다 데이터베이스 충돌로 인해 사람들은 눈살을 찌푸리게 될 것입니다. Binlog는 다양한 상황에서 데이터베이스 충돌 및 데이터 손실 후 안타까운 약이라고 할 수 있습니다. 이 기사에서는 단순히 오프라인 환경을 통해 데이터베이스에 대한 데이터 복구 실험을 수행합니다. 잘못된 것이 있으면 조언을 부탁드립니다

# 🎜🎜#이 기사는 여기서 끝납니다. MySQL에 대한 자세한 내용은 PHP 중국어 웹사이트의

MySQL 튜토리얼

열을 참조하세요. ! !

위 내용은 binlog를 통한 MySQL 데이터 복구 방법 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제