>운영 및 유지보수 >리눅스 운영 및 유지 관리 >xtrabackup 백업 및 복구, 작동 원리

xtrabackup 백업 및 복구, 작동 원리

PHP中文网
PHP中文网원래의
2017-06-20 13:14:132283검색

XtraBackup 물리적 백업

Percona XtraBackup은 InnoDB 및 XtraDB 데이터베이스에 대해 비차단 백업을 수행하는 세계 유일의 오픈 소스 무료 MySQL 핫 백업 소프트웨어입니다. Percona XtraBackup을 사용하면 다음과 같은 이점을 얻을 수 있습니다.

  • 빠르고 안정적인 백업

  • 백업 중 무중단 트랜잭션 처리

  • 디스크 공간 및 네트워크 대역폭 절약

  • 자동 백업 확인

  • 데이터베이스를 일시 중단하지 않고 핫 InnoDB 백업 생성

  • MySQL의 증분 백업 생성

  • 압축된 MySQL 백업을 다른 서버로 압축

  • MySQL 서버 간 테이블 이동

  • 새로운 MySQL 마스터-슬레이브 생성

  • 서버에 부하를 추가하지 않고 MySQL 백업

Percona XtraBackup은 Percona Server, MySQL 및 MariaDB의 모든 버전에 대해 MySQL 핫 백업, 압축 및 증분 MySQL 백업을 만듭니다. Percona XtraBackup은 MySQL, MariaDB 및 Percona Server에서 작동합니다. InnoDB, XtraDB 및 HailDB 스토리지 엔진의 완전한 비차단 백업을 지원합니다.

Percona XtraBackup 작동 방식

Percona XtraBackup은 InnoDB를 기반으로 한 충돌 복구 기능입니다. InnoDB 데이터 파일을 복사하여 내부적으로 일관성이 없는 데이터를 생성하지만 파일에 대해 충돌 복구를 수행하여 다시 일관되고 사용 가능한 데이터베이스로 만듭니다.

이것은 InnoDB가 트랜잭션 로그라고도 하는 리두 로그를 유지 관리하기 때문입니다. 여기에는 InnoDB 데이터의 모든 변경 사항에 대한 기록이 포함됩니다. InnoDB가 시작되면 데이터 파일과 트랜잭션 로그를 확인하고 두 단계를 수행합니다. 커밋된 트랜잭션 로그 항목을 데이터 파일에 적용하고 데이터를 수정했지만 커밋하지 않은 모든 트랜잭션에 대해 실행 취소 작업을 수행합니다.

Percona XtraBackup은 LSN(로그 시퀀스 번호)을 기록하여 시작한 다음 데이터 파일을 복사합니다. 이 작업은 완료하는 데 짧은 시간이 걸리므로 파일이 변경되면 서로 다른 시점의 데이터베이스 상태가 반영됩니다. 동시에 Percona XtraBackup은 트랜잭션 로그 파일을 모니터링하고 변경 사항을 복사하는 백그라운드 프로세스를 실행합니다. Percona XtraBackup은 트랜잭션 로그가 순환 방식으로 기록되고 일정 기간 후에 재사용될 수 있으므로 이 작업을 지속적으로 수행해야 합니다. Percona XtraBackup은 데이터 파일 실행 시작 이후 모든 변경 사항에 대해 트랜잭션 로깅을 요구합니다.

Percona XtraBackup은 가벼운 대안으로 백업 잠금을 사용합니다. 이 기능은 Percona Server 5.6+에서 사용할 수 있습니다. Percona XtraBackup은 이를 사용하여 InnoDB 테이블을 수정하는 DML 쿼리를 차단하지 않도록 InnoDB가 아닌 데이터를 자동으로 복사합니다. 서버가 백업 잠금을 지원하는 경우 xtrabackup은 먼저 InnoDB 데이터를 복사하고 MyISAM 테이블 및 .frm 파일을 실행 및 복사합니다. 완료되면 파일 백업이 시작됩니다. BACKUP.par에 대한 READ LOCKLOCK 테이블이 있는 .frm, .MRG, .MYD, .MYI, .TRG, FLUSH TABLES를 백업합니다.

참고

잠금은 MyISAM 및 기타 InnoDB가 아닌 테이블에만 적용되며 Percona에서만 XtraBackup이 가능합니다. 모든 InnoDB /XtraDB 데이터에 대해 수행되었으며 로그는 나중에 백업됩니다. Percona XtraBackup은 가벼운 대안으로 백업 잠금을 사용합니다. 이 기능은 Percona Server 5.6+에서 사용할 수 있습니다. Percona XtraBackup은 이를 사용하여 InnoDB 테이블을 수정하는 DML 쿼리를 차단하지 않도록 InnoDB가 아닌 데이터를 자동으로 복사합니다. 읽기 잠금으로 테이블을 플러시

이후 xtrabackup은 바이너리 로그 위치 또는 보고를 변경할 수 있는 모든 작업을 차단합니다. 그런 다음 xtrabackup은 REDO 로그 파일 복사 및 바이너리 로그 좌표 가져오기를 완료합니다. 이 작업이 완료되면 xtrabackup은 바이너리 로그와 테이블의 잠금을 해제합니다. BACKUPExec_Master_Log_PosExec_Gtid_SetSHOW MASTER/SLAVE STATUS에 대한 잠금 BINLOG

마지막으로 바이너리 로그 위치가 STDERR에 인쇄되고 모든 것이 정상이면 xtrabackup은 0을 반환하여 종료됩니다.

STDERR의 xtrabackup은 어떤 파일에도 기록되지 않는다는 점에 유의해야 합니다. 예를 들어 파일로 리디렉션해야 합니다. xtrabackup OPTIONS2> backupout.log

백업된 디렉터리에 다음 파일도 생성됩니다.

준비 단계에서 Percona XtraBackup은 복제된 트랜잭션 로그 파일을 사용하여 복제된 데이터 파일에 대한 충돌 복구를 수행합니다. 이 작업이 완료되면 데이터베이스를 복원하고 사용할 수 있습니다.

백업된 MyISAM 및 InnoDB 테이블은 준비(복구) 프로세스 이후 InnoDB의 데이터가 백업이 시작된 지점으로 롤백되지 않고 백업이 완료된 지점으로 롤포워드되기 때문에 결국 서로 일관성을 갖게 됩니다. 이 시점은 취한 위치와 일치하므로 MyISAM 데이터와 준비된 InnoDB 데이터가 동기화됩니다. FLUSH TABLES WITHREAD LOCK

간단히 말하면, 이러한 도구를 사용하면 데이터 파일 복사, 로그 파일 복사, 다양한 데이터 조합에 로그 적용을 통해 스트리밍 및 증분 백업과 같은 작업을 수행할 수 있습니다.

백업 복원

xtrabackup을 사용하여 백업을 복원하려면 또는 옵션을 사용할 수 있습니다. xtrabackup – 다시 복사

MyISAM 테이블, 인덱스 등(.FRM, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par 및 .opt 파일)을 먼저 복사합니다. InnoDB로 다음 단계는 테이블과 인덱스, 그리고 마지막으로 로그 파일입니다. 파일을 복사할 때 파일의 속성이 보존되며, mysql은 백업을 생성한 사용자가 파일을 소유하게 되므로 데이터베이스 서버를 시작하기 전에 파일의 소유권을 변경해야 할 수도 있습니다.

또는 백업을 복원하는 옵션을 사용할 수 있습니다. 이 옵션의 유일한 차이점은 파일을 복사하는 대신 대상 위치로 이동한다는 것입니다. 이 옵션은 백업 파일을 삭제하므로 주의해서 사용해야 합니다. 이 기능은 데이터 파일과 백업 복사본을 모두 저장할 여유 디스크 공간이 충분하지 않은 상황에서 유용합니다. xtrabackup –move-backxtrabackup –copy-back

XtraBackup 설치

XtraBackup 소스 설치

[root@ZHENGDA ~]# uname -r
3.10.0-327.el7.x86_64

yum -y install

Install

yum -y install percona-xtrabackup-24

연결 사용자 생성 그리고 승인된

mysql> CREATE USER 'zhengda'@'localhost' IDENTIFIED BY 'goyun.org';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'zhengda'@'localhost';
mysql> FLUSH PRIVILEGES;

전체 백업

(1) xtrabackup은 innodb 및 xtradb 엔진의 테이블만 백업할 수 있지만 myisam 엔진 테이블은 백업할 수 없습니다.
(2) innobackupex는 xtrabackup을 캡슐화하는 Perl 스크립트로, innodb 및 myisam 동시 백업을 지원합니다. 하지만 myisam을 백업할 때 전역 읽기 잠금을 추가해야 합니다. 또한 myisam은 증분 백업을 지원하지 않습니다.

$ xtrabackup --user=zhengda --password=goyun.org --backup \ 
  --target-dir=/data/backup  
$ innobackupex --user=zhengda --password=goyun.org /path/ to /backup/dir/ 
$ innobackupex --user=zhengda --password=goyun.org --stream=tar ./ | bzip2 -

/data/backup으로 백업

备份所有库:$ innobackupex --defaults-file=/etc/my.cnf--user=zhengda \
           --password=goyun.org --socket=/tmp/mysql.sock /data/backup
           
备份两个库:$ innobackupex --databases="db1 db2"--defaults-file=/etc/my.cnf--user=zhengda \
            --password=goyun.org --socket=/tmp/mysql.sock /data/backup

증분 백업

참고: 첫 번째 증분 백업은 전체 백업을 기반으로 해야 합니다.
–incremental /data/backup1 증분 백업이 저장되는 대상 디렉터리를 지정합니다.
–incremental -basedir=/data/backup 전체 백업을 위한 디렉터리를 지정하세요

$ innobackupex  --defaults-file=etc/my.cnf --user=zhengda --password=goyun.org \
--socket=/tmp/mysql.sock --incremental /data/backuup1 --incremental-basedir=/data/backup/#会根据当天时间生成个目录

두 번째 증분 백업을 수행하려면 마지막 증분 백업을 위한 디렉터리를 지정해야 합니다
–incremental /data/backup2 이 증분 백업을 위한 디렉터리를 지정하세요
–incremental-basedir=/data/backup1 마지막 증분 백업 디렉터리 지정

$ innobackupex --defaults-file=/etc/my.cnf --user=zhengda --password=goyun.org \
--socket=/tmp/mysql.sock --incremental /data/backup2 --incremental-basedir=/data/backup1/(....)

백업 복원

–apply-log 백업 복원 옵션 준비
–use-memory=8G 데이터 복원 준비 시 사용되는 메모리를 설정하고, 개선 가능 준비에 소요되는 시간

$ innobackupex --apply-log --use-memory=8G /data/backup
#还原如下
$ innobackupex  --defaults-file=/etc/my.cnf --user= --password= --copy-back /data/backup
#或
$ xtrabackup --user=zhengda --password=goyun.org --copy-back --target-dir=/data/backup

논리적 백업을 위해 Mysqldump 사용

중요한 MySQL 백업 도구인 mysqldump는 매우 강력합니다. 백업 매개변수와 복구 전략을 주의 깊게 연구해야 합니다.

데이터베이스 백업:

단일 데이터베이스 또는 단일 데이터베이스의 지정된 테이블 백업:

mysqldump [OPTIONS] 데이터베이스 [tb1] [tb2]…

여러 데이터베이스 백업:

mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]

모든 데이터베이스 백업:

mysqldump [OPTIONS] –all-databases [OPTIONS]

백업 시 테이블을 잠그지 않으려면 이 옵션을 추가하세요

--single-transaction

사례: 모든 라이브러리 백업 local

mysqldump -u root -p密码 --all-databases > ./all.sql

Case: local 모든 라이브러리 복원

mysql -u root -p密码  < ./all.sql

Case: 로컬 db1 및 db2 라이브러리 백업

mysqldump -u root -p密码 --databases db1 db2 > ./db1_2.sql

Case: 로컬 db1 및 db2 라이브러리 복원

mysql -u root -p密码 db1 db2 < ./db1_2.sql

Case: B 호스트에서 실행하여 yun 라이브러리 백업 A 호스트에서 B 호스트로의 경우 호스트 B

-C에서 yun 라이브러리를 만들어야 합니다. 이는 호스트 간 데이터 전송에 데이터 압축이 사용된다는 의미

mysqldump --host=192.168.6.108(A) -u root -p密码 --opt yun | mysql --host=localhost(B) -u root -p密码 -C yun

사례: 호스트 B에서 실행하여 호스트 A의 모든 데이터베이스를 로컬

에 백업합니다.
mysqldump --host=192.168.6.108(A) -u root -p密码 --all-databases > all.sql(B)

사례: B에서 복원 호스트에서 실행

위 내용은 xtrabackup 백업 및 복구, 작동 원리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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