Home > Database > Mysql Tutorial > xtrabackup官方文档学习笔记【全备部分】_MySQL

xtrabackup官方文档学习笔记【全备部分】_MySQL

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-01 13:29:18
Original
1155 people have browsed it

bitsCN.com

xtrabackup官方文档学习笔记【全备部分】

 

开篇的简介

 

xtrabackup是个链向InnoDB API和mysql client API的C程序,其中

InnoDB API提供日志应用,mysql client API面向命令参数和配置文件解析,另外

xtrabackup有2个模式,要么运行在--backup下,要么运行在--prepare下

 

 

做个明确选择

 

 

为了兼容InnoDB数据文件格式,xtrabackup 2.1版本目前存在4种独立的可执行程序

xtrabackup,xtrabackup_51,xtrabackup_55,xtrabackup_56,我们应该根据服务器版本选择相应程序,具体参考下表:

 

xtrabackup官方文档学习笔记【全备部分】_MySQL

 

配置地方

 

我们能够像使用任何mysql客户端那样自如地运用xtrabackup

对命令参数指定既能在命令行上指定也能将其配置在my.cnf里的[xtrabackup]模块

 

 

创建备份

 

前面说了,xtrabackup有2个模式,备份,顾名思义,当选择--backup模式

同时,要指定--target-dir来作为备份保存点,如果--target-dir不存在,则会新建一个

但是如果备份已经存在且非空,则xtrabackup会报错:error 17, file exists,类似:

xtrabackup: Can't create/write to file '/home/mysql/backup/employees/dept_manager.ibd' (Errcode: 17)

另外,如果日志文件没有一同放在--datadir下,则也要另外加进来

 

 

开始备份的时候,xtrabackup会进入--datadir目录,进行以下2件主要任务:

① 后台启动一个log-copying线程来每秒监控InnoDB日志文件,当发现变化时则复制变化的块到xtrabackup_logfile

    这个log-copying是必须的,因为备份可能会进行较长时间,而恢复则需要从开始到备份结束的所有日志条目

    但当日志量过载导致log-copying承受不了,则xtrabackup便会报错

② 复制InnoDB数据文件到备份目录,这不是一个简单的物理拷贝,它会像InnoDB一样,读取数据字典,一次复制一页

当完成备份时,xtrabackup会停止log-copying线程,在备份目录下创建一个xtrabackup_checkpoints文件

这个文件记录了备份的类型,开始和结束的日志序列号(LSN)

 

 

下面是一个备份例子

$ xtrabackup --backup --datadir=/var/lib/mysql/ --target-dir=/data/backups/mysql/

它会把数据从/var/lib/mysql/下备份到/data/backups/mysql/里,--datadir一般直接在my.cnf里设置即可

如果备份途中卡住,则可以取消掉,这样做是安全的,因为它没有涉及到修改数据库

backup完成会有如下类似输出:

xtrabackup: Transaction log of lsn () to () was copied.

 

 

Preparing备份

 

 

这里想声明下,个人感觉若是把preparing翻译成中文会比较别扭,就搁置不翻译

反正,从备份到恢复会经过3个步骤:backup→prepare→restore

在prepare之前,数据文件是不一致的,因为它们在不同时间点被备份

因此,--prepare会使所有数据文件的步调达成一致

这个prepare过程你可以在任何机器上运行,没有强制在线上或者备份库上运行

你可以把备份复制到闲置的服务器上去运行prepare,以此来降低备份库的压力

不过,你必须保证backup和prepare所使用的xtrabackup的版本要一致

 

 

在prepare过程中,xtrabackup会启动一个内置的改良的InnoDB,运用备份的日志在备份的数据文件上进行崩溃恢复

下面是一个prepare例子:

xtrabackup --prepare --target-dir=/data/backups/mysql/

prepare完成后会有如下类似输出:

101107 16:40:15 InnoDB: Shutdown completed; log sequence number

 

 

那么此时你的所有数据文件才算全部一致,也才算得上是一份有效的备份

然而,你或者可能想要去加快恢复时间,很简单,只要再次运行一次prepare就OK

第二次运行prepare,xtrabackup会创建一份日志文件,为我们在restore时节省恢复时间

 

在prepare过程,建议不能因为计划内或计划外将其中断,这会导致数据文件损坏,备份的有效性将不能得到保证

 

 

自己动手,丰衣足食

 

 

xtrabackup的恢复权完全交给了用户,你可以使用rsync或者cp把备份拷贝到--datadir下

同时,也需要注意拷贝回来的备份文件的属性和权限

并且,mysqld必须是被关闭的

还有,.frm也要在这个时候拷贝出来

以下是用rsync拷贝文件的一个例子:

$ rsync -avrP /data/backup/ /var/lib/mysql/

$ chown -R mysql:mysql /var/lib/mysql
 

bitsCN.com
Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template