xtrabackup使用手册.docx
- 文档编号:29772893
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:53
- 大小:94.99KB
xtrabackup使用手册.docx
《xtrabackup使用手册.docx》由会员分享,可在线阅读,更多相关《xtrabackup使用手册.docx(53页珍藏版)》请在冰豆网上搜索。
xtrabackup使用手册
XtraBackup
2 安装XtraBackup
这里只介绍yum和rpm安装方法
其他安装方法查看:
▪ Installing PerconaXtraBackup fromBinaries
▪ CompilingandInstallingfromSourceCode
2.1 安装XtraBackupbinary版本
2.1.1yum的安装方法:
自动
$rpm-Uhv
然后会看到:
Retrieving
Preparing... ###########################################[100%]
1:
percona-release ###########################################[100%]
手动
[percona]
name=CentOS$releasever-Percona
baseurl=
enabled=1
gpgkey=file:
///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck=1
测试安装库
使用yumlist|greppercona来确保安装
yumlist|greppercona
会出现以下信息:
percona-release.x86_64 0.0-1 installed
...
Percona-Server-client-51.x86_64 5.1.47-rel11.1.51.rhel5 percona
Percona-Server-devel-51.x86_64 5.1.47-rel11.1.51.rhel5 percona
Percona-Server-server-51.x86_64 5.1.47-rel11.1.51.rhel5 percona
Percona-Server-shared-51.x86_64 5.1.47-rel11.1.51.rhel5 percona
Percona-Server-test-51.x86_64 5.1.47-rel11.1.51.rhel5 percona
...
xtrabackup.x86_64 1.2-22.rhel5 percona
2.1.2 直接下载rpm包安装
使用wget下载rpm包,然后通过rpm包安装
参考:
参考:
3XtraBackup使用手册
3.1 使用innobackupex脚本
innobackupex是perl脚本对xtrabackup的封装,和功能扩展。
3.1.1 备份预备工作
权限和连接
xtrabackup需要连接到数据库和datadir操作权限。
xtrabackup或者innobackupex在使用过程中设计到2类用户权限:
1.系统用户,用来调用innobackupex或者xtrabackup
2.数据库用户,数据库内使用的用户
连接到服务:
innobackupex或者xtrabackup通过—user和—password连接到数据库服务
$innobackupex--user=DBUSER--password=SECRET/path/to/backup/dir/
$innobackupex--user=LUKE --password=US3TH3F0RC3--stream=tar./|bzip2-
$xtrabackup--user=DVADER--password=14MY0URF4TH3R--backup--target-dir=/data/bkps/
其他连接选项:
Option
Description
–port
TheporttousewhenconnectingtothedatabaseserverwithTCP/IP.
–socket
Thesockettousewhenconnectingtothelocaldatabase.
–host
ThehosttousewhenconnectingtothedatabaseserverwithTCP/IP.
需要的权限:
连接到服务是为了执行备份,需要在datadir上有read,write和execute权限。
在数据库中需要以下权限:
• RELOAD和LOCKTABLES权限为了执行FLUSHTABLESWITHREADLOCK 。
• REPLICATIONCLIENT为了获取binarylog 位置
• CREATETABLESPACE权限为了导入表,用户表级别的恢复
• SUPER权限在slave环境下备份用来启动和关闭slave线程
mysql>CREATEUSER'bkpuser'@'localhost'IDENTIFIEDBY's3cret';
mysql>GRANTRELOAD,LOCKTABLES,REPLICATIONCLIENTON*.*TO'bkpuser'@'localhost';
mysql>FLUSHPRIVILEGES;
3.1.2 全备和全备还原
3.1.2.1 使用innobackupex创建全备
创建全备
$innobackupex--user=DBUSER--password=DBUSERPASS/path/to/BACKUP-DIR/
会输出以下信息
innobackupex:
Backupcreatedindirectory'/path/to/BACKUP-DIR/2013-03-25_00-00-09'
innobackupex:
MySQLbinlogposition:
filename'mysql-bin.000003',position1946
11122500:
00:
53 innobackupex:
completedOK!
从信息中会发现备份被创建在/path/to/BACKUP-DIR/2013-03-25_00-00-09
内部机制:
在备份的时候innobackupex会调用xtrabackup来备份innodb表,并复制所有的表定义,其他引擎的表(MyISAM,MERGE,CSV,ARCHIVE)。
其他选项:
--no-timestamp,指定了这个选项备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹。
--default-file,指定配置文件,用来配置innobackupex的选线。
3.1.2.2 使用innobackupex预备全备
创建完备份之后数据被没有马上可以被还原,需要回滚未提交事务,前滚提交事务,让数据库文件保持一致性。
innobackupex使用—apply-log来做预备备份
$innobackupex--apply-log/path/to/BACKUP-DIR
成功则会输出:
111225 1:
01:
57 InnoDB:
Shutdowncompleted;logsequencenumber1609228
11122501:
01:
57 innobackupex:
completedOK!
成功后,备份可以被用来还原数据库了。
内部机制:
读取备份文件夹中的配置文件,然后innobackupex重做已提交事务,回滚未提交事务,之后数据就被写到了备份的数据文件(innodb文件)中,并重建日志文件。
这一步隐式调用了2次xtrabackup–prepare。
跟多关于xtrabackup可以看之后的章节。
其他选项:
--user-memory:
指定预备阶段可使用的内存,内存多则速度快,默认为10MB
$innobackupex--apply-log--use-memory=4G/path/to/BACKUP-DIR
3.1.2.3 使用innobackupex还原备份
使用innobackupex--copy-back来还原备份
$innobackupex--copy-back/path/to/BACKUP-DIR
会根据f复制所有备份到datadir下:
innobackupex:
Finishedcopyingbackfiles.
11122501:
08:
13 innobackupex:
completedOK!
注:
datadir必须是为空的,innobackupex–copy-back不会覆盖已存在的文件,还要注意,还原时需要先关闭服务,如果服务是启动的,那么就不能还原到datadir。
之后需要修改文件的所有者和权限:
$chown-Rmysql:
mysql/var/lib/mysql
3.1.3 增量备份和还原
增量备份呢是为了减少空间使用和备份的时间。
增量备份的实现,依赖于innodb页上面的LSN(logsequencenumber),每次对数据库的修改都会导致LSN自增。
增量备份会复制指定LSN之后的所有数据页。
3.1.3.1 创建增量备份
创建全备
在创建增量备份之前需要一个全备,不然增量备份是没有意义的。
$innobackupex/data/backups
这样就会在/data/backups下创建一个时间戳文件夹,如 /data/backups/2013-03-31_23-01-18,然后文件夹内是备份文件。
检查备份文件夹下的xtrabackup-checkpoints,会有一下信息:
backup_type = full-backuped
from_lsn =0
to_lsn =1291135
创建第一个增量备份
然后使用—incremental创建增量备份
$innobackupex--incremental/data/backups--incremental-basedir=BASEDIR
BASEDIR指向之前的全备, /data/backups/2013-03-31_23-01-18,成功后备份会生成在/data/backups下的时间戳目录中,如:
/data/backups/2013-04-01_23-01-18 ,把这个目录叫为记为 INCREMENTAL-DIR-1方面之后使用。
然后查看xtrabackup-checkpoints:
backup_type = incremental
from_lsn =1291135
to_lsn =1352113
可以发现和全备不同的是,backup_type为incremental,from_lsn不为0。
然后再创建一个增量备份
在INCREMENTAL-DIR-1的基础上再创建一个增量备份,记为INCREMENTAL-DIR-2。
$innobackupex--incremental/data/backups--incremental-basedir=INCREMENTAL-DIR-1
增量备份替代方法
可以使用指定—incremental-lsn来代替—incremental-basedir的方法创建增量备份。
innobackupex --incremental /data/backups --incremental-lsn=1291135
innobackupex --incremental /data/backups --incremental-lsn=1358967
注意:
xtrabackup只会影响xtradb或者innodb的表,其他引擎的表在增量备份的时候只会复制整个文件,不会差异。
3.1.3.2 预备增量备份
预备增量备份需要2个步骤:
1.需要先预备全备,但是只重做已提交事务,不回滚未提交事务,然后应用到全备,也是只重做已提交事务,不回滚未提交事务
2.回滚未提交事务
如果已经回滚了未提交事务,那么就无法再应用增量备份。
注:
在mariadb10.0 上测试发现不加—redo-only预备全备,然后使用 –redo-only应用增量备份,mysql服务能够正常启动并且数据被成功还原
在全备上,使用—redo-only只做已提交事务,不回滚未提交事务
innobackupex--apply-log--redo-onlyBASE-DIR
会出现以下结果:
12010322:
00:
12InnoDB:
Shutdowncompleted;logsequencenumber1291135
12010322:
00:
12innobackupex:
completedOK!
应用第一个增量备份
innobackupex--apply-log--redo-onlyBASE-DIR--incremental-dir=INCREMENTAL-DIR-1
输出结果,注意LSN的变化:
12010322:
08:
43InnoDB:
Shutdowncompleted;logsequencenumber1358967
12010322:
08:
43innobackupex:
completedOK!
如果没有指定—incremental-dir,那么innobackupex会使用最近的一个在basedir中被创建的子目录。
应用另外一个备份
innobackupex--apply-logBASE-DIR--incremental-dir=INCREMENTAL-DIR-2
因为是最后一个增量备份所以没有必要再加—redo-only,这样最后一个增量也被应用到全备上了。
注:
--redo-only除了最后一个不用加之外,其他的增量应用都要加,最后一个应用的时候可以直接进入回滚未提交事务阶段。
如果加了也没事儿,服务启动的时候会进入recovery过程,来回滚
需要注意的是,应用增量备份的时候只能按照备份的顺序来应用。
如果应用顺序错误,那么备份就不可用。
如果无法确定顺序,可以使用xtrabackup-checkpoints来确定顺序。
回滚未提交事务
当应用完所有增量备份的时候,就需要回滚所有为完成事务(如果最后一步加了 –redo-only就需要回滚未提交,不执行的话在服务启动阶段服务会处理未提交事务)。
innobackupex--apply-logBASE-DIR
Notethatthe iblog* fileswillnotbecreatedby innobackupex,ifyouwantthemtobecreated,use xtrabackup–prepareonthedirectory.Otherwise,thefileswillbecreatedbytheserveroncestarted.
注:
文中提到innodb事务日志(iblog*)不会被创建,但是测试下使用了最后一步回滚未提交事务发现有iblog*文件,而且上文提到 innobackupex会隐式执行两次 xtrabackup–prepare,在下文介绍xtrabackup时会提到,执行2次xtrabackup–preare会创建iblog*文件,与文中提到不符。
3.1.3.3 还原增量备份
还原增量备份其实和还原全备一样
innobackupex--copy-backBASE-DIR
注意事项可以看:
使用innobackupex还原备份
3.1.3.4 可以使用流做增量备份
先进行一个全备:
innobackupex/data/backups
使用本地:
innobackupex--incremental--incremental-lsn=LSN-number--stream=xbstream./>incremental.xbstream
解包方法
xbstream-x 使用本地备份流到远程并解包 innobackupex --incremental--incremental-lsn=LSN-number--stream=xbstream./|/ sshuser@hostname"cat-|xbstream-x-C>/backup-dir/" 3.1.4 部分备份和还原 xtrabackup可以使用部分备份,但是只能在一个表一个文件的状况下才能使用,设置mysql选项: innodb_file_per_table。 还原部分备份使用表导入的方式,而不是—copy-back选项。 尽管很多场景下可以通过直接复制文件的方式,但是会产生一致性问题不建议使用。 3.1.4.1 创建部分备份 部分备份有3个选项可以使用: --include: 设置正则表达式的格式,匹配的就备份 --table-file: 在文件中指定要备份的表,然后通过这个选项传入文件 --database: 指定数据库列表 使用include方式 include 方式数据库名也可以匹配: $innobackupex--include='^mydatabase[.]mytable'/path/to/backup 这个选项是传给xtrabackup–tables,所有的数据库目录都会被创建,但是里面可能是空的。 使用tables-file方式 如: $echo"mydatabase.mytable">/tmp/tables.txt $innobackupex--tables-file=/tmp/tables.txt/path/to/backup 这个选项是应用xtrabackup–tablefile,只有匹配到表的数据库目录才会被创建 使用database方式 innobackupex可以传递用空格隔开的数组,格式为: databasename[.tablename] $innobackupex--databases="mydatabase.mytablemysql"/path/to/backup 注意: --databasees选项只会对非innodb引擎表和frm文件产生影响,对于innodb数据文件总是备份的 3.1.4.2 预备部分备份 部分备份的预备需要使用—export: $innobackupex--apply-log--export/path/to/partial/backup 会出现以下,是因为innodb表保存了数据文件但是没有保存frm文件。 111225 0: 54: 06 InnoDB: Error: table'mydatabase/mytablenotincludedinpartialb' InnoDB: inInnoDBdatadictionaryhastablespaceid6, InnoDB: buttablespacewiththatidornamedoesnotexist.Itwillberemovedfromdatadictionary. 之后会发现生成了.exp和.cfg文件。 exp文件适用于perconaserver,cfg适用于mariadb和mysql。 mariadb10.0可以直接通过ibd和frm文件import。 mysql5.6之后可以不使用cfg来进行import,cfg如果存在会被用来做表结构的验证。 在已经预备好的备份上,可以使用—export和—apply-log创建.exp文件。 3.1.4.3 还原部分备份 先创建一个表,表结构需要和被还原的一样。 OTHERSERVER|mysql>CREATETABLEmytable(...)ENGINE=InnoDB; 然后discard表空间 OTHERSERVER|mysql>ALTERTABLEmydatabase.mytableDISCARDTABLESPACE; 之后把文件复制到相应的目录下(注意文件的所有者和文件权限),需要文件.ibd,.exp或者.cfg文件(.cfg文件用户mysql5.6)。 然后import表空间 OTHERSERVER|mysql>ALTERTABLEmydatabase.mytableIMPORTTABLESPACE; 3.1.5 窄备份 窄备份指不备份secondary索引数据。 这样可以减少备份的大小。 缺点就是需要重建索引,会很慢。 3.1.5.1 创建窄备份 $innobackupex--compact/data/backups 创建了之后查看xtrabackup_checkpoint backup_type = full-backuped from_lsn =0 to_lsn =2888984349 last_lsn =2888984349 compact =1 compact=1说明该备份是窄备份。 3.1.5.2 预备窄备份 在预备窄备份的时候需要使用—rebuild-indexes来重新创建索引 $innobackupex--apply-log--rebuild-indexes/data/backups/2013-02-01_10-29-48 从输出上可以看到索引被重建 13020110: 40: 20 InnoDB: Waitingforthebackgroundthreadstostart Rebuildingindexesfortablesbtest/sbtest1(spaceid: 10) Foundindexk_1 Dropping1index(es). Rebuilding1index(es). Re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- xtrabackup 使用手册