阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Xtrabackup进行MySQL备份

259次阅读
没有评论

共计 4282 个字符,预计需要花费 11 分钟才能阅读完成。

使用 Xtrabackup 进行 MySQL 备份:

一、安装

1、简介

Xtrabackup 是由 percona 提供的 mysql 数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对 innodb 和 xtradb 数据库进行热备的工具。特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;

2、安装

装备好安装包
percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm
percona-toolkit-2.2.4-1.noarch.rpm
其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 获得

# yum install ./*.rpm

二、完整备份及恢复的实现

1、完全备份# innobackupex –user=DBUSER –password=DBUSERPASS  /path/to/BACKUP-DIR/
首先将二进制 log 文件放在单独的目录
# vim /etc/my.cnf
log-bin=/data/binlog/master-bin

使用 Xtrabackup 进行 MySQL 备份
重启 mysqld 服务
# service mysqld restart

查看设置是否生效
mysql> show binary logs;
+——————-+———–+
| Log_name          | File_size |
+——————-+———–+
| master-bin.000001 |       107 |
+——————-+———–+
创建备份目录
# mkdir /mybackups

# innobackupex –user=root /mybackups/

使用 Xtrabackup 进行 MySQL 备份

 

2、准备 (prepare) 一个完全备份
模拟数据库损坏

# cd /data/mydata

# rm -rf *

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobakupex 命令的 –apply-log 选项可用于实现上述功能。如下面的命令:

# innobackupex –apply-log /mybackups/2016-01-07_08-09-58/
如果执行正确,其最后输出的几行信息通常如下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
160107  8:42:26  InnoDB: Starting shutdown…
160107  8:42:30  InnoDB: Shutdown completed; log sequence number 1969676
160107 08:42:30  innobackupex: completed OK!

在实现“准备”的过程中,innobackupex 通常还可以使用 –use-memory 选项来指定其可以使用的内存的大小,默认通常为 100M。如果有足够的内存可用,可以多划分一些内存给 prepare 的过程,以提高其完成速度。

3、从一个完全备份中恢复数据 

注意:恢复不用启动 MySQL

innobackupex 命令的 –copy-back 选项用于执行恢复操作,其通过复制所有数据相关的文件至 mysql 服务器 DATADIR 目录中来执行恢复过程。innobackupex 通过 backup-my.cnf 来获取 DATADIR 目录的相关信息。

# innobackupex –copy-back /mybackups/2016-01-07_08-09-58/
如果执行正确,其输出信息的最后几行通常如下:
innobackupex: Starting to copy InnoDB log files
innobackupex: in ‘/mybackups/2016-01-07_08-09-58’
innobackupex: back to original InnoDB log directory ‘/data/mydata’
innobackupex: Copying ‘/mybackups/2016-01-07_08-09-58/ib_logfile0’ to ‘/data/mydata/ib_logfile0’
innobackupex: Copying ‘/mybackups/2016-01-07_08-09-58/ib_logfile1’ to ‘/data/mydata/ib_logfile1’
innobackupex: Finished copying back files.

160107 08:44:24  innobackupex: completed OK!

请确保如上信息的最行一行出现“innobackupex: completed OK!”。

当数据恢复至 DATADIR 目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如 mysql,否则,在启动 mysqld 之前还需要事先修改数据文件的属主和属组。如:

# chown -R mysql.mysql /data/mydata

三、使用 innobackupex 进行增量备份

编辑 my.cnf 文件,开启每一个 innodb 数据表单独表空间选项(可以方便实现 innodb 高级设置及管理)
innodb_file_per_table = ON

# sed -i “s/ENGINE=MyISAM/ENGINE=InnoDB/g” /root/hello.sql

每个 InnoDB 的页面都会包含一个 LSN 信息,每当相关的数据发生改变,相关的页面的 LSN 就会自动增长。这正是 InnoDB 表可以进行增量备份的基础,即 innobackupex 通过备份上次完全备份之后发生改变的页面来实现。

要实现第一次增量备份,可以使用下面的命令进行:

# innobackupex –incremental /backup –incremental-basedir=BASEDIR

其中,BASEDIR 指的是完全备份所在的目录,此命令执行结束后,innobackupex 命令会在 /backup 目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其 –incremental-basedir 应该指向上一次的增量备份所在的目录。

需要注意的是,增量备份仅能应用于 InnoDB 或 XtraDB 表,对于 MyISAM 表而言,执行增量备份时其实进行的是完全备份。

“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
(1)需要在每个备份 (包括完全和各个增量备份) 上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
(2)基于所有的备份将未提交的事务进行“回滚”。

于是,操作就变成了:
# innobackupex –apply-log –redo-only BASE-DIR

接着执行:
# innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-1

而后是第二个增量:
# innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-2

其中 BASE-DIR 指的是完全备份所在的目录,而 INCREMENTAL-DIR- 1 指的是第一次增量备份的目录,INCREMENTAL-DIR- 2 指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

示例:

备份:
1. 完整备份:
# innobackupex –user=root /mybackups/
插入数据
创建数据库和表
mysql> create database mydb1;
mysql> use mydb1;
mysql> create table tb1(name char(10));
mysql> insert into tb1 values(‘tom’),(‘lily’);

2. 第一次增量备份
# innobackupex –incremental /mybackups/ –incremental-basedir=/mybackups/2015-12-26_21-41-31

3. 第二次增量备份(在第一次增量备份基础上增加)
# innobackupex –incremental /mybackups –incremental-basedir=/mybackups/2015-12-26_21-41-31

使用 Xtrabackup 进行 MySQL 备份
模拟数据被删除
# rm -rf /data/mydata/*

还原:

准备
# innobackupex –apply-log –redo-only /mybackups/2015-12-26_21-41-31

使用 Xtrabackup 进行 MySQL 备份
接着执行:
# innobackupex –apply-log –redo-only /mybackups/2015-12-26_21-41-31 –incremental-dir=/mybackups/2015-12-26_21-47-24/

而后是第二个增量:
# innobackupex –apply-log –redo-only /mybackups/2015-12-26_21-41-31 –incremental-dir=/mybackups/2015-12-26_21-53-24/

使用 Xtrabackup 进行 MySQL 备份
还原:
# innobackupex –copy-back /mybackups/2015-12-26_21-41-31/

更多 XtraBackup 相关教程见以下内容

MySQL 管理之使用 XtraBackup 进行热备 http://www.linuxidc.com/Linux/2014-04/99671.htm

MySQL 开源备份工具 Xtrabackup 备份部署 http://www.linuxidc.com/Linux/2013-06/85627.htm

MySQL Xtrabackup 备份和恢复 http://www.linuxidc.com/Linux/2011-12/50275.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-11/137734.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4282字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中