데이터베이스의 작업은 항상 시간이 너무 싸구려 손이있을 때 테스트 환경이 좋아하는 경우, 데이터의 손실로 이어질하지만, 공식적인 환경 있다면, 발 라이브러리를 삭제합니다. 당신이 열 경우 사실, 빈 - 로그, 또는 이러한 작업은 복원 할 수 있습니다.
큰 상자 로그 옵션에서, 오프닝에서 MySQL의 복제 마스터 /etc/my.cnf
다음과 같은 두 가지 구성
1 |
# 매우 중요한 데이터 무결성 옵션을 설정하는 #을 선도하고 제거 : 로깅 |
우리가에 초점을 맞출 필요가 어디 log_bin
server_id
당신이 깡통을 구성해야이 두, server_id
당신은 주요 분쟁에서 할 수없는, 개별 구성은 다음과 같다, 무료입니다
1 |
log_bin = / 데이터 / 로그 / mysql을 / mysql을 - bin.log #의 바이너리 로그의 로그 파일 |
다음 데이터베이스를 입력 MySQL의를 다시 시작의 빈 로그의 상태를 확인
1 |
'log_bin의 %'등의 MySQL> 쇼 변수; |
어디 log_bin
값 On
이 이미 쇼를 열log_bin
그는 싼 그것을 손에 시작
잘못된 데이터 포인트를 만들기
우리는 우리의 테스트를 위해 허위 데이터 포인트를 생성하기 시작
1 |
MySQL은> 데이터베이스 테스트를 만들; |
백업 후 우리는 백업하기 전에 먼저 소개, 테이블에 보면 5 개 개의 데이터에 먼저 --master-data
이 매개 변수를
1 |
데이터 --- 마스터 [= # 1]이 될 바이너리 로그의 위치 및 이름을 발생한다 |
우리가 백업 할 때, 당신은 우리가 데이터의 실종 된 부분을 찾을 수 있도록하기 위해, 2에이 매개 변수를 추가하고 설정해야합니다
1 |
mysqldump를 -uroot -p --master 데이터 = 2 시험> test.sql |
백업이 완료 될 때, 우리는 가짜 데이터를 추가하고, 마지막으로 의지 이러한 데이터를 볼
1 |
MySQL은> binlog_test 값을 삽입 (6), (7), (8), (9), (10); |
손 싼 그것
1 |
MySQL의> binlog_test에서 삭제; |
이 경우, 데이터 binlog_test 테이블은 모두 사라되어야한다.
데이터 복구 - 텍스트 시작
오프셋 백업에서 첫보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23λ / 데이터 / mysql을 더 test.sql
- MySQL은 덤프 10.13 DISTRIB 5.7.18 리눅스 (x86_64의)에 대한
-
- 호스트 : localhost를 데이터베이스 : 테스트
- -------------- ----------------------------------------
- 서버 버전 5.7.18 로그
! / * 40,101 SET @OLD_CHARACTER_SET_CLIENT = @@해서 character_set_client * /;
! / * 40,101 SET @OLD_CHARACTER_SET_RESULTS = @@ CHARACTER_SET_RESULTS * /;
! / * 40,101 SET의 @OLD_COLLATION_CONNECTION = @@이 collation_connection * /;
! / * 40,101 세트 이름 UTF8 * /;
! / * 40,103 SET @OLD_TIME_ZONE = @@ TIME_ZONE * /;
! / * 40,103 SET의 TIME_ZONE = '+ 0시'* /;
! / * 40,014 SET의 @OLD_UNIQUE_CHECKS = @@ UNIQUE_CHECKS, UNIQUE_CHECKS = 0 * /;
! / * 40,014 SET @OLD_FOREIGN_KEY_CHECKS = @@ FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0 * /;
! / * 40,101 SET @OLD_SQL_MODE = @@ SQL_MODE, SQL_MODE = 'NO_AUTO_VALUE_ON_ZERO'* /;
! / * 40,111 SET @OLD_SQL_NOTES = @@ SQL_NOTES, SQL_NOTES = 0 * /;
-
- 위치 복구에서 복제 또는 시점을 시작합니다
-
- 변경 MASTER는 MASTER_LOG_POS = 627 = 'mysql을-bin.000002'을, MASTER_LOG_FILE TO;SQL 백업 파일을 볼 수있는 바와 같이, 파일 오프셋 (offset)는 우리의 백업입니다 MySQL의-bin.000002는 , 오프셋은 627
보기 명령 싼 오프셋 손
우리가 봐야한다 이번에는 우리가 수행하는 삭제 작업을 오프셋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18λ /data/mysql mysqlbinlog --base64-output=decode-rows mysql-bin.000002 | grep Delete -8
# at 974
#180717 16:37:59 server id 1 end_log_pos 1046 CRC32 0x19b80686 Query thread_id=6 exec_time=0 error_code=0
SET TIMESTAMP=1531816679/*!*/;
BEGIN
/*!*/;
# at 1046
#180717 16:37:59 server id 1 end_log_pos 1100 CRC32 0x2daa51e1 Table_map: `test`.`binlog_test` mapped to number 514
# at 1100
#180717 16:37:59 server id 1 end_log_pos 1185 CRC32 0x05ebafa5 Delete_rows: table id 514 flags: STMT_END_F
# at 1185
#180717 16:37:59 server id 1 end_log_pos 1216 CRC32 0x56c7fe9e Xid = 80
COMMIT/*!*/;
# at 1216
#180717 16:44:14 server id 1 end_log_pos 1281 CRC32 0xa285c84c Anonymous_GTID last_committed=4 sequence_number=5
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 1281
#180717 16:44:14 server id 1 end_log_pos 1405 CRC32 0x4474e0a7 Query thread_id=10 exec_time=0 error_code=0我们可以看到,在第10行的时候进行了删除操作,在第8行进行了表的map映射查找,那我们这时候,将结束的偏移就可以定位到 mysql-bin.000002 的 1100 position
生成备份到手贱这段时间的数据
由于,我们仅仅对test库进行处理,所以我们可以在使用
mysqbinlog
处理的时候指定test
库即可,主要用到了以下几个参数,可参考1
2
3
4
5
6
7λ /data/mysql mysqlbinlog --help | grep position -8
-j, --start-position=#
Start reading the binlog at position N. Applies to the
first binlog passed on the command line.
--stop-position=# Stop reading the binlog at position N. Applies to the
last binlog passed on the command line.
-d, --database=name List entries for just this database (local log only).1
mysqlbinlog --start-position=627 --stop-position=1100 --database=test mysql-bin.000002 > binlog_test_drop.sql
这样,我们需要的原始备份文件,和中间缺失的时间段的备份文件就都生成好了,下一步就可以恢复了
恢复
1
2mysql -uroot -p test < test.sql
mysql -uroot -p test < binlog_test_drop.sql查看一下吧
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15MySQL의 선택> * binlog_test에서;
+ ---- +
| ID |
+ ---- +
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +따라서, basic're은 물론, 빈 - 로그 데이터를 복구 만 아니라, 수행,뿐만 아니라 MySQL의 마스터와 슬레이브는 다음 기사 완료하기 위해 그에게 의존하는 것입니다, 대한 위의 이야기 "MySQL은 마스터 - 슬레이브 구성"을 합니다 간단히 살펴
원본 : 대형 열 오용의 MySQL의 바이너리 로그 감소를 사용하여