MySQL之Xtrabackup的使⽤
⼀、Xtrabackup介绍
XtraBackup(PXB) ⼯具是Percona公司⽤perl语⾔开发的⼀个⽤于MySQL数据库物理热备的备份⼯具,⽀持MySQl(Oracle)、Percona Server和MariaDB,并且全部开源。
1.1 Xtrabackup 优点
1)备份速度快,物理备份可靠
2)备份过程不会打断正在执⾏的事务(⽆需锁表)
3)能够基于压缩等功能节约磁盘空间和流量
4)⾃动备份校验
5)还原速度快
6)可以流传将备份传输到另外⼀台机器上
7)在不增加服务器负载的情况备份数据
1.2 Xtrabackup备份原理
备份开始时⾸先会开启⼀个后台检测进程,实时检测mysq redo的变化,⼀旦发现有新的⽇志写⼊,⽴刻将⽇志记⼊后台⽇志⽂件xtrabackup_log中,之后复制innodb的数据⽂件⼀系统表空间⽂件ibdatax,复制结束后,将执⾏flush tables with readlock,然后复制.frm MYI MYD等⽂件,最后执⾏unlock tables,最终停⽌xtrabackup_log。
1.3 增量备份介绍:
1)、⾸先完成⼀个完全备份,并记录下此时检查点LSN;
2)、然后增量备份时,⽐较表空间中每个页的LSN是否⼤于上次备份的LSN,若是则备份该页并记录当前检查点的LSN。
增量备份优点:
1)、数据库太⼤没有⾜够的空间全量备份,增量备份能有效节省空间,并且效率⾼;
2)、⽀持热备份,备份过程不锁表(针对InnoDB⽽⾔),不阻塞数据库的读写;
3)、每⽇备份只产⽣少量数据,也可采⽤远程备份,节省本地空间;
4)、备份恢复基于⽂件操作,降低直接对数据库操作风险;
5)、备份效率更⾼,恢复效率更⾼。
⼆、 Xtrabackup 安装
yum源中的XtraBackup版本较低不能备份⾼版本的MySQ L 数据库,所以不建议使⽤yum的⽅式安装XtraBackup。
根据⾃⼰的MySQ L 版本前往下载对应的安装包,我的MySQL版本是5.7的这⾥我⽤的是2.4.9的版本。
2.1 下载 rpm ⽂件
wget www.percona/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
2.2 安装
[root@VM_0_15_centos tmp]# rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
warning: percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
error: Failed dependencies:
libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.9-1.el7.x86_64
perl(DBD::mysql) is needed by percona-xtrabackup-24-2.4.9-1.el7.x86_64
安装mysql失败perl(Digest::MD5) is needed by percona-xtrabackup-24-2.4.9-1.el7.x86_64
发现需要先安装依赖:
wget /centos/7/extras/x86_64/Packages/libev-4.15-7.el7.x86_64.rpm
rpm -ivh libev-4.15-7.el7.x86_64.rpm
yum install perl-DBI
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL
yum -y install perl-Digest-MD5
重新安装Xtrabackup :
rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
查看安装版本:
[root@VM_0_15_centos tmp]# xtrabackup -version
xtrabackup version 2.4.9 based on MySQL server 5.7.13 Linux (x86_64) (revision id: a467167cdd4)
查看安装的路径:
[root@VM_0_15_centos tmp]# rpm -ql percona-xtrabackup-24
/usr/bin/innobackupex        #xtrabackup 的软连接
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt        #加密解密⽤
/
usr/bin/xbstream        #类似于tar,是 Percona ⾃⼰实现的⼀种⽀持并发写的流⽂件格式
/usr/bin/xtrabackup
/usr/share/doc/percona-xtrabackup-24-2.4.9
/usr/share/doc/percona-xtrabackup-24-2.4.9/COPYING
/usr/share/man/man1/
/usr/share/man/man1/
/usr/share/man/man1/
/usr/share/man/man1/
三、Xtrabackup 命令说明
详细的命令说明可以查看,这⾥只列举常⽤的命令参数。
选项说明:
选项类别缩写命
命令全名含义
通⽤选项-u--user=name数据库账号名
通⽤选项-p--password数据库密码
通⽤选项-H--host=name数据库主机IP地址
通⽤选项-P--port=name数据库主机端⼝号
通⽤选项-S--socket=name
备份选项--backup创建备份并且放⼊--target-dir⽬录中
备份选项--target-dir定backup的⽬的地,如果⽬录不存在,xtrabakcup会创建。如果⽬录存在且为空则成功。不会覆盖已存在的⽂件。
增量选项--incremental-basedir 压缩/解压选
--compress 压缩
压缩/解压选
--compress-threads=n启⽤n个线程进⾏压缩压缩/解压选
--decompress准备数据之前先解压加密/解密选
--encrypt=AES128AES192
加密/解密选项--encrypt-
key=ENCRYPTION_KEY
使⽤适当长度的加密密钥。不建议在通过命令⾏访问机器的情况下使⽤此选项,因此可以将该密钥视为过程信息的⼀部
加密/解密选项--encrypt-key-file=KEYFILE可从中读取适当长度的原始密钥的⽂件的名称。该⽂件必须是⼀个简单的⼆进制(或⽂本)⽂件,其中包含准确使⽤的密钥
加密/解密选
--encrypt-threads可以指定多个线程并⾏地进⾏加密
加密/解密选
--encrypt-chunk-size可⽤于指定每个加密线程的⼯作加密缓冲区的⼤⼩(以字节为单位)(默认值为64K)
加密/解密选
--decrypt解密
准备选项--prepare实现通过回滚未提交的事务及同步已经提交的事务⾄数据⽂件使数据⽂件处于⼀致性状态
准备选项--apply-log-only prepare备份的时候只执⾏redo阶段,⽤于增量备份(最后⼀次增量备份的准备不需要此选项)还原选项--copy-back做数据恢复时将备份数据⽂件拷贝到MySQL服务器的datadir。
还原选项--move-back 这个选项与--copy-back相似,唯⼀的区别是它不拷贝⽂件,⽽是移动⽂件到⽬的地。这个选项移除backup⽂件,⽤时候必须⼩⼼。
选项类别缩写命
命令全名含义
参数说明:
--apply-log-only:prepare备份的时候只执⾏redo阶段,⽤于增量备份。
--backup:创建备份并且放⼊--target-dir⽬录中
--close-files:不保持⽂件打开状态,xtrabackup打开表空间的时候通常不会关闭⽂件句柄,⽬的是为了正确处理DDL操作。如果表空间数量⾮常巨⼤并且不适合任何限制,⼀旦⽂件不在被访问的时候这个选项可以关闭⽂件句柄.打开这个选项会产⽣不--compact:创建⼀份没有辅助索引的紧凑备份
--compress:压缩所有输出数据,包括事务⽇志⽂件和元数据⽂件,通过指定的压缩算法,⽬前唯⼀⽀持的算法是quicklz.结果⽂件是qpress归档格式,每个xtrabackup创建的*.qp⽂件都可以通过qpress程序提取或者解压缩
--compress-chunk-size=#:压缩线程⼯作buffer的字节⼤⼩,默认是64K
--compress-threads=#:xtrabackup进⾏并⾏数据压缩时的worker线程的数量,该选项默认值是1,并⾏压缩('compress-threads')可以和并⾏⽂件拷贝('parallel')⼀起使⽤。例如:'--parallel=4 --compress --compress-threads=2'会创建4个IO线程读取数--create-ib-logfile:这个选项⽬前还没有实现,⽬前创建Innodb事务⽇志,你还是需要prepare两次。
--datadir=DIRECTORY:backup的源⽬录,mysql实例的数据⽬录。从myf中读取,或者命令⾏指定。
--defaults-extra-file=[MY.CNF]:在global files⽂件之后读取,必须在命令⾏的第⼀选项位置指定。
--defaults-file=[MY.CNF]:唯⼀从给定⽂件读取默认选项,必须是个真实⽂件,必须在命令⾏第⼀个选项位置指定。
--defaults-group=GROUP-NAME:从配置⽂件读取的组,innobakcupex多个实例部署时使⽤。
--export:为导出的表创建必要的⽂件
--extra-lsndir=DIRECTORY:(for --bakcup):在指定⽬录创建⼀份xtrabakcup_checkpoints⽂件的额外的备份。
--incremental-basedir=DIRECTORY:创建⼀份增量备份时,这个⽬录是增量别分的⼀份包含了full bakcup的Base数据集。
--incremental-dir=DIRECTORY:prepare增量备份的时候,增量备份在DIRECTORY结合full backup创建出⼀份新的full backup。
--incremental-force-scan:创建⼀份增量备份时,强制扫描所有增在备份中的数据页即使完全改变的page bitmap数据可⽤。
--incremetal-lsn=LSN:创建增量备份的时候指定lsn。
--innodb-log-arch-dir:指定包含归档⽇志的⽬录。只能和xtrabackup --prepare选项⼀起使⽤。
--innodb-miscellaneous:从Myf⽂件读取的⼀组Innodb选项。以便xtrabackup以同样的配置启动内置的Innodb。通常不需要显⽰指定。
--log-copy-interval=#:这个选项指定了log拷贝线程check的时间间隔(默认1秒)。
--log-stream:xtrabakcup不拷贝数据⽂件,将事务⽇志内容重定向到标准输出直到--suspend-at-end⽂件被删除。这个选项⾃动开启--suspend-at-end。
--no-defaults:不从任何选项⽂件中读取任何默认选项,必须在命令⾏第⼀个选项。
--databases=#:指定了需要备份的数据库和表。
--database-file=#:指定包含数据库和表的⽂件格式为databasename1.tablename1为⼀个元素,⼀个元素⼀⾏。
--parallel=#:指定备份时拷贝多个数据⽂件并发的进程数,默认值为1。
--prepare:xtrabackup在⼀份通过--backup⽣成的备份执⾏还原操作,以便准备使⽤。
--print-default:打印程序参数列表并退出,必须放在命令⾏⾸位。
--print-param:使xtrabackup打印参数⽤来将数据⽂件拷贝到datadir并还原它们。
--rebuild_indexes:在apply事务⽇志之后重建innodb辅助索引,只有和--prepare⼀起才⽣效。
--rebuild_threads=#:在紧凑备份重建辅助索引的线程数,只有和--prepare和rebuild-index⼀起才⽣效。
--stats:xtrabakcup扫描指定数据⽂件并打印出索引统计。
--stream=name:将所有备份⽂件以指定格式流向标准输出,⽬前⽀持的格式有xbstream和tar。
--suspend-at-end:使xtrabackup在--target-dir⽬录中⽣成xtrabakcup_suspended⽂件。在拷贝数据⽂件之后xtrabackup不是退出⽽是继续拷贝⽇志⽂件并且等待知道xtrabakcup_suspended⽂件被删除。这项可以使xtrabackup和其他程序协同⼯作。--tables=name:正则表达式匹配database.tablename。备份匹配的表。
--tables-file=name:指定⽂件,⼀个表名⼀⾏。
--target-dir=DIRECTORY:指定backup的⽬的地,如果⽬录不存在,xtrabakcup会创建。如果⽬录存在且为空则成功。不会覆盖已存在的⽂件。
--throttle=#:指定每秒操作读写对的数量。
--tmpdir=name:当使⽤--print-param指定的时候打印出正确的tmpdir参数。
--to-archived-lsn=LSN:指定prepare备份时apply事务⽇志的LSN,只能和xtarbackup --prepare选项⼀起⽤。
--user-memory = #:通过--prepare prepare备份时候分配多⼤内存,⽬的像innodb_buffer_pool_size。默认值100M如果你有⾜够⼤的内存。1-2G是推荐值,⽀持各种单位(1MB,1M,1GB,1G)。
--version:打印xtrabackup版本并退出。
--xbstream:⽀持同时压缩和流式化。需要客服传统归档tar,cpio和其他不允许动态streaming⽣成的⽂件的限制,例如动态压缩⽂件,xbstream超越其他传统流式/归档格式的的优点是,并发stream多个⽂件并且更紧凑的数据存储(所以可以和--paral
四、Xtrabackup 实战
4.1 全量备份
1.创建备份
[root@VM_0_15_centos backup]# xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/xtrabackup/
如果⽬标⽬录不存在,xtrabackup会创建它。xtrabackup不会覆盖现有⽂件,如果⽬标⽂件已存在它会因操作系统错误17⽽失败。
2.准备备份
xtrabackup --prepare --target-dir=/backup/xtrabackup/
⼀般情况下,在备份完成后,数据尚且不能⽤于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步⾄数据⽂件中的事务。因此,此时数据⽂件仍处理
不⼀致状态。--prepare参数实现通过回滚未提交的事务及同步已经提交的事务⾄数据⽂件使数据⽂件处于⼀致性状态。
3.恢复备份
[root@VM_0_15_centos xtrabackup]# systemctl stop mysqld # 关闭 MySQL 服务
[root@VM_0_15_centos xtrabackup]# rsync -avrP /backup/xtrabackup/ /var/lib/mysql/ # 还原数据
[root@VM_0_15_centos xtrabackup]# chown -R mysql:mysql /var/lib/mysql
[root@VM_0_15_centos xtrabackup]# systemctl start mysqld # 重启 MySQL 服务
4.2 增量备份
**1.先创建完全备份 **
xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/xtrabackup/
2.创建第⼀次增量备份
xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/inc1/ --incremental-basedir=/backup/xtrabackup/
3.创建第⼆次增量备份
xtrabackup --uroot -p123456 --databases=test --backup --target-dir=/backup/inc2/ --incremental-basedir=/backup/inc1/
4.准备全量备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/
5.准备第⼀次增量备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/xtrabackup/ --incremental-dir=/backup/inc1 6.准备第⼆次增量备份
xtrabackup --prepare --target-dir=/backup/xtrabackup/ --incremental-dir=/backup/inc2/
7.恢复数据
systemctl stop mysqld # 停⽌服务
rsync -avrP /backup/xtrabackup/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld # 启动服务
现在数据已经恢复到执⾏第⼆次增量备份命令时的数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。