Mysql备份工具xtraback全量和增量测试

 

xtrabackup 是 percona 的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表)

官方网址http://www.percona.com/docs/wiki/percona-xtrabackup:start

Xtrabackup是由percona开发的一个开源软件,此软件可以说是innodb热备工具ibbackup的一个开源替代品。这个软件是由2个部分组成的:xtrabackup和innobackupex。Xtrabackup专门用于innodb引擎和 xtraDB引擎;而innobackupex是专门用于myisam和innodb引擎,及混合使用的引擎。

一、安装

1、RPM安装:

wget  http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.0/RPM/rhel5/x86_64/percona-xtrabackup-debuginfo-2.0.0-417.rhel5.x86_64.rpm

rpm -ivh –nodeps percona-xtrabackup-debuginfo-2.0.0-417.rhel5.x86_64.rpm

–nodeps(不检查软件间的依赖关系),因为安装xtrabackup需要mysql_client,但是我的是通过源码安装的。所以环境变量要设置正确

比如 export PATH=$PATH:/usr/local/mysql/bin 如果mysql没有设置到PATH里 会报错。

2、下载二进制源码包:

wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.0/binary/Linux/x86_64/percona-xtrabackup-2.0.0.tar.gz

tar -zxvf percona-xtrabackup-2.0.0.tar.gz

mv  percona-xtrabackup-2.0.0  /usr/loca/xtrabackup

3、使用源代码方式安装

如果你想使用源代码方式安装的话,则会发现 其安装方式有点古怪,这是因为它采用的在MySQL源代码上打补丁构建的方式。

tar zxf xtrabackup-0.8.tar.gz
cd xtrabackup-0.8
./configure
make
进行到这里时,千万别惯性使然接着make install,那样就会接着安装MySQL了,正确方法是接着:
cd innobase/xtrabackup/
make
make install

查看版本号:

mysqld配置文件:(多实例时备份必须要)

  1. [mysqld]
  2. innodb_data_home_dir = /www/mysqldata/ibdata #用来储存文件的数据
  3. innodb_log_group_home_dir = /www/mysqldata/iblogs
  4. innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
  5. innodb_log_files_in_group = 2
  6. innodb_log_file_size = 1G

注:文本测试中没有多实例,使用默认my.cnf。

 

二、xtrabackup备份和恢复

 

Xtrabackup有两个主要的工具:xtrabackup、innobackupex。    xtrabackup只能备份InnoDB和XtraDB两种数据表,支持在线热备份,不会锁表innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表,如果你的数据库里有innodb和myisam存储引擎,只能使用innobackupex备份。
* xtrabackup - 用于热备份innodb, xtradb表的工具,不能备份其他表。 
* innobackupex - 对xtrabackup封装的perl脚本,提供了myisam表备份的能力。(能进行整库和数据表备份)。本文旨在介绍Xtrabackup工具对数据库进行增量备份实践。

1、innobackupex-1.5.1备份

 

在实施备份时,需要在数据库运行的情况下在线执行,并先提前建立用于备份的路径。

  1. innobackupex [--defaults-file=/etc/my.cnf] –user=root [--host=192.168.10.198] [--password=xxx] [--port=3306] /www/backup/ 2>/www/backup/backup.log

参数:

/www/backup/   #备份的目录

2>/www/backup/backup.log   #将备份过程中的输出信息重定向到/www/backup/backup.log

–slave-info  #会记录复制主日志的复制点,便于重新做复制用。(用在备份从机器用)

xtrabackup_binlog_info  #存放binlog的信息。(binlog需要另外拷贝备份,如果需要binlog的话)

xtrabackup_checkpoints   #存放备份的起始位置和结束位置。

–-stream=tar  #告诉xtrabackup,备份需要以tar的文件流方式输出。

–-include='test'  #备份包含的库表,如例:意思是要备份test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:tableA & tableB,则写成:–-include='test.tableA|test.tableB';再如果test库下只有2个前缀是 table的表,你还可以写成:–-include='test.table*'。

–-throttle=500   #xtrabackup在备份过程中,IO操作比较多,因此需要限定一下IO操作。以免服务器压力过大,不过好像作用不太明显,也不知道是不是设置的还是过大。待测…

–-socket=/data/mysql/backup/mysql.sock  #指定mysql.sock所在位置,以便备份进程登录mysql

--apply-log

--redo-only

(1)、完整数据备份

例如:

  1. mysql> show databases;
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | jss |
  7. | my_db |
  8. | mysql |
  9. | test |
  10. +--------------------+
  11. 5 rows in set (0.00 sec)

全量备份:

  1. innobackupex --defaults-file=/etc/my.cnf /www/backup/

将在/www/backup/  目录下产生一个按当前日期时间命令的目录,如 2012-07-18_15-05-06,在恢复时,注意要先关闭服务器,并且将 datadir 的目录先清空,在恢复数据后一定需要重置该目录的权限。

模拟故障,具体操作如下:

/usr/local/mysql5/bin/mysqladmin  -uroot shutdown

mv /www/mysqldata  /tmp/

mkdir /www/mysqldata

应用全量备份:

  1. innobackupex --apply-log /www/backup/2012-07-18_15-05-06/
  1. innobackupex --copy-back /www/backup/2012-07-18_15-05-06/

ln -s /usr/local/mysql5/share/english  /www/mysqldata/mysql/english  #恢复初始目录树,否则无法启动

chown -R mysql.mysql /www/mysqldata

/usr/local/mysql5/bin/mysqld_safe  --user=mysql &

提示,可以在备份时直接压缩以节约磁盘空间:

  1. innobackupex --defaults-file=/etc/my.cnf --stream=tar /www/backup/ | gzip > /www/backup/compress/mysql_backup.tar.gz

不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件。

  1. tar zxfi /www/backup/compress/mysql_backup.tar.gz
  2. innobackupex --apply-log /www/backup/compress
  3. innobackupex --copy-back /www/backup/compress

(2)Innobackupex针对某个库增量备份:

增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备了。

全量备份:

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" /www/backup/full/

登录到数据库,创建几个新的对象:

  1. mysql> use jss;
  2. Database changed
  3. mysql> show tables;
  4. +---------------+
  5. | Tables_in_jss |
  6. +---------------+
  7. | j1 |
  8. +---------------+
  9. 1 row in set (0.00 sec)
  10. mysql> truncate table j1;
  11. Query OK, 0 rows affected (0.01 sec)
  12. mysql> create table ja(id int);
  13. Query OK, 0 rows affected (0.04 sec)
  14. mysql> insert into ja values (1);
  15. Query OK, 1 row affected (0.01 sec)

完整备份目录上做第一次增量备份

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --incremental --incremental-basedir=/www/backup/full/2012-07-18_19-47-49/ /www/backup/inc

如果默认存储引擎是基于MyISAM,那么增量备份时备份的文件分别是.frm、.MYD、.MYI。

如果默认存储引擎是基于InnoDB,那么增量备份时备份的只会是.frm文件,我的配置文件所采用的是独立表空间。

在 /www/backup/rec/下会产生增量文件:

[root@localhost jss]# cd /www/backup/inc/2012-07-18_19-55-17/

[root@localhost 2012-07-18_19-55-17]# ls -l

total 384

-rw-r--r-- 1 root root    250 Jul 18 19:55 backup-my.cnf

-rw-r----- 1 root root 360448 Jul 18 19:55 ibdata1.delta

-rw-r----- 1 root root     18 Jul 18 19:55 ibdata1.meta

drwxr-xr-x 2 root root   4096 Jul 18 19:55 jss

-rw-r--r-- 1 root root     13 Jul 18 19:55 xtrabackup_binary

-rw-r--r-- 1 root root     26 Jul 18 19:55 xtrabackup_binlog_info

-rw-r----- 1 root root     81 Jul 18 19:55 xtrabackup_checkpoints

-rw-r----- 1 root root   2560 Jul 18 19:55 xtrabackup_logfile.

[root@localhost 2012-07-18_19-55-17]# cd jss/

[root@localhost jss]# ls -l

total 28

-rw-r--r-- 1 mysql mysql   61 Jul 18 19:18 db.opt

-rw-r--r-- 1 mysql mysql 8556 Jul 18 19:18 j1.frm

-rw-rw---- 1 mysql mysql 8556 Jul 18 19:53 ja.frm

note:此过程仅影响XtraDB或基于InnoDB的表,其他带不同存储引擎的表会在增量备份出现时被完全复制

恢复过程也需要用到prepare
首先,提交事务必须重新执行每一个备份
然后,未提交事务必须回退

模拟故障

rm -rf  /www/mysqldata/jss

将完整备份中的数据恢复到数据库中

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/

第一个增量备份应用到完整备份

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/ --incremental-dir=/www/backup/inc/2012-07-18_19-55-17/

在完整备份目录下会看到一个新增文件:

经过分析,原来是在prepare时,XtraBackup并没有将增量备份集中,属于新建对象的.frm文件复制到完整备份集目录,因此在执行copy-back时,这部分文件自然也就没有复制回数据文件路径。只有手动还原到datadir。

拷贝到datadir目录下

cp -rp  2012-07-18_19-47-48jss   /www/mysqldata/jss

进入datadir查看文件:

[root@localhost backup]# cd  /www/mysqldata

[root@localhost mysqldata]# ls

ibdata1  ib_logfile0  ib_logfile1  jss  my_db  mysql  test  xtrabackup_binlog_pos_innodb  xtrabackup_checkpoints

[root@localhost mysqldata]# chown  -R mysql.mysql /www/mysqldata

重启mysql

2、xtrabackup备份详解

xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)
 mysql
 use jss;
 alter table j1 engine=innodb;

(1)全量备份及恢复

(使用xtrabackup,仅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中“default_table_type = InnoDB”否则不成功)。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/

执行两次:

  1. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
  2. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/

将数据库停掉,删除数据库下的ib*(ib开头的所有)文件。

将/www/backup/目录下的ib*文件拷贝到数据库目录。

设置权限:

#chown mysql:mysql ib*

重启数据库后测试,是否成功。

[root@localhost backup]# cp ib* /www/mysqldata/

[root@localhost backup]# chown  mysql.mysql /www/mysqldata/ib*

[root@localhost backup]# /usr/local/mysql/bin/mysqld_safe  --user=mysql &

[1] 1695

[root@localhost backup]# 120719 15:56:19 mysqld_safe Logging to '/www/mysqldata/localhost.localdomain.err'.

120719 15:56:19 mysqld_safe Starting mysqld daemon with databases from /www/mysqldata

[root@localhost backup]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.1.57-log MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use jss;

Database changed

mysql> select * from j2;

+------+

| id   |

+------+

|    2 |

+------+

1 row in set (0.01 sec)

注意,xtrabackup只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候,你必须有对应表结构文件(.frm)。

(2)增量备份及恢复

再次强调,xtrabackup做增量仅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中“default_table_type= InnoDB”否则不成功。

做增量前当然要先进行全量备份,在全量的基础上来进行增量。

首先进行全量备份。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/

在全量备份的基础上进行增量。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/inc/1 --incremental-basedir=/www/backup/

(注:/www/inc/1/是每次都需修改的。比如第二次增量就改成/www/inc/ 2,当然可以写个脚本进行自动备份,备份脚本将陆续奉上......恢复的时候也是一样)

增量恢复。(步骤同全量恢复,只是在执行恢复命令的时候中间多一步)

  1. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
  2. xtrabackup --target-dir=/www/backup/ --prepare --incremental-dir=/www/inc/1
  3. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/

将数据库停掉,删除数据库下 /www/mysqldata/ibdata 的ib*表文件。将/www/backup/目录下的ib*文件拷贝到数据库目录/www/mysqldata/ibdata。

设置权限:

#chown mysql:mysql ib*

重启后测试。是否成功。

注:备份前先登录数据库,打开一个表看看记录条数,然后进行备份,然后再对表最终的记录进行修改,然后在备份,再测试。

三、innobackupex-1.5.1  xtrabackup 相结合

备份策略:

整库备份直接用innobackupex-1.5.1脚本。

只对InnoDB或xtradb表,进行备份直接用xtrabackup。

由于xtrabackup不能备份表结构,所以备份时首先用innobackupex-1.5.1脚本对数据库进行整库备份。再用xtrabackup进 行表备份。分别进行。恢复时也分别进行恢复。如果发生表结构丢失则先使用innobackupex-1.5.1进行恢复,然后再用xtrabackup恢 复增量数据。用生成的文件ib*覆盖用innobackupex-1.5.1恢复后的ib*文件。

=======================================================================================

首先,innobackupex-1.5.1全备份:

  1. innobackupex --defaults-file=/etc/my.cnf /www/backup/full/ 2> /www/backup//1.log

#会生成一个时间文件夹,这里假如是2012-7-20_15-57-44

然后,xtrabackup 做增量备份:

  1. innobackupex-1.5.1--defaults-file=/etc/my.cnf --incremental --incremental-basedir=/www/backup/full/2012-7-20_15-57-44/ /www/backup/inc/1

恢复:

首先停掉数据库,备份二进制日志(如果有的话),然后删除数据库目录下的所有数据库文件.

cd /www/mysqldata

rm -rf * # 删除数据目录里的所有文件

恢复全量备份:

  1. innobackupex-1.5.1 --apply-log /www/backup/full/2012-7-20_15-57-44/ # 应用日志
  2. innobackupex-1.5.1 --copy-back /www/backup/full/2012-7-20_15-57-44/ # 拷贝文件

恢复增量备份:

  1. xtrabackup --prepare --target-dir=/www/backup/full/2012-7-20_15-57-44 --incremental-dir= /www/backup/inc/1

将/www/backup/目录下的ib*文件拷贝到数据库目录

重启mysql服务。

转载:http://blog.chinaunix.net/uid-25266990-id-3314699.html

Mysql备份工具xtraback全量和增量测试的更多相关文章

  1. innobackupex在线备份及恢复(全量和增量)

    Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品.Xtrabackup由个部分组成:xtrabackup和innob ...

  2. MySQL数据以全量和增量方式,同步到ES搜索引擎

    本文源码:GitHub·点这里 || GitEE·点这里 一.配置详解 场景描述:MySQL数据表以全量和增量的方式向ElasticSearch搜索引擎同步. 1.下载内容 elasticsearch ...

  3. mysql全量和增量备份详解(带脚本)

    在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...

  4. MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出

    粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损 ...

  5. Python实现目录文件的全量和增量备份

    目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...

  6. 关于Subversion主从备份方式的调整(全量、增量脚本)更新

    本文引用于http://blog.chinaunix.net/uid-25266990-id-3369172.html 之前对Subversion服务器作了迁移,关于SVN的架构也走了调整,有单一的服 ...

  7. MySQL备份工具之mysqldump使用

    MySQL备份工具之mysqldump使用说明 一.备份分类 根据能否停用数据库,将备份类型分为: 1. 冷备:数据库服务停止后备份 2. 温备:只能对数据库进行读操作,不能进行写操作 3. 热备:在 ...

  8. mysql备份工具innobackupex,xtrabackup-2.1的原理和安装

    mysql备份工具innobackupex,xtrabackup-2.1的原理和安装 http://bbs.2cto.com/read.php?tid=310496 一.Xtrabackup介绍 1. ...

  9. MySQL备份工具percona-xtrabackup安装

    1.安装xtrabackup的yum源 rpm -ivh https://www.percona.com/redir/downloads/percona-release/redhat/latest/p ...

随机推荐

  1. 使用ABP框架踩过的坑系列2

    ABP中有很多惯例,如果使用得当,可以事半功倍,如果使用不当,也会有很大的麻烦,是否适当其实还是要看Need需求 ASP.NET Boilerplate (ABP) is an open source ...

  2. .net core webapi+EF Core

    .net core webapi+EF Core 一.描述: EF Core必须下载.net core2.0版本 Micorsoft.EntityFrameworkCore:EF框架的核心包Micor ...

  3. 网易云 MySQL实例迁移的技术实现

    本文由  网易云 发布. 我们把数据库里部分或全部 Schema和数据迁移到另一个实例的行为称为实例迁移,将导出数据的实例称为源实例,导入数据的实例称为目标实例. 根据迁移数据库类型的不同,可以分为同 ...

  4. poj 107 DNA sorting

    关于Java的题解,也许效率低下,但是能解决不只是ACGT的序列字符串 代码如下: import java.util.*; public class Main { public static void ...

  5. vue学前班004(基础指令与使用技巧)

    我学vue 的最终目的是为了 做apicloud 和vue 的开发  作为配合apicloud的前端框架使用 所以项目用不到的会暂时不介绍. (强烈建议  官网案例走一遍) 基础指令的学习(结合aui ...

  6. 屏蔽百度及其广告的部分Host

    127.0.0.44 www.baidu.com127.0.0.44 cpro.baidu.com127.0.0.44 hm.baidu.com127.0.0.44 bdimg.share.baidu ...

  7. 在操作Centos系统时经常出现You have new mail in /var/spool/mail/root提示怎么回事?

    例如,在命令窗口中输入date查看时间,下面会出现一行提示 实际上,该功能为Linux操作系统核对系统资源状态并汇总,默认发送到root用户的/var/spool/mail/root目录,并在标准输出 ...

  8. (转) MySQL分区与传统的分库分表

    传统的分库分表 原文:http://blog.csdn.net/kobejayandy/article/details/54799579 传统的分库分表都是通过应用层逻辑实现的,对于数据库层面来说,都 ...

  9. Java之集合(五)LinkedList

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7298017.html 1.前言 Java中另一个常见的list就是本章将要讲的LinkedList.ArrayL ...

  10. Vue的watch监听事件

    Vue的watch监听事件 相关Html: <!DOCTYPE html> <html lang="en"> <head> <meta c ...