一个技术博客

Percona XtraBackup 使用、备份、恢复

本文由 Tim 于 2016-04-30 12:09:59 发表

一、安装Percona XtraBackup

继续偷懒使用yum安装,官方安装文档https://www.percona.com/doc/percona-xtrabackup/2.4/installation/yum_repo.html,博主安装的是2.4目前最新版

(1)安装yum源

–查看安装包

可以看到类似信息

(2)安装依赖包,此步需注意,官网文档没有写明需要安装依赖包,不过博主亲测Percona XtraBackup 2.4不安装依赖包会报错

(3)安装percona-xtrabackup-24 还需要libev,而libev需要在EPEL中获取,启用EPEL软件库(点击查看安装EPEL)

安装

看到类似信息,libev安装完成

(4)安装percona-xtrabackup-24

可以看到类似信息

Percona XtraBackup 2.4 安装完成

二、Percona XtraBackup使用

XtraBackup由以下5个工具组成,官网描述如下

innobackupex is the symlink for 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.
xtrabackup compiled C binary that provides functionality to backup a whole MySQL database instance with MyISAM, InnoDB, andXtraDB tables.
xbcrypt utility used for encrypting and decrypting backup files.(对备份文件加解密)
xbstream utility that allows streaming and extracting files to/from the xbstream format.(使用流压缩备份)
xbcloud utility used for downloading and uploading full or part of xbstream archive from/to cloud.

1、innobackupex备份与恢复

innobackupex 可以理解为用Perl封装的xtrabackup,在以前的版本中配合xtrabackup完成全量及增量的备份,最新版本中xtrabackup更强大,可以实现innobackupex的所有功能。甚至官网有如下说明 innobackupex still supports all features and syntax as 2.2 version did, but is now deprecated and will be removed in next major release.(innobackupex(v2.4) 仍然支持v2.2的所有功能和语法,不过已被废弃,并将在下一主要版本移除)

(1)innobackupex 热备完整备份,–no-timestamp 表示不创建时间点子目录,不加此选项表示创建时间点子目录,类似2016-04-28_16-41-29,–parallel 表示线程。
innobackupex –user=user –password=password  /data/backup/hotbackup/base –no-timestamp –parallel=2

增量备份,仅对基于Innodb或者使用Xtradb引擎的表进行增量备份,其他存储引擎会执行全备
innobackupex –user=user –password=password –incremental /data/backup/hotbackup/inc_1 –incremental-basedir=/data/backup/hotbackup/base  –no-timestamp –parallel=2

(2)innobackupex恢复
恢复准备基础备份,–apply-log选项时 可选–use-memory参数 表示使用多少内存,不超内存可用值时,越大越快

执行后看到类似信息继续

增量备份添加到基础备份

执行后可看到类似信息

注:当准备基础备份和合并增量备份(最后一个增量备份除外)的时候,需要使用–redo-only参数.
当所有的增量备份合并完成之后,再一次准备全备份,回滚未提交的事务,并生成ib_logfile*等文件

首先清空mysql的数据目录,并关闭,service mysqld stop
将备份文件还原到数据目录,修改文件属组并启动

 

2、xtrabackup备份与恢复

官网安装文档,2.4版已经支持MyISAM。备份分为(1)创建完全备份 (2)创建增量备份 (3)

创建备份目录

mkdir -p /data/backups/

(1)创建完全备份,–datadir会从mysql默认配置文件中读取

可看到如下信息

completed OK! 即完整备份完成

(2)创建增量备份,–target-dir是增量备份存放路径,–incremental-basedir是前一步完整备份路径

可看到如下信息

completed OK!  增量备份完成。

此时查看文件夹大小,可以发现增量备份比完整备份小

也可以查看备份文件中的xtrabackup_checkpoints,有详细说明

 

(3)Prepare,将增量备份文件添加到完整备份

首先,Prepare the base backup

看到 completed OK!后,继续下一步增量备份文件添加到完整备份

出现 completed OK! 后,再次Prepare完整备份,Prepare the whole backup to be ready to use

此步骤会生成ib_logfile* (重做日志文件)和ibtmp1(临时表空间)

信息如下

此时恢复文件准备完成。

(4)复制到mysql数据目录下,并修改文件属组

关闭数据库

备份之前的目录,如果有必要

使用rsync或者cp命令复制到mysql数据目录下

cp -r /data/backups/base/* /var/lib/mysql/

修改属组并重启

 

Xtrabackup是一款支持MyISAM、InnoDB、XtraDB,并能在线热备,全备,增量备份非常强大备份工具,备份速度接近IO,且事务不丢失。

mysqldump是mysql自带的于转存储数据库的备份工具,它主要产生一个SQL脚本,结合binlog日志,可以实现基本的增量备份。Innodb使用–single-transaction 选项,相当于一个快照,保证备份的一致性。

如果数据量非常大可以采用Xtrabackup,采用每周进行一次全备,剩下6天增量备份的策略,数据量小于几十G时,mysqldump的速度也可以接受,且mysqldump产生的sql脚本可以直观阅读,灵活性更好。两者属于互补关系,并不是替代。因此需要根据实际情况制定备份策略,简单适用即可。

 

 

 

Tips:

(1)关闭selinux

有次使用innobackupex时偶然遇到如下报错,mysql无法启动,百思不得其解,最后发现是selinux惹的祸,关闭selinux即可

 

查看selinux

临时关闭

永久关闭selinux
编辑/etc/selinux/config,找到SELINUX 行(SELINUX=enforcing)修改成为:SELINUX=disabled 后重启
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted – Only targeted network daemons are protected.
# strict – Full SELinux protection.
SELINUXTYPE=targeted

(2)log_timestamps,变量说明

细心的童鞋会发现,上一个tip中,mysql错误日志中时间如下2016-04-28T02:16:18.136334Z,而博主当时的服务器时间是2016-04-28 10:16 左右,这是为何呢?

通过文档发现Mysql 5.7.2后新增log_timestamps,日志的时间格式,默认UTC,世界协调时间(UTC)和格林威治时间(GMT)处于同个时区零时区(中时区),比北京时间(CST,东八区) 刚好晚了8个小时

As of MySQL 5.7.2, the log_timestamps system variable controls the timestamp time zone of messages written to the error log (as well as to general query log and slow query log files). Permitted values are UTC (the default) and SYSTEM (local system time zone). Before MySQL 5.7.2, messages use the local system time zone.

查看log_timestamps

目前只有两个值UTC和SYSTEM

Introduced 5.7.2
Command-Line Format --log_timestamps=#
System Variable Name log_timestamps
Variable Scope Global
Dynamic Variable Yes
Permitted Values Type enumeration
Default UTC
Valid Values UTC
SYSTEM

在配置文件my.cnf中[mysqld]中添加如下行,即记录本地时间

(3)*.pem

对比下xtrabackup复制的文件,可以发现并没有备份mysql目录下的*.pem文件,那这些文件有什么用呢?

使用show variables like ‘%ssl%’; 查看可以发现这些文件是用来进行加密连接的。

MySQL 5.7版本下默认就会使用SSL的方式来进行连接,远程连接是可以用\s 进行查看,类似SSL: Cipher in use is DHE-RSA-AES256-SHA

更详细的说明http://www.2cto.com/database/201512/453098.html
官网使用文档http://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html

欢迎转载,转载请注明出处!Tim » Percona XtraBackup 使用、备份、恢复

点赞 (1)or拍砖 (0)
分享到:更多 ()