>  기사  >  데이터 베이스  >  MySQL - 데이터베이스 증분 데이터 복구의 그래픽 코드 사례

MySQL - 데이터베이스 증분 데이터 복구의 그래픽 코드 사례

黄舟
黄舟원래의
2017-03-09 11:27:201425검색

이 글은 MySQL 데이터베이스 증분 데이터 복구의 그래픽 코드 사례를 소개합니다. 도움이 필요한 친구들은 참고하세요

1. 사용 시나리오

  • MySQL 데이터베이스는 매일 0시에 자동으로 준비가 완료됩니다

  • 어느 날 아침 9시에 Zhang San이 실수로 데이터베이스를 삭제했습니다

  • 완전한 데이터 파일과 증분 binlog 파일을 통해 데이터를 복구해야 합니다

2. 주요 아이디어 및 원칙

  • 전체 sql 파일에 기록된 CHANGE MASTER 문과 binlog 파일 및 해당 위치 정보를 사용하여 binlog 파일의 증분 부분을 찾습니다

  • mysqlbinlog 명령을 사용하여 위 binlog 파일을 sql 파일로 내보내고 drop 문을 제거합니다.

  • 전체 파일 및 증분 binlog 파일을 통해 sql 파일을 내보냅니다. 완전한 데이터로 복원 가능

3. 프로세스 다이어그램

4. 시뮬레이션 데이터

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(20) NOT NULL,
  `age` tinyint(2) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `index_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 

mysql> insert student values(1,'zhangsan',20); 
mysql> insert student values(2,'lisi',21); 
mysql> insert student values(3,'wangwu',22);


2. 전체 명령

# mysqldump -uroot -p -B -F -R -x --master-data=2 test|gzip >/server/backup/test_$(date +%F).sql.gz

参数说明:
-B 指定数据库
-F 刷新日志
-R 备份存储过程等
-x 锁表
--master-data 在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息


3. 계속 데이터 삽입 및 데이터베이스 삭제

rree
이때, 완전한 준비와 오작동의 순간 사이에 사용자가 작성한 데이터에는 binlog를 복원해야 합니다



4. 백업 후 새로 추가된 binlog 파일을 확인합니다

mysql> insert student values(6,'xiaoming',20);
 
mysql> insert student values(6,'xiaohong',20); 

此时误操作,删除了test数据库
mysql> drop database test;

전체 준비 당시의 binlog 파일 위치인데, mysql-bin.000003의 107번째 라인이므로 이 파일 이전의 binlog 파일에 있던 데이터가 이미 이 전체 SQL 파일에 포함되어 있습니다.



5. binlog 파일을 이동하고, sql을 읽고, drop 문을 제거합니다.

# cd /server/backup/
# ls
test_2017-03-04.sql.gz
# gzip -d test_2017-03-04.sql.gz 
# grep CHANGE test_2017-03-04.sql 
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107;

복구 중 데이터를 완전히 준비하기 전에 binlog 파일을 제거해야 합니다. 그렇지 않으면 복구 프로세스 중에 명령문이 binlog에 계속 기록되어 결국 증분 복구 데이터 부분이 혼란스러워집니다.



6. 데이터 복구

rreee


5.


마스터-슬레이브 복제 등이 없는 인위적인 SQL 문이나 Hot Standby 상황으로 인한 오작동 복구에 적합

  • 복구 조건 완전해야 하고 모든 증분 데이터

  • 복원 시 외부 업데이트를 중지하는 것이 좋습니다. 즉, 데이터베이스 업데이트를 금지하는 것이 좋습니다.

  • 복원 먼저 전체 백업 시간을 설정한 후 전체 백업 시간을 설정합니다. 이후 증분 로그를 SQL 파일에 순서대로 복원한 다음, 파일에서 문제가 있는 SQL 문을 삭제(시간 및 위치 기준으로도 가능)한 다음 SQL 파일로 복원합니다. 데이터베이스


위 내용은 MySQL - 데이터베이스 증분 데이터 복구의 그래픽 코드 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.