84  
xtrabackup备份恢复mysql数据库
作者: wyasw 于 2020年03月29日 发布在分类 / linux / mysql 下,并于 2020年03月29日 编辑
xtrabackup

Xtrabackup备份恢复mysql数据库

1.1 Xtrabackup概念

xtrabackup是一种物理备份工具,通过协议连接到mysql服务端,然后读取并复制innodb底层的"数据块",完成所谓的"物理备份"

支持对innodb进行热备、增量备份、差量备份。

支持对myisam进行温备,因为在备份myisam表时,会对myisam表添加读锁,而且不能对myisam表进行增量备份,每次备份myisam数据都是全量,即使名义上是增量,但是实际上仍然是全量。


1xtrabackup在启动后,会有两个线程,一个是redolog扫描线程,一个是innodb文件的ibd文件拷贝线程。redo日志线程总是在拷贝线程之前启动,早拷贝线程结束后结束。

2ibd文件拷贝完成后通知主进程,告知拷贝完毕。

3、启动非innodb引擎的拷贝线程,加全局读锁。

4、非innodb引擎的文件拷贝完毕后,停止拷贝线程,然后停止redo线程,在停止redo线程之前,redo线程一直在拷贝,到最新的日志。

5redo线程结束后,执行解锁表操作,进行收尾工作,备份结束。

1.2 Xtrabackup安装

yum -y update

mkdir /home/tools

cd /home/tools

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

#安装依赖包:

yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5 rsync

rpm -ivh percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm

注意:安装过程遇到libev.so.4问题

1)解决 libev.so.4()(64bit)

可以自行去http://rpm.pbone.net搜索系统所需要的rpm包进行下载安装

wget ftp://ftp.pbone.net/mirror/apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/libev-4.15-1.el6.rf.x86_64.rpm

rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm

1.3 Xtrabackup常用参数

innobackupex使用方法

完整的选项使用请执行innobackupex --help,这里只介绍使用常用的选项进行完整备份及增量备份和还原。

innobackupex Options 这里只对常用参数进行描述

--defaults-file

数据库的配置文件路径,感觉本地备份不写也可以,远程没测试过。

--apply-log

准备在一个备份上启动mysql服务。

--copy-back

从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。

--no-timestamp

创建备份时不自动生成时间目录,可以自定义备份目录名例如: /backups/mysql/base

--databases

用于指定要备份的数据库, 多个库文件使用方法: “database1 database2″

--incremental

在全备份的基础上进行增量备份,后跟增量备份存贮目录路径

--incremental-basedir=DIRECTORY

增量备份所需要的全备份路径目录或上次做增量备份的目录路径

--incremental-dir=DIRECTORY

增量备份存贮的目录路径

--redo-only

用于准备增量备份内容把数据合并到全备份目录,配合--incremental-dir 增量备份目录使用。

--force-non-empty-directories

如果是特定库备份还原,不需要删掉整个mysql目录,只是特定库的及相关文件就可以,还原时加上此参数就不会报错。

1.4 Xtrabackup全量备份(注意:备份恢复mysql版本号注意要一致)

#将备份的文件存放在/home/dsf下面

mkdir /home/dsf

innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' /home/dsf

##后面显示

#190914 18:20:26 completed OK!

#则证明备份成功

##备份遇到错误,找不到好的办法,只能指定数据库备份

InnoDB: Attempted to open a previously opened tablespace. Previous tablespace mysql/slave_relay_log_info at filepath: ./mysql/slave_relay_log_info.ibd uses space ID: 15. Cannot open filepath: ./dcpay_common_service/alert_group_subscription.ibd which uses the same space ID.

解决方法:(指定数据库备份)

innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --databases=dsf /home/dsf

##如果使用压缩备份,可以用

innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --databases= "dsf dsf2" --no-timestamp --stream=tar ./ | gzip > dsf-dsf2.tar.gz

1.5  Xtrabackup全量恢复

1、恢复第一步:应用日志

innobackupex --defaults-file=/etc/my.cnf --apply-log /home/dsf/2019-09-14_18-00-54/

2、恢复第二步:拷贝文件

/etc/init.d/mysqld stop

cd /home/deploy/mysql/

mv data/ data_old_0915

innobackupex --defaults-file=/etc/my.cnf --copy-back /home/dsf/2019-09-14_18-00-54/

chown -R mysql.mysql /home/deploy/mysql/

/etc/init.d/mysqld start

1.6 Xtrabackup增量备份

全量备份命令:

innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' /home/dsf

全量备份的目录为:

[root@mysql01 dsf]# ll

总用量 0

drwxr-x--- 6 root root 236 10月 11 14:42 2019-10-11_14-35-17

第一次增量备份:在全量备份上的基础进行增量备份:

innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --incremental /home/dsf  --incremental-basedir=/home/dsf/2019-10-11_14-35-17/

第一次增量备份目录为:

2019-10-11_15-00-12

第二次增量备份:在增量备份的基础进行增量备份:

innobackupex --defaults-file=/etc/my.cnf --host=localhost --socket=/home/deploy/mysql/tmp/mysql.sock --user=root --password='Passwd123456' --incremental /home/dsf  --incremental-basedir=/home/dsf/2019-10-11_15-00-12

1.7 Xtrabackup增量恢复

1.7.1 恢复第一步:应用日志

1、应用全备日志

innobackupex --apply-log --redo-only --use-memory=8G  /home/dsf/2019-10-11_14-35-17

2、应用第一次增量备份日志到全备

innobackupex --apply-log --redo-only --use-memory=8G /home/dsf/2019-10-11_14-35-17 --incremental-dir=/home/dsf/2019-10-11_15-00-12

3、应用第二次增量备份日志到全备,注意不加 --redo-only 参数(最后一次增量备份)

innobackupex --apply-log --use-memory=8G /home/dsf/2019-10-11_14-35-17 --incremental-dir=/home/dsf/2019-10-11_16-00-13

4、##如果最后一次应用增量备份日志到全备时不小心加了--redo-only参数。则把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据

innobackupex --apply-log --use-memory=8G /home/dsf/2019-10-11_14-35-17

1.8 恢复第二步:拷贝文件(只还原最终准备好的全量备份即可)

/etc/init.d/mysqld stop

cd /home/deploy/mysql/

mv data/ data_old_1010

innobackupex --defaults-file=/etc/my.cnf --copy-back /home/dsf/2019-10-11_14-35-17

chown -R mysql.mysql /home/deploy/mysql/

/etc/init.d/mysqld start




 推荐知识

 历史版本

修改日期 修改人 备注
2020-03-29 20:35:23[当前版本] wyasw 创建版本

 附件

附件类型

JPGJPG

文艺知识分享平台 - 4.3.0 - 文艺范儿