이 기사에서는 binlog(코드 예제)를 통한 MySQL 데이터 복구 방법에 대해 소개합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
binlog 로그의 관련 구성을 이해하면 binlog
mysql 로그 파일을 통해 데이터베이스의 데이터 복구 작업을 쉽게 마스터할 수 있습니다.
모든 성숙한 소프트웨어에는 성숙한 로그 시스템이 있습니다. 소프트웨어에 문제가 있을 때 이러한 로그는 문제의 원인을 쿼리할 수 있는 보물창고입니다. 마찬가지로 mysql도 예외는 아닙니다. mysql의 실행 상태를 기록하는 일련의 로그도 있습니다.
mysql에는 주로 다음과 같은 로그가 있습니다.
오류 로그: mysql 작업 중 오류 정보를 기록합니다.
#🎜🎜 ## 🎜🎜##🎜 🎜#
이러한 로그는 my.cnf 파일에 구성해야 합니다. mysql 구성 파일 경로를 모르는 경우 mysql 명령을 사용하여 찾을 수 있습니다.mysql --verbose --help|grep -A 1 'Default options’ #该命令会罗列出my.cnf 顺序查找的路径。
binlog log# 🎜🎜#
binlog는 바이너리 로그, 즉 테이블 업데이트와 레코드 업데이트를 포함한 모든 데이터베이스 업데이트 문을 기록하는 바이너리 로그 파일입니다. 데이터 조작 언어(DML)는 주로 데이터 복구 및 구성 마스터에 사용됩니다. 복제 등에서
데이터 복구: 데이터베이스가 실수로 삭제되었거나 설명할 수 없는 일이 발생한 경우, binlog를 통해 해당 데이터를 특정 시점으로 복원할 수 있습니다.binlog 로그 열기
Master-slave 복제: 데이터베이스가 업데이트되면 마스터 데이터베이스가 이를 기록하고 binlog를 통해 슬레이브 데이터베이스에 업데이트를 알리므로 마스터-슬레이브 데이터베이스 데이터가
- mysql은 기능에 따라 서비스 레이어 모듈과 스토리지 엔진 레이어 모듈로 구분됩니다. 서비스 레이어는 클라이언트 연결, SQL 문을 담당합니다. 최적화 및 기타 작업 처리, 스토리지 엔진 계층은 데이터 저장 및 쿼리를 담당합니다. binlog는 서비스 계층 모듈의 로그에 속합니다. 즉, 데이터 엔진의 모든 데이터 변경 사항은 기록됩니다. binlog 로그. 데이터베이스 충돌 시 InnoDB 엔진을 사용하면 binlog 로그를 통해 InnoDB redo 로그의 커밋 상태도 확인할 수 있습니다.
로그 열기 방법:
1. 추가 구성log_bin=ON
log_bin_basename=/path/bin-log
log_bin_index=/path/bin-log.index
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);
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);
mysqlbinlog 명령을 사용하여 바이너리 파일 및 발견된 분석 결과를 분석합니다# 🎜🎜#
误操作发生在position为706位置,且上次正常操作的结束位置在513 在1152到结尾位置有正常执行的SQL执行
mysqlbinlog --start-position=154 --stop-position=513 bin-log.000001 > /path/bak.sql; mysql -uroot -p < /path/bak.sql;
Summary
상관없습니다 데이터베이스 충돌로 인해 사람들은 눈살을 찌푸리게 될 것입니다. Binlog는 다양한 상황에서 데이터베이스 충돌 및 데이터 손실 후 안타까운 약이라고 할 수 있습니다. 이 기사에서는 단순히 오프라인 환경을 통해 데이터베이스에 대한 데이터 복구 실험을 수행합니다. 잘못된 것이 있으면 조언을 부탁드립니다# 🎜🎜#이 기사는 여기서 끝납니다. MySQL에 대한 자세한 내용은 PHP 중국어 웹사이트의
MySQL 튜토리얼열을 참조하세요. ! !
위 내용은 binlog를 통한 MySQL 데이터 복구 방법 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!