mysql 백업 정책 의 실현(전량 백업+증 량 백업)

7699 단어 mysql백업 정책
최근 프로젝트 는 데이터베이스 데 이 터 를 백업 해 야 하 며,각종 자 료 를 조회 하여 데이터베이스 백업 전략 을 설계 하 였 으 며,디 버 깅 을 통 해 일주일 동안 실행 한 후,현재 안정 적 인 운행 상태 에 있다.이제 생각 을 나 누 면서 gredn 사내 에 게 감 사 를 드 립 니 다.
장면 을 설계 하 다
1)증분 백업 은 월요일 부터 토요일 새벽 3 시 까지 my sql-bin.0000*을 지정 한 디 렉 터 리 로 복사 합 니 다.
2)전체 백업 은 my sqldump 를 사용 하여 전체 데이터 베 이 스 를 내 보 냅 니 다.매주 새벽 3 시 에 실 행 됩 니 다.그리고 지난주 에 남 긴 my sql-bin.0000*을 삭제 한 다음 my sql 에 대한 백업 작업 은 bak.log 파일 에 유 지 됩 니 다.
기술 점
Mysqldump、mysqlbinlog、crontab
서버 정보
호스트:centos 7;데이터베이스:mysql 5.7
준비 작업
binlog 로그 기능 열기
(1)새 디 렉 터 리,실행:

#mkdir /home/mysql
#cd /home/mysql
#mkdir mysql-bin.      #        
(2)소속 사용자/그룹 수정:(수정 하지 않 으 면 my sql 을 다시 시작 할 수 없습니다)

#chown -R mysql.mysql mysql-bin
这里写图片描述
(3)mysql 프로필 수정,실행:

#vim /etc/my.cnf
这里写图片描述
그 중에서 server-id 는 하나의 노드 의 id 를 표시 합 니 다.여 기 는 하나의 노드 만 있 기 때문에 id 를 무 작위 로 하나의 숫자 로 지정 할 수 있 습 니 다.여 기 는 id 를 1 로 설정 할 수 있 습 니 다.클 러 스 터 에 여러 개의 노드 가 있 으 면 id 가 같 을 수 없습니다(5.7 이하 버 전에 대해 server-id 를 지정 할 필요 가 없습니다).
log_bin 은 binlog 로그 파일 의 저장 경 로 를 지정 합 니 다.로그 파일 은 my sql-bin 으로 시작 합 니 다.
(4)mysql 재 부팅,실행:

#systemctl restart mysqld.service
(5)로그 파일 보기:

#cd /home/mysql/mysql-bin
这里写图片描述
(6)데이터베이스 에 들 어가 서 시작 효 과 를 봅 니 다.

#show variables like '%log_bin%';
这里写图片描述
전체 백업 스 크 립 트 작성(Mysql-Fully Bak.sh)
/home/mysql 디 렉 터 리 에 들 어가 기
새 디 렉 터 리:mkdir backup
백업 디 렉 터 리 에 들 어가 서 데 일리 디 렉 터 리 를 새로 만 듭 니 다:mkdir backup
/home/mysql 디 렉 터 리 로 전환 하고 실행:

#vim Mysql-FullyBak.sh
这里写图片描述
매개 변수 설명:
Clock-tables
현재 내 보 낸 데이터 시트 를 잠 그 는 것 은 모든 라 이브 러 리 에 있 는 시 계 를 한꺼번에 잠 그 는 것 이 아 닙 니 다.이 옵션 은 MySQL 데이터베이스 엔진 을 MyISAM 표 로 만 사용 할 수 있 으 며,Innodb 표 라면 Csingle-transaction 옵션 을 사용 할 수 있 습 니 다.
Cflush-logs
현재 로 그 를 끝내 고 새 로그 파일 을 만 듭 니 다.
Cdelete-master-logs
이전 로 그 를 지우 고 공간 을 방출 합 니 다.그러나 서버 가 미 러 의 복사 메 인 서버 로 설정 되 어 있 으 면 Cdelete-master-logs 로 MySQL 바 이 너 리 로 그 를 삭제 하 는 것 은 위험 합 니 다.서버 에서 이 바 이 너 리 로그 의 내용 을 완전히 처리 하지 못 했 을 수도 있 기 때 문 입 니 다.이 경우 PURGE MASTER LOGS 를 사용 하 는 것 이 안전 하 다.
Cquick
이 옵션 은 큰 시 계 를 내 보 낼 때 유용 합 니 다.MySQLdump 는 모든 기록 을 가 져 온 후에 메모리 에 캐 시 하 는 것 이 아니 라 서버 조회 에서 기록 을 직접 출력 하도록 강제 합 니 다.
Csingle-transaction
이 옵션 은 데 이 터 를 내 보 내기 전에 BEGIN SQL 문 구 를 제출 합 니 다.BEGIN 은 프로그램 을 막 지 않 고 내 보 낼 때 데이터 베 이 스 를 일치 시 킬 수 있 습 니 다.이 는 InnoDB 와 BDB 와 같은 사무 표 에 만 적 용 됩 니 다.이 옵션 과 Clock-tables 옵션 은 서로 배척 합 니 다.lock-tables 는 걸 려 있 는 모든 사 무 를 숨 기 고 제출 하기 때 문 입 니 다.큰 시 계 를 내 보 내 려 면 Cquick 옵션 을 결합 해 야 합 니 다.
Cevents
이벤트 내 보 내기
Cmaster-data=2
그 중 매개 변수 Cmaster-data=[0|1|2]
0:기록 하지 않 음
1:CHANGE MASTER 문장 으로 기록
2:주석 으로 기 록 된 CHANGE MASTER 문장
Cmaster-data=2 옵션 은 출력 SQL 에 완전히 백업 한 새 로그 파일 의 이름 을 기록 합 니 다.
나중에 복구 할 때 참고 하 십시오.예 를 들 어 출력 된 백업 SQL 파일 에 다음 이 포함 되 어 있 습 니 다.
CHANGE MASTER TO MASTER_LOG_FILE='MySQL-bin.000002′, MASTER_LOG_POS=106;
증분 백업 스 크 립 트 작성
/home/mysql 디 렉 터 리 로 전환 하고 실행:

#vim Mysql-DailyBak.sh
这里写图片描述
정시 퀘 스 트 crontab 설정
(1)crontab 설치(centos 7 기본 값 설치):

#yum install crontabs
서비스 조작 설명:

#/bin/systemctl start crond.service //    
#/bin/systemctl stop crond.service //    
#/bin/systemctl restart crond.service //    
#/bin/systemctl reload crond.service //    
설정:

#/bin/systemctl status crond.service //    
가입 켜 기 자동 시작:

#chkconfig Clevel 35 crond on
(2)명령 행 에 입력:

#crontab -e 
작업 추가,wq 메모리 종료

#       3:00        
0 3 * * 0 /bin/bash -x /home/mysql/Mysql-FullyBak.sh >/dev/null 2>&1
#       3:00     
0 3 * * 1-6 /bin/bash -x /home/mysql/Mysql-DailyBak.sh >/dev/null 2>&1
설명:기본적으로 crontab 는 한 번 의 작업 을 수행 한 후 이메일 을 통 해 사용자 에 게 메 시 지 를 보 내지 않도록/dev/null 2>&1 을 추가 합 니 다.
(3)정시 퀘 스 트 보기:\#crontab-l
这里写图片描述  
매개 변수 와 설명:
crontab-u//한 사용자 의 cron 서 비 스 를 설정 합 니 다.일반 루트 사용자 가 이 명령 을 수행 할 때 이 인자 가 필요 합 니 다.
crontab-l//사용자 cron 서비스의 상세 한 내용 을 보 여 줍 니 다.
crontab-r//모든 사용자 의 cron 서 비 스 를 삭제 합 니 다.
crontab-e//사용자 의 cron 서 비 스 를 편집 합 니 다.
예 를 들 어 루트 는 자신의 cron 설정 을 봅 니 다:crontab-u root-l
예 를 들 어 루트 는 사용자 fred 의 cron 설정 을 삭제 합 니 다:crontab-u fred-r
보충:
(1)/etc/crontab 파일,즉 vi/etc/crontab 파일 을 직접 편집 하여 해당 하 는 작업 을 추가 할 수 있 습 니 다(전체 시스템 에 대한 crontab 파일).
(2)crontab 가 정시 작업 을 수행 한 기록 은/var/log/cron 파일 에 기 록 됩 니 다.이 기록 은 계 정 으로 구 분 됩 니 다.
복구 작업
복구 과정 도 로그 파일 에 기록 합 니 다.데이터 양 이 많 으 면 binlog 로그 기능 을 먼저 닫 는 것 을 권장 합 니 다.
1.장면:아침 9 시 에 데이터베이스 가 공격 당 한다 고 가정 하고 전체 데이터 베 이 스 를 드 롭 합 니 다!
2.생각 회복:
완 비 된 sql 파일 에 기 록 된 CHANGE MASTER 문 구 를 이용 하여 binlog 파일 과 그 위치 정 보 를 찾 아 binlog 파일 의 증 가 된 부분 을 찾 습 니 다.
my sqlbinlog 명령 으로 상기 binlog 파일 을 sql 파일 로 내 보 내 고 drop 문 구 를 제거 합 니 다.
전체 파일 과 증분 binlog 파일 로 내 보 낸 sql 파일 을 통 해 완전한 데 이 터 를 복원 할 수 있 습 니 다.
3.회복 단계:
(1)우선 최신 백업 파일 의 압축 을 풀 고 백업 파일 디 렉 터 리 에 들 어가 서 실행 합 니 다.

#tar -zxvf XXX.sql.tgz
这里写图片描述  
(2)완 비 된 후에 추 가 된 binlog 파일 을 보고 실행 합 니 다.

#grep CHANGE XXX.sql
这里写图片描述
그림 에서 알 수 있 듯 이 이것 은 준비 시간의 binlog 파일 위치,즉 my sql-bin.00003 의 154 줄 이기 때문에 이 파일 이전의 binlog 파일 에 있 는 데 이 터 는 모두 이 완 비 된 sql 파일 에 포함 되 어 있 습 니 다.
(3)mysql-bin.00003 파일 의 154 줄 을 복원 한 후의 정보
my sql-bin.00003 디 렉 터 리 에 들 어가 서 실행(sysecokit 는 데이터베이스 이름);

#mysqlbinlog --start-position=154 --database=sysecokit mysql-bin.000003 | mysql -uroot -p -v sysecokit
(4)다른 binlog 파일(my sql-bin.00003 제외)을 sql 파일 로 내 보 내 고 실행(-d 지정 데이터베이스):

#mysqlbinlog -d sysecokit mysql-bin.00000X >00Xbin.sql
这里写图片描述  
(5)vim 에서 최신 00Xbin.sql 을 편집 하여 drop 문 구 를 삭제 합 니 다.
(6)완 비 된 데 이 터 를 복원 하고 실행:

#mysql -uroot -p < XXX.sql
\#mysql-urot-p<20180716.sql
(7)증분 데 이 터 를 복원 하고 실행(sysco 는 데이터베이스 이름):

#mysql -uroot -p syseco<00Xbin.sql
\#mysql-urot-p sysco<004bin.sql
이로부터 모든 작업 이 완료 되 었 습 니 다.일주일 후에 발생 하 는 파일 을 살 펴 보 겠 습 니 다.
这里写图片描述  
my sql 백업 정책 의 실현(전체 백업+증분 백업)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 my sql 백업 정책 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기