찾다
데이터 베이스MySQL 튜토리얼使用xtrabackup在线增量备份及恢复数据库_MySQL

一、Percona Xtrabackup 简介

 

1、Xtrabackup  bin目录文件 介绍

 

1)innobackupex

 

innobackupex 是xtrabackup的一个符号链接 . innobackupex still supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release.

 

2)xtrabackup

 

一个由C编译而来的二进制文件,可以整备MySQL database instance with MyISAM, InnoDB, and XtraDB tables

 

3)xbcrypt

 

用来加密或解密备份的数据

 

4)xbstream

 

用来解压或压缩xbstream格式的压缩文件

 

5)xbcloud

 

utility used for downloading and uploading full or part of xbstream archive from/to cloud.

 

2、Percona XtraBackup info

 

是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)

 

you can achieve the following benefits: (https://www.percona.com/doc/percona-xtrabackup/2.3/intro.html)

 

Backups that complete quickly and reliably

Uninterrupted transaction processing during backups

Savings on disk space and network bandwidth

Automatic backup verification

Higher uptime due to faster restore time

features  

Create hot InnoDB backups without pausing your database

Make incremental backups of MySQL

Stream compressed MySQL backups to another server

Move tables between MySQL servers on-line

Create new MySQL replication slaves easily

Backup MySQL without adding load to the server

 

无需停止数据库进行InnoDB热备

 

增量备份MySQL

 

流压缩到传输到其它服务器

 

在线移动表

 

能比较容易地创建主从同步

 

备份MySQL时不会增大服务器负载

 

3、Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下

 

1、在InnoDB内部会维护一个redo/undo日志文件,也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。

 

2、Xtrabackup在启动时会记住log sequence number(LSN),并且复制所有的数据文件。复制过程需要一些时间,所以这期间如果数据文件有改动,那么将会使数据库处于一个不同的时间点。这时,xtrabackup会运行一个后台进程,用于监视事务日志,并从事务日志复制最新的修改。Xtrabackup必须持续的做这个操作,是因为事务日志是会轮转重复的写入,并且事务日志可以被重用。所以xtrabackup自启动开始,就不停的将事务日志中每个数据文件的修改都记录下来。

 

3、上面就是xtrabackup的备份过程。接下来是准备(prepare)过程,在这个过程中,xtrabackup使用之前复制的事务日志,对各个数据文件执行灾难恢复(就像mysql刚启动时要做的一样)。当这个过程结束后,数据库就可以做恢复还原了,这个过程在xtrabackup的编译二进制程序中实现。程序innobackupex可以允许我们备份MyISAM表和frm文件从而增加了便捷和功能。Innobackupex会启动xtrabackup,直到xtrabackup复制数据文件后,然后执行FLUSH TABLES WITH READ LOCK来阻止新的写入进来并把MyISAM表数据刷到硬盘上,之后复制MyISAM数据文件,最后释放锁。

 

4、备份MyISAM和InnoDB表最终会处于一致,在准备(prepare)过程结束后,InnoDB表数据已经前滚到整个备份结束的点,而不是回滚到xtrabackup刚开始时的点。这个时间点与执行FLUSH TABLES WITH READ LOCK的时间点相同,所以myisam表数据与InnoDB表数据是同步的。类似oracle的,InnoDB的prepare过程可以称为recover(恢复),myisam的数据复制过程可以称为restore(还原)。

 

5、Xtrabackup 和 innobackupex这两个工具都提供了许多前文没有提到的功能特点。手册上有对各个功能都有详细的介绍。简单介绍下,这些工具提供了如流(streaming)备份,增量(incremental)备份等,通过复制数据文件,复制日志文件和提交日志到数据文件(前滚)实现了各种复合备份方式。

 

二、安装xtrabackup

 

1、安装

 

yum -y install perl perl-devel libaio libaio-devel

yum -y install  perl-DBI  perl-DBD-MySQL  perl-TermReadKey perl-devel perl-Time-HiRes

 

cd /usr/local/src

wget -c https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.2/ \

binary/tarball/percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz

 

tar -zxf percona-xtrabackup-2.3.2-Linux-x86_64.tar.gz

cd percona-xtrabackup-2.3.2-Linux-x86_64/

mkdir  /usr/local/xtrabackup

mv bin  /usr/local/xtrabackup/

ln -s /usr/local/xtrabackup/bin/* /usr/bin/

 

2、修改my.cnf

 

[mysqld] 

datadir=/var/lib/mysql

 

innodb_data_home_dir = /data/mysql/ibdata

innodb_log_group_home_dir = /data/mysql/iblogs

innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend

innodb_log_files_in_group = 2

innodb_log_file_size = 1G

 

三、全部数据库备份与还原

 

1、备份

 

//全部数据库备份

innobackupex --user=root --password=123456 /data/backup/

 

//单数据库备份

innobackupex --user=root --password=123456 --database=backup_test /data/backup/

 

//多库

innobackupex--user=root --password=123456 --include='dba.*|dbb.*' /data/backup/

 

//多表

innobackupex --user=root --password=123456 --include='dba.tablea|dbb.tableb' /data/backup/

 

//数据库备份并压缩

log=zztx01_`date +%F_%H-%M-%S`.log

db=zztx01_`date +%F_%H-%M-%S`.tar.gz

innobackupex --user=root --stream=tar /data/backup  2>/data/backup/$log | gzip 1> /data/backup/$db

//不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件,疑惑了好长时间

 

//如果有错误可以加上  --defaults-file=/etc/my.cnf

 

2、还原

 

service mysqld stop

mv /data/mysql /data/mysql_bak && mkdir -p /data/mysql

 

//--apply-log选项的命令是准备在一个备份上启动mysql服务

innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log /data/backup/2015-09-18_16-35-12

 

//--copy-back 选项的命令从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置

innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/2015-09-18_16-35-12

 

chown -R mysql.mysql /data/mysq

service mysqld start

 

四、增量备份与还原

 

1、创建测试数据库和表

 

create database backup_test; //创建库

 

CREATE TABLE `backup` ( //创建表

`id` int(11) NOT NULL AUTO_INCREMENT ,

`name` varchar(20) NOT NULL DEFAULT '' ,

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,

`del` tinyint(1) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=myisam DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

 

2、增量备份

 

#--incremental:增量备份的文件夹

#--incremental-dir:针对哪个做增量备份

 

//第一次备份

mysql> INSERT INTO backup (name) VALUES ('xx'),('xxxx'); //插入数据

innobackupex  --user=root --incremental-basedir=/data/backup/2015-09-18_16-35-12 --incremental /data/backup/

 

//再次备份

mysql> INSERT INTO backup (name) VALUES ('test'),('testd'); //在插入数据

innobackupex --user=root --incremental-basedir=/data/backup/2015-09-18_18-05-20 --incremental /data/backup/

 

3、查看增量备份记录文件

 

[root@localhost 2015-09-18_16-35-12]# cat xtrabackup_checkpoints //全备目录下的文件

backup_type = full-prepared

from_lsn = 0 //全备起始为0

to_lsn = 23853959

last_lsn = 23853959

compact = 0

 

[root@localhost 2015-09-18_18-05-20]# cat xtrabackup_checkpoints //第一次增量备份目录下的文件

backup_type = incremental

from_lsn = 23853959

to_lsn = 23854112

last_lsn = 23854112

compact = 0

 

[root@localhost 2015-09-18_18-11-43]# cat xtrabackup_checkpoints //第二次增量备份目录下的文件

backup_type = incremental

from_lsn = 23854112

to_lsn = 23854712

last_lsn = 23854712

compact = 0

增量备份做完后,把backup_test这个数据库删除掉,drop database backup_test;这样可以对比还原后

 

4、增量还原

 

分为两个步骤

 

a.prepare

 

innobackupex --apply-log /path/to/BACKUP-DIR

此时数据可以被程序访问使用;可使用—use-memory选项指定所用内存以加快进度,默认100M;

 

b.recover

 

innobackupex --copy-back /path/to/BACKUP-DIR

从my.cnf读取datadir/innodb_data_home_dir/innodb_data_file_path等变量

 

先复制MyISAM表,然后是innodb表,最后为logfile;--data-dir目录必须为空

 

开始合并

 

innobackupex --apply-log --redo-only /data/backup/2015-09-18_16-35-12

innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-05-20

innobackupex --apply-log --redo-only --incremental /data/backup/2015-09-18_16-35-12 --incremental-dir=/data/backup/2015-09-18_18-11-43

 

#/data/backup/2015-09-18_16-35-12 全备份目录

#/data/backup/2015-09-18_18-05-20 第一次增量备份产生的目录

#/data/backup/2015-09-18_18-11-43 第二次增量备份产生的目录

 

恢复数据

 

service mysqld stop

innobackupex --copy-back /data/backup/2015-09-18_16-35-12

service mysqld start

五、innobackup 常用参数说明

--defaults-file

同xtrabackup的--defaults-file参数

 

--apply-log

对xtrabackup的--prepare参数的封装

 

--copy-back

做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir ;

 

--remote-host=HOSTNAME

通过ssh将备份数据存储到进程服务器上;

 

--stream=[tar]

备 份文件输出格式, tar时使用tar4ibd , 该文件可在XtarBackup binary文件中获得.如果备份时有指定--stream=tar, 则tar4ibd文件所处目录一定要在$PATH中(因为使用的是tar4ibd去压缩, 在XtraBackup的binary包中可获得该文件)。

在 使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话 xtrabackup_logfile可能会很大(5G+),很可能会撑满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题。

 

--tmpdir=DIRECTORY

当有指定--remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir

 

--redo-only --apply-log组,

强制备份日志时只redo ,跳过rollback。这在做增量备份时非常必要。

 

--use-memory=#

该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量

 

--throttle=IOS

同xtrabackup的--throttle参数

 

--sleep=是给ibbackup使用的,指定每备份1M数据,过程停止拷贝多少毫秒,也是为了在备份时尽量减小对正常业务的影响,具体可以查看ibbackup的手册 ;

 

--compress[=LEVEL]

对备份数据迚行压缩,仅支持ibbackup,xtrabackup还没有实现;

 

--include=REGEXP

对 xtrabackup参数--tables的封装,也支持ibbackup。备份包含的库表,例如:--include="test.*",意思是要备份 test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:test1和test2,则写 成:--include="test.test1|test.test2"。也可以使用通配符,如:--include="test.test*"。

 

--databases=LIST

列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份;

 

--uncompress

解压备份的数据文件,支持ibbackup,xtrabackup还没有实现该功能;

 

--slave-info,

备 份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0

 

--socket=SOCKET

指定mysql.sock所在位置,以便备份进程登录mysql.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
Composite Index와 여러 단일 열 인덱스를 언제 사용해야합니까?Composite Index와 여러 단일 열 인덱스를 언제 사용해야합니까?Apr 11, 2025 am 12:06 AM

데이터베이스 최적화에서 쿼리 요구 사항에 따라 인덱싱 전략을 선택해야합니다. 1. 쿼리에 여러 열이 포함되고 조건 순서가 수정되면 복합 인덱스를 사용하십시오. 2. 쿼리에 여러 열이 포함되어 있지만 조건 순서가 고정되지 않은 경우 여러 단일 열 인덱스를 사용하십시오. 복합 인덱스는 다중 열 쿼리를 최적화하는 데 적합한 반면 단일 열 인덱스는 단일 열 쿼리에 적합합니다.

MySQL에서 느린 쿼리를 식별하고 최적화하는 방법은 무엇입니까? (느린 쿼리 로그, Performance_schema)MySQL에서 느린 쿼리를 식별하고 최적화하는 방법은 무엇입니까? (느린 쿼리 로그, Performance_schema)Apr 10, 2025 am 09:36 AM

MySQL 느린 쿼리를 최적화하려면 SlowQueryLog 및 Performance_Schema를 사용해야합니다. 1. SlowQueryLog 및 Set Stresholds를 사용하여 느린 쿼리를 기록합니다. 2. Performance_schema를 사용하여 쿼리 실행 세부 정보를 분석하고 성능 병목 현상을 찾고 최적화하십시오.

MySQL 및 SQL : 개발자를위한 필수 기술MySQL 및 SQL : 개발자를위한 필수 기술Apr 10, 2025 am 09:30 AM

MySQL 및 SQL은 개발자에게 필수적인 기술입니다. 1.MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템이며 SQL은 데이터베이스를 관리하고 작동하는 데 사용되는 표준 언어입니다. 2.MYSQL은 효율적인 데이터 저장 및 검색 기능을 통해 여러 스토리지 엔진을 지원하며 SQL은 간단한 문을 통해 복잡한 데이터 작업을 완료합니다. 3. 사용의 예에는 기본 쿼리 및 조건 별 필터링 및 정렬과 같은 고급 쿼리가 포함됩니다. 4. 일반적인 오류에는 구문 오류 및 성능 문제가 포함되며 SQL 문을 확인하고 설명 명령을 사용하여 최적화 할 수 있습니다. 5. 성능 최적화 기술에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 코드 가독성 향상이 포함됩니다.

MySQL 비동기 마스터 슬레이브 복제 프로세스를 설명하십시오.MySQL 비동기 마스터 슬레이브 복제 프로세스를 설명하십시오.Apr 10, 2025 am 09:30 AM

MySQL 비동기 마스터 슬레이브 복제는 Binlog를 통한 데이터 동기화를 가능하게하여 읽기 성능 및 고 가용성을 향상시킵니다. 1) 마스터 서버 레코드는 Binlog로 변경됩니다. 2) 슬레이브 서버는 I/O 스레드를 통해 Binlog를 읽습니다. 3) 서버 SQL 스레드는 데이터를 동기화하기 위해 Binlog를 적용합니다.

MySQL : 쉽게 학습하기위한 간단한 개념MySQL : 쉽게 학습하기위한 간단한 개념Apr 10, 2025 am 09:29 AM

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

MySQL : 데이터베이스에 대한 사용자 친화적 인 소개MySQL : 데이터베이스에 대한 사용자 친화적 인 소개Apr 10, 2025 am 09:27 AM

MySQL의 설치 및 기본 작업에는 다음이 포함됩니다. 1. MySQL 다운로드 및 설치, 루트 사용자 비밀번호를 설정하십시오. 2. SQL 명령을 사용하여 CreateAbase 및 CreateTable과 같은 데이터베이스 및 테이블을 만듭니다. 3. CRUD 작업을 실행하고 삽입, 선택, 업데이트, 명령을 삭제합니다. 4. 성능을 최적화하고 복잡한 논리를 구현하기 위해 인덱스 및 저장 절차를 생성합니다. 이 단계를 사용하면 MySQL 데이터베이스를 처음부터 구축하고 관리 할 수 ​​있습니다.

InnoDB 버퍼 풀은 어떻게 작동하며 성능에 중요한 이유는 무엇입니까?InnoDB 버퍼 풀은 어떻게 작동하며 성능에 중요한 이유는 무엇입니까?Apr 09, 2025 am 12:12 AM

innodbbufferpool은 데이터와 색인 페이지를 메모리에로드하여 MySQL 데이터베이스의 성능을 향상시킵니다. 1) 데이터 페이지가 버퍼 풀에로드되어 디스크 I/O를 줄입니다. 2) 더러운 페이지는 정기적으로 디스크로 표시되고 새로 고침됩니다. 3) LRU 알고리즘 관리 데이터 페이지 제거. 4) 읽기 메커니즘은 가능한 데이터 페이지를 미리로드합니다.

MySQL : 초보자를위한 데이터 관리의 용이성MySQL : 초보자를위한 데이터 관리의 용이성Apr 09, 2025 am 12:07 AM

MySQL은 설치가 간단하고 강력하며 데이터를 쉽게 관리하기 쉽기 때문에 초보자에게 적합합니다. 1. 다양한 운영 체제에 적합한 간단한 설치 및 구성. 2. 데이터베이스 및 테이블 작성, 삽입, 쿼리, 업데이트 및 삭제와 같은 기본 작업을 지원합니다. 3. 조인 작업 및 하위 쿼리와 같은 고급 기능을 제공합니다. 4. 인덱싱, 쿼리 최적화 및 테이블 파티셔닝을 통해 성능을 향상시킬 수 있습니다. 5. 데이터 보안 및 일관성을 보장하기위한 지원 백업, 복구 및 보안 조치.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음