MySQL备份

MySQL备份      

 




官网地址:  https://dev.mysql.com/doc/refman/5.7/en/backup-and-recovery.html    
 
 




 

MySQL支持的备份类型如下图所示:

MySQL备份 

? 根据备份方法,备份可以分为如下3种:

l 热备份(Hot Backup):热备份也称为在线备份(Online Backup),是指在数据库运行的过程中进行备份,对生产环境中的数据库运行没有任何影响。常见的热备方案是利用mysqldump、XtraBackup等工具进行备份。

l 冷备份(Cold Backup):冷备份也称为离线备份(Offline Backup),是指在数据库关闭的情况下进行备份,这种备份非常简单,只需要关闭数据库,复制相关的物理文件即可。目前,线上数据库一般很少能够接受关闭数据库,所以该备份方式很少使用。

l 温备份(Warm Backup):温备份也是在数据库运行的过程中进行备份,但是备份会对数据库操作有所影响。该备份利用锁表的原理备份数据库,由于影响了数据库的操作,故该备份方式也很少使用。

? 根据备份文件的种类,备份可以分为如下两种:Physical (Raw) Versus Logical Backups

l 物理备份(Physical Backup):物理备份也称为裸文件备份(Raw Backup),是指复制数据库的物理文件。物理备份即可以在数据库运行的情况下进行备份(常见备份工具:MySQL Enterprise Backup(商业)、XtraBackup等),也可以在数据库关闭的情况下进行备份。该备份方式不仅备份速度快,而且恢复速度也快,但是由于无法查看备份后的内容,所以只能等到恢复之后,才能检验备份出来的数据是否是正确的。

l 逻辑备份(Logical Backup):逻辑备份是指备份文件的内容是可读的,该文本一般都是由一条条SQL语句或者表的实际数据组成。常见的逻辑备份方式有mysqldump、SELECT ... INTO OUTFILE等方法。这类备份方法的好处是可以观察备份后的文件内容,缺点是恢复时间往往都会很长。逻辑备份的最大优点是对于各种存储引擎都可以用同样的方法来备份;而物理备份则不同,不同的存储引擎有着不同的备份方法。因此,对于不同存储引擎混合的数据库,用逻辑备份会更简单一些。

? 根据备份内容,备份可以划分为如下3种:

l 全量备份(Full Backup):全量备份(完全备份)是指对数据库进行一次完整的备份,备份所有的数据,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。这是一般常见的备份方式,可以使用该备份快速恢复数据库,或者搭建从库。恢复速度也是最快的,但是每次备份会消耗较多的磁盘空间,并且备份时间较长。所以,一般推荐一周做一次全量备份。

l 增量备份(Incremental Backup):增量备份也叫差异备份,是指基于上次完整备份或增量备份,对数据库新增的修改进行备份。这种备份方式有利于减少备份时使用的磁盘空间,加快备份速度。但是恢复的时候速度较慢,并且操作相对复杂。推荐每天做一次增量备份。

l 日志备份(Binary Log Backup):日志备份是指对数据库二进制日志的备份。二进制日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。该备份方式一般与上面的全量备份或增量备份结合使用,可以使数据库恢复到任意位置。所以,推荐每小时甚至更频繁的备份二进制日志。

在生产环境上,一般都会选择以物理备份为主,逻辑备份为辅,加上日志备份,来满足线上使用数据库的需求。

 



物理备份

Physical backups consist of raw copies of the directories and files that store database contents. This type of backup is suitable for large, important databases that need to be recovered quickly when problems occur.

 

  • 1
  • 1
  • 定义 
    物理备份就是把MySQL存储好的所有文件保存下来。比如创建一个数据库db之后,mysql会在datadir/目录下面创建一个db的目录,那么这个目录下面的所有文件保存下来,就是物理备份。

  • 适用: 
    物理备份适用于大数据量的备份,比如你有好几G的数据,那你就适合使用物理备份;

  • 典型方法: 
    1.文件系统命令:cp,scp,tar,rsync; 
    2.系统快照snapshot;

  • 特征: 
    1.由数据库文件和目录组成,是mysql数据目录的全部或者部分; 
    2.一般备份比逻辑备份快,因为纯属是文件复制,不用像逻辑备份那样,需要做sql的转换; 
    3.备份的粒度比逻辑备份小,因为是全文件复制了,当然比sql要精确一些; 
    4.物理备份的文件可以不仅是数据库,还可以是数据库的日志,配置文件; 
    5.备份memory存储引擎的数据就麻烦了,因为memory的数据不是存储在硬盘的; 
    6.mysql服务器不运行的时候可以进行备份,而逻辑备份需要mysql-server处理运行状态; 
    7.mysqlbackup程序命令,可以帮助innodb的数据进行备份;而直接使用文件系统的命令(cp,scp,tar,rsync)等,就可以对myisam的数据进行备份;

逻辑备份

Logical backups save information represented as logical database structure (CREATE DATABASE, CREATE TABLE statements) and content (INSERT statements or delimited-text files). 
This type of backup is suitable for smaller amounts of data where you might edit the data values or table structure, or recreate the data on a different machine architecture.

 

  • 1
  • 1
  • 定义 
    逻辑备份就是把数据库的结构定义语句,数据内容的插入语句,全部存储下来。然后恢复的时候,在另一个mysql服务器执行这些语句,就可以创建另一个与之前一样的数据库了。

  • 典型的方法: 
    1.mysqldump程序可以把对远程/本地数据库进行逻辑备份. 
    2.SELECT ..... INTO OUTFILE可以把数据进行逻辑备份,但备份文件只能存储在mysql-server的机器上;

  • 适用:这种比较适合数据量少的数据库。

  • 特点: 
    1.逻辑备份通过查询数据库的信息进行备份; 
    2.速度比较慢。因为获取了信息,然后组装成sql语句,如果调用命令是远程,还要把sql语句远程传输; 
    3.备份文件要比物理备份大; 
    4.备份粒度只能到表; 
    5.没有日志或者配置文件; 
    6.备份文件是sql语句,逻辑语句,相对来说,可移植性要好。比如我在linux备份了,可以在windows进行恢复,物理备份就不行;

全量备份与增量备份

上面所说的,都是全量备份,一般增量备份,都是通过mysql-server的二进制文件进行增量备份;

增量备份的恢复

增量备份的恢复,是先恢复某个时间点A的全量备份,然后再把从A开始之后的二进制文件进行应用,从而完成恢复;

 



MySQL备份 MySQL备份和还原系列一:备份类型

2014-07-23 16:54:49  

原创作品,允许转载,转载时请务必以超链接形式标明文章    原始出处    、作者信息和本声明。否则将追究法律责任。   http://skypegnu1.blog.51cto.com/8991766/1501442  

一、备份类型

    对于数据库来说,最基本的工作就是数据库的备份与恢复,在意外情况下(服务器宕机/或者磁盘损损坏)要保证数据不丢失。

在实体关系模型中,我们知道有三种关系:一对一

1、按照mysql服务器状态区分(备份过程中,服务器是否继续提供服务)

  • cold Backup      离线备份,读、写操作均中止

  • warm Backup   仅可执行读操作

  • hot Backup       读、写操作不受影响

hot备份指在数据库运行中直接备份,对正在运行的服务没有任何影响。

cold备份指在数据库停止的情况下进行备份,比较简单,只需要拷贝相关的物理文件即可。

warm备份同样是数据库运行时进行,但是对当前的数据库有所影响。


2、按照备份数据格式

  • logical     将数据导出至文本文件中,备份sql语句,在恢复的时候执行备份的sql语句实现数据库数据的重现,适用于数据库升级、迁移工作,但是恢复时花的时间比较长。

  • physical    文件系统层面直接拷贝数据文件,但真正备份的时候自然不是cp这么简单


3、数据存储方式

  • full                    完全备份

  • increamenta    增量备份   

  • differential       差异备份

差异备份的定义:备份自上一次完全备份之后有变化的数据。

增量备份的定义:备份自上一次备份(包括完全备份,增量备份,差异备份)之后有变化的数据。


二、备份工具

MySQL备份

主要按照逻辑备份还是物理备份分成两类进行说明:

逻辑备份:速度相对较慢,可能丢失浮点数精度,可移植性强。

物理备份:速度非常快,在文件系统级完成。


1、逻辑备份(将数据导出至文本文件中)

  • mysqldump 

    mysqldump是采用SQL级别的备份机制,将数据表导成SQL脚本文件,是最常用的逻辑备份方法。

    ALL        WARM    支持所有引擎,MyISAM引擎是逻辑温备,可手动加锁

    INNODB     HOT     逻辑热备,仅用于INODB引擎

  • SELECT INTO OUTFILE

    进行SQL级别的表备份,逻辑


2、物理备份(直接备份数据文件)

  • ibbackup

    INNODBHOT对于INNODB引擎,热备,物理备份

    ALLWARM    其他引擎,温备

    ibbackup 商业工具 MyISAM是温备份,InnoDB是热备份 ,备份和还原速度都很快,这个软件它的每服务器授权版本是5000美元。

  • xtrabackup

    xtrabackup 开源工具 MyISAM是温备份,InnoDB是热备份 ,是ibbackup商业工具的替代工具。

  • snapshot(LVM,ZFS)

    ALLALMOST     物理 HOT

    热备、支持所有基于本地磁盘的存储引擎、快速备份、低开销、容易保持完整性、快速恢复等。

  • 几乎是热备份,支持所有引擎,基于快照(LVM,ZFS)的物理备份,速度非常快。只影响数据几秒钟而已。但是创建快照的过程本身就影响到了数据库在线的使用,所以备份速度比较快,恢复速度比较快,没有什么弹性空间,而且LVM的限制:不能对多个逻辑卷同一时间进行备份,所以数据文件和事务日志等各种文件必须放在同一个LVM上。而ZFS则非常好的可以在多逻辑卷之间备份。

  • mysqlhotcopy

    仅MYISAMMOSTLY COLD(LVM,snapshot)

    mysqlhotcopy是一个perl程序,是lock tables、flush tables 和cp或scp来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表文件、数据文件、索引文件)所在的机器上。

    物理备份工具,但只支持MyISAM引擎,基本上属于冷备的范畴,物理备份,速度比较快。

    mysqldump可以备份各种类型的数据表,但是mysqlhotcopy只适合备份MyISAM和ISAM的数据表。所以使用mysqlhotcopy之前,你必须确认你的数据表是不是有其他的存储引擎(storage engines)的。

  • tar,cp冷备

    使用直接拷贝数据库文件的方式进行打包备份,需要注意的是执行步骤:锁表、备份、解表。恢复也很简单,直接拷贝到之前的数据库文件的存放目录即可。注意:对于Innodb引擎的表来说,还需要备份日志文件,即ib_logfile*文件。因为当Innodb表损坏时,就可以依靠这些日志文件来恢复。cp 冷备份,支持所有引擎,复制命令,只能实现冷备,物理备份。使用归档工具,cp命令,对其进行备份的,备份速度快,还原速度几乎最快,但是灵活度很低,可以跨系统,但是跨平台能力很差。


  • 使用mysql主从复制

    mysql的复制是指将主数据库的DDL和DML操作通过二进制文件(bin-log)传送到从服务器上,然后在从服务器上对这些日志做重新执行的操作,从而使得从服务器和主服务器保持数据的同步。


三、备份策略

备份/恢复策略:

  1. 要定期做 mysql 备份,并考虑系统可以承受的恢复时间。

  2. 确保 mysql 打开 log-bin,有了 binarylog,mysql 才可以在必要的时候做完整恢复,或基于时间点的恢复,或基于位置的恢复。

  3. 要经常做备份恢复测试,确保备份是有效的,并且是可以恢复的。

备份什么?

  • 数据文件

  • my.cnf 配置文件

  • 二进制日志

  • 事务日志


因为MySQL表保存为文件方式,很容易备份。要想保持备份的一致性,对相关表执行LOCK TABLES操作,然后对表执行FLUSH TABLES。

你只需要读锁定;这样当你复制数据库目录中的文件时,允许其它客户继续查询表。需要FLUSH TABLES语句来确保开始备份前将所有激活的索引页写入硬盘。


策略一:直接拷贝数据库文件(文件系统备份工具 cp)(适合小型数据库,是最可靠的)


    当你使用直接备份方法时,必须保证表不在被使用。如果服务器在你正在拷贝一个表时改变它,拷贝就失去意义。保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器。如果你不想关闭服务器,要在执行表检查的同时锁定服务器。如果服务器在运行,相同的制约也适用于拷贝文件,而且你应该使用相同的锁定协议让服务器“安静下来”。当你完成了备份时,需要重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。


策略二:mysqldump备份数据库(完全备份+增加备份,速度相对较慢,适合中小型数据库)(MyISAM是温备份,InnoDB是热备份)

mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump 比直接拷贝要慢些。对于中等级别业务量的系统来说,备份策略可以这么定:第一次完全备份,每天一次增量备份,每周再做一次完全备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制(replication),在 slave 机器上做备份。


策略三:lvs快照从物理角度实现几乎热备的完全备份,配合二进制日志备份实现增量备份,速度快适合比较烦忙的数据库


前提:

  • 数据文件要在逻辑卷上;

  • 此逻辑卷所在卷组必须有足够空间使用快照卷;

  • 数据文件和事务日志要在同一个逻辑卷上;


策略四:xtrabackup 备份数据库,实现完全热备份与增量热备份(MyISAM是温备份,InnoDB是热备份)


说明:Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup或ibbackup的一个很好的替代品。

Xtrabackup有两个主要的工具:xtrabackup、innobackupex

  • xtrabackup 只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表。

  • innobackupex 是参考了InnoDB Hotbackup的innoback脚本修改而来的.innobackupex是一个perl脚本封装,封装了xtrabackup。主要是为了方便的 同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢复后作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

特点:

  • 备份过程快速、可靠;

  • 备份过程不会打断正在执行的事务;

  • 能够基于压缩等功能节约磁盘空间和流量;

  • 自动实现备份检验;

  • 还原速度快;


策略五:主从复制(replication)实现数据库实时备份(集群中常用)


参考:

http://freeloda.blog.51cto.com/2033581/1254883


本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1501442

MySQL备份 使用Xtrabackup进行MySQL备份

2014-07-24 13:18:46  

一、xtrabackup 

1、简介

 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

(1)备份过程快速、可靠;

(2)备份过程不会打断正在执行的事务;

(3)能够基于压缩等功能节约磁盘空间和流量;

(4)自动实现备份检验;

(5)还原速度快;

 

通过xtrabackup 可实现完全热备份与增量热备份(MyISAM是温备份,InnoDB是热备份)

2、安装

    其最新版的软件可从 https://www.percona.com/software/mysql-database/percona-xtrabackup 获得。


# 安装xtrabackup依赖的包# yum -y install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.*   # tar xf percona-xtrabackup-2.2.3-4982-Linux-i686.tar.gz -C /usr/local/src# vi /etc/profile.d/xtrabackup.shexport PATH=$PATH:/usr/local/src/percona-xtrabackup-2.2.3-Linux-i686/bin # . /etc/profile.d/xtrabackup.sh ## 测试# innobackupex --version# xtrabackup --version

二、备份的实现

1、完全备份

innobackupex --host=HOST --user=DB_USER --password=DB_USERPASS /path/to/BACKUP-DIR/

如果要使用一个最小权限的用户进行备份,则可基于如下命令创建此类用户:

mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ’bkpuser’;mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ’bkpuser’@’localhost’;mysql> FLUSH PRIVILEGES;


    使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

在备份的同时,innobackupex 还会在备份目录中创建如下文件:

(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

(2)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

(4)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(5)backup-my.cnf —— 备份命令用到的配置选项信息;

 

    在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex 命令将会创建一个BACKUP-DIR目录来存储备份数据。

 

2、准备(prepare)一个完全备份

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

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

innobackupex --apply-log  /path/to/BACKUP-DIR
如果执行正确,其最后输出的几行信息通常如下:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

120407  9:01:36  InnoDB: Starting shutdown...

120407  9:01:40  InnoDB: Shutdown completed; log sequence number 92036620

120407 09:01:40  innobackupex: completed OK!

 

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

 

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

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

innobackupex --copy-back  /path/to/BACKUP-DIR

如果执行正确,其输出信息的最后几行通常如下:

innobackupex: Starting to copy InnoDB log files

innobackupex: in '/backup/2012-04-07_08-17-03'

innobackupex: back to original InnoDB log directory '/mydata/data'

innobackupex: Finished copying back files.

 

120407 09:36:10  innobackupex: completed OK!

 

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

 

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

chown -R  mysql:mysql  /mydata/data/

三、使用innobackupex进行增量备份

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

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

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


  • --incremental 指定是增量备份

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

 

四、Xtrabackup的“流”及“备份压缩”功能

 

Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用--stream选项即可。如:

innobackupex --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz

甚至也可以使用类似如下命令将数据备份至其它服务器:

innobackupex --stream=tar  /backup | ssh user@www.magedu.com  "cat -  > /backups/`date +%F_%H-%M-%S`.tar"

此外,在执行本地备份时,还可以使用--parallel选项对多个文件进行并行复制。此选项用于指定在复制时启动的线程数目。当然,在实际进行备份时要利用此功能的便利性,也需要启用innodb_file_per_table选项或共享的表空间通过innodb_data_file_path选项存储在多个ibdata文件中。对某一数据库的多个文件的复制无法利用到此功能。其简单使用方法如下:

innobackupex --parallel  /path/to/backup
同时,innobackupex备份的数据文件也可以存储至远程主机,这可以使用--remote-host选项来实现:

# innobackupex --remote-host=root@www.magedu.com  /path/IN/REMOTE/HOST/to/backup

 

 

五、导入或导出单张表

 

默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能,不过,此时需要“导出”表的mysql服务器启用了innodb_file_per_table选项(严格来说,是要“导出”的表在其创建之前,mysql服务器就启用了innodb_file_per_table选项),并且“导入”表的服务器同时启用了innodb_file_per_table和innodb_expand_import选项。

 

(1)“导出”表

导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在preparef过程中通过--export选项将某表导出了:

innobackupex --apply-log --export /path/to/backup    

此命令会为每个innodb表的表空间创建一个以.exp结尾的文件,这些以.exp结尾的文件则可以用于导入至其它服务器。

 

(2)“导入”表

要在mysql服务器上导入来自于其它服务器的某innodb表,需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入:

mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;
然后将此表的表空间删除:

mysql> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;

接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,然后使用如下命令将其“导入”:

mysql> ALTER TABLE mydatabase.mytable  IMPORT TABLESPACE; 

 

六、使用Xtrabackup对数据库进行部分备份

 

Xtrabackup也可以实现部分备份,即只备份某个或某些指定的数据库或某数据库中的某个或某些表。但要使用此功能,必须启用innodb_file_per_table选项,即每张表保存为一个独立的文件。同时,其也不支持--stream选项,即不支持将数据通过管道传输给其它程序进行处理。

 

此外,还原部分备份跟还原全部数据的备份也有所不同,即你不能通过简单地将prepared的部分备份使用--copy-back选项直接复制回数据目录,而是要通过导入表的方向来实现还原。当然,有些情况下,部分备份也可以直接通过--copy-back进行还原,但这种方式还原而来的数据多数会产生数据不一致的问题,因此,无论如何不推荐使用这种方式。

 

(1)创建部分备份

 

创建部分备份的方式有三种:正则表达式(--include), 枚举表文件(--tables-file)和列出要备份的数据库(--databases)。

 

(a)使用--include

使用--include时,要求为其指定要备份的表的完整名称,即形如databasename.tablename,如:

 innobackupex --include='^mageedu[.]tb1'  /path/to/backup
 

(b)使用--tables-file

此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称;如:

# echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt# innobackupex --tables-file=/tmp/tables.txt  /path/to/backup

 

(c)使用--databases

此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。如:

 innobackupex --databases='mageedu.tb1 testdb"  /path/to/backup
 

(2)整理(preparing)部分备份
 

prepare部分备份的过程类似于导出表的过程,要使用--export选项进行:

innobackupex --apply-log --export  /pat/to/partial/backup
 

此命令执行过程中,innobackupex会调用xtrabackup命令从数据字典中移除缺失的表,因此,会显示出许多关于“表不存在”类的警告信息。同时,也会显示出为备份文件中存在的表创建.exp文件的相关信息。

 

(3)还原部分备份
 

还原部分备份的过程跟导入表的过程相同。当然,也可以通过直接复制prepared状态的备份直接至数据目录中实现还原,不要此时要求数据目录处于一致状态。


上一篇:innobackupex的流备份【转】


下一篇:带你centos安装innobackupex、xtrabackup