mysql 备份 第三方工具_使用第三方工具Xtrabackup进行MySQL备份

本文详细介绍了如何使用Xtrabackup这款由Percona提供的开源工具进行MySQL数据库的热备份,包括安装、完整备份、增量备份及恢复操作。Xtrabackup具备快速备份、不影响事务、节约存储空间等特点,是MySQL备份的理想选择。
摘要由CSDN通过智能技术生成

使用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

5efd22266107cc8732ac0ad6781c8972.png

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

1、完全备份# innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/

首先将二进制log文件放在单独的目录

# vim /etc/my.cnf

log-bin=/data/binlog/master-bin

626e5e3e6fd8ea546ec133cfec460b67.png

重启mysqld服务

# service mysqld restart

查看设置是否生效

mysql> show binary logs;

+-------------------+-----------+

| Log_name          | File_size |

+-------------------+-----------+

| master-bin.000001 |       107 |

+-------------------+-----------+

创建备份目录

# mkdir /mybackups

# innobackupex --user=root /mybackups/

8f0e1d32c82f1d46726e2a01369a4991.png

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!

831568840486ba59380828577b88cf8c.png

在实现“准备”的过程中,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指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

c63cdae7065076b45a6bbc327e8259b4.png

示例:

备份:

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');

c5abb64836531ab8cd11ec5e4c3c508c.png

2.第一次增量备份

# innobackupex --incremental /mybackups/ --incremental-basedir=/mybackups/2015-12-26_21-41-31

ba362863221be5a238439f5c3e6e47b8.png

3.第二次增量备份(在第一次增量备份基础上增加)

# innobackupex --incremental /mybackups --incremental-basedir=/mybackups/2015-12-26_21-41-31

2ec1e6f89939decbd79cd361fd7c7bd5.png

模拟数据被删除

# rm -rf /data/mydata/*

还原:

准备

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

dc0331a244c59b37384555783feae7e3.png

接着执行:

# 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/

12ebc31f55a957d38862ae0b0e5bbe35.png

还原:

# innobackupex --copy-back /mybackups/2015-12-26_21-41-31/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值