zoukankan      html  css  js  c++  java
  • 使用Xtrabackup进行MySQL备份

    一 简介

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

     二 安装

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

    wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/tarball/percona-xtrabackup-2.2.9-5067-Linux-x86_64.tar.gz 
    下载的是二进制包解压之后添加到环境变量中就可使用
    [root@cgp src]# tar -zxvf percona-xtrabackup-2.2.9-5067-Linux-x86_64.tar.gz -C /usr/local
    [root@cgp src]# cd /usr/local/
    [root@cgp local]# mv percona-xtrabackup-2.2.9-Linux-x86_64/ xtrabackup
    [root@cgp ~]# vim /etc/profile.d/xtrabackup.sh 
    [root@cgp ~]# cat /etc/profile.d/xtrabackup.sh 
    export PATH=/usr/local/xtrabackup/bin:$PATH
    [root@cgp ~]# source !$
    source /etc/profile.d/xtrabackup.sh
    [root@cgp ~]# which innobackupex
    /usr/local/xtrabackup/bin/innobackupex  
    1 MariaDB [(none)]> create user 'bkuser'@'127.0.0.1' identified by 'password';
    2 MariaDB [(none)]> REVOKE ALL PRIVILEGES ON *.* FROM 'bkuser'@'127.0.0.1';
    3 MariaDB [(none)]> grant reload,lock tables,replication client on *.* to 'bkuser'@'127.0.0.1';
    4 MariaDB [(none)]> flush privileges;
    创建mysql备份账号
    1 MariaDB [test]> create database xtrabackup;
     2 MariaDB [xtrabackup]> create table tb1( id int not null auto_increment, name char(32) not null, gender enum("男","女"), primary key(id))engine=innodb charset="utf8";
     3 MariaDB [xtrabackup]> insert into tb1(name,gender)values('张飞',"男"),('店小二',"男"),("孙二娘","女"),("貂蝉","女");
     4 MariaDB [xtrabackup]> select * from tb1;
     5 +----+-----------+--------+
     6 | id | name      | gender |
     7 +----+-----------+--------+
     8 |  1 | 张飞       ||
     9 |  2 | 店小二     ||
    10 |  3 | 孙二娘     ||
    11 |  4 | 貂蝉       ||
    12 +----+-----------+--------+
    13 MariaDB [xtrabackup]> commit;
    生成测试数据
    三 使用xtrabakup 完全备份

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

    1 innobackupex --user=bkuser --password=password  --database=xtrabackup --defaults-file=/etc/my.cnf /root/mariadb-full-back  #xtrabakup 将备份的数据放到/tpm下以时间命名的目录中,如/root/mariadb-full-back/2018-03-28_02-41-15
    2 innobackupex --user=bkuser --password=password  --database=xtrabackup --defaults-file=/etc/my.cnf --no-timestamp /root/mariadb-full-back/xtrackup #xtrabakup 将备份的数据放到/root/mariadb-full-back/xtrackup目录中

    --user :指定备份数据库的用户账号

    --password :指定备份数据库用户密码

    --database :指定备份的数据库。如果没有指定默认会备份所有数据库

    --defaults-file :指定mysql 配置文件

    --no-timestamp :阻止命令自动创建一个以时间命名的目录, 如果没有指定该选项这些文件会被保存至一个以时间命名的目录中。启用该选项innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据

    在备份的同时,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 —— 备份命令用到的配置选项信息;

    四 使用完全备份恢复数据

     1.将xtraback数据库中数据删除,以演示xtrabackup 恢复过程

    1 MariaDB [(none)]> use xtrabackup;
     2 Reading table information for completion of table and column names
     3 You can turn off this feature to get a quicker startup with -A
     4 
     5 Database changed
     6 MariaDB [xtrabackup]> show tables;
     7 +----------------------+
     8 | Tables_in_xtrabackup |
     9 +----------------------+
    10 | tb1                  |
    11 +----------------------+
    12 1 row in set (0.00 sec)
    13 
    14 MariaDB [xtrabackup]> delete from tb1;
    15 Query OK, 4 rows affected (0.03 sec)
    16 MariaDB [xtrabackup]> drop table tb1;
    17 Query OK, 0 rows affected (0.01 sec)
    18 
    19 MariaDB [xtrabackup]> show tables;
    20 Empty set (0.00 sec)
    删除数据

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

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

    innobakupex命令的--apply-log选项可用于实现上述功能。如下面的命令:#innobackupex --apply-log /path/to/BACKUP-DIR

    1 [root@cgp ~]# innobackupex --apply-log /root/mariadb-full-back/2018-03-28_02-41-15/

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

    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.恢复数据

    注意:恢复不用启动MySQL 否则恢复的数据是不成功的 

    1 [root@cgp]#cd /root/mariadb-full-back/2018-03-28_02-41-15/
    2 [root@cgp 2018-03-28_02-41-15]# rsync -avz ib* xtrabackup /var/lib/mysql/ && chown mysql.mysql /var/lib/mysql -R
    3 sending incremental file list
    4 ib_logfile0
    5 ib_logfile1
    6 ibdata1
    7 
    8 sent 722113 bytes  received 70 bytes  1444366.00 bytes/sec
    9 total size is 37757431  speedup is 52.28
     1 [root@cgp ~]# innobackupex --copy-back /tmp/2018-03-28_02-41-15/
     2 
     3 InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
     4 and Percona Inc 2009-2012.  All Rights Reserved.
     5 
     6 This software is published under
     7 the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
     8 
     9 IMPORTANT: Please check that the copy-back run completes successfully.
    10            At the end of a successful copy-back run innobackupex
    11            prints "completed OK!".
    12 
    13 Original data directory is not empty! at /usr/local/xtrabackup/bin/innobackupex line 550.
    使用innobackupex --copy-back会出现错误提示

     4. 登录数据库 查看是数据是否恢复

     1 MariaDB [(none)]> use xtrabackup;
     2 Reading table information for completion of table and column names
     3 You can turn off this feature to get a quicker startup with -A
     4 
     5 Database changed
     6 MariaDB [xtrabackup]> show tables;
     7 +----------------------+
     8 | Tables_in_xtrabackup |
     9 +----------------------+
    10 | tb1                  |
    11 +----------------------+
    12 1 row in set (0.00 sec)
    13 
    14 MariaDB [xtrabackup]> select * from tb1;
    15 +----+-----------+--------+
    16 | id | name      | gender |
    17 +----+-----------+--------+
    18 |  1 | 张飞      ||
    19 |  2 | 店小二    ||
    20 |  3 | 孙二娘    ||
    21 |  4 | 貂蝉      ||
    22 +----+-----------+--------+
    23 4 rows in set (0.00 sec)
    查看恢复数据
    五 使用xtrabackup 增量备份
     1 MariaDB [xtrabackup]> insert into tb1(name,gender)values('诸葛亮',''),('李云龙',''),('翠琴','');
     2 Query OK, 3 rows affected (0.10 sec)
     3 Records: 3  Duplicates: 0  Warnings: 0
     4 
     5 MariaDB [xtrabackup]> select * from tb1;
     6 +----+-----------+--------+
     7 | id | name      | gender |
     8 +----+-----------+--------+
     9 |  1 | 张飞      ||
    10 |  2 | 店小二    ||
    11 |  3 | 孙二娘    ||
    12 |  4 | 貂蝉      ||
    13 |  5 | 诸葛亮    ||
    14 |  6 | 李云龙    ||
    15 |  7 | 翠琴      ||
    16 +----+-----------+--------+
    17 7 rows in set (0.00 sec)
    添加数据

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

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

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

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

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

     1 MariaDB [test]> show engines;
     2 +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
     3 | Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
     4 +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
     5 | CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
     6 | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
     7 | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
     8 | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
     9 | MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
    10 | InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
    11 | ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
    12 | FEDERATED          | YES     | FederatedX pluggable storage engine                                        | YES          | NO   | YES        |
    13 | PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
    14 | Aria               | YES     | Crash-safe tables with MyISAM heritage                                     | NO           | NO   | NO         |
    15 +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
    16 10 rows in set (0.00 sec)
    查看数据库支持那些引擎
    1 MariaDB [(none)]>  show variables like '%storage_engine%';
    2 +------------------------+--------+
    3 | Variable_name          | Value  |
    4 +------------------------+--------+
    5 | default_storage_engine | InnoDB |
    6 | storage_engine         | InnoDB |
    7 +------------------------+--------+
    8 2 rows in set (0.00 sec)
    查看数据库默认引擎
     1 MariaDB [(none)]> show create table xtrabackup.tb1;
     2 +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     3 | Table | Create Table                                                                                                                                                                                                   |
     4 +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     5 | tb1   | CREATE TABLE `tb1` (
     6   `id` int(11) NOT NULL AUTO_INCREMENT,
     7   `name` char(32) NOT NULL,
     8   `gender` enum('','') DEFAULT NULL,
     9   PRIMARY KEY (`id`)
    10 ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8   |
    11 +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    12 1 row in set (0.00 sec)
    查看当前表使用的引擎
    1 [root@cgp ~]# innobackupex --user=bkuser --password=password --database=xtrabackup --no-timestamp --incremental /root/mariadb-increment/xtrabackup-2017-3-28 --incremental-basedir=/root/mariadb-full-back/2018-03-28_02-41-15
    2 [root@cgp ~]# ls /root/mariadb-increment/
    3 xtrabackup-2017-3-28

    “准备”(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 [root@cgp ~]# innobackupex --apply-log --redo-only /root/mariadb-full-back/2018-03-28_02-41-15
    2 [root@cgp ~]# innobackupex --apply-log --redo-only /root/mariadb-full-back/2018-03-28_02-41-15 --incremental-dir=/root/mariadb-increment/xtrabackup-2017-3-28

    使用增量备份恢复,删除数据此处省略。。。。。

    上面操作已经将增量备份的数据整合到了完全备份中,切记此时是使用完全备份数据恢复的。

     1 [root@cgp ~]# cd /root/mariadb-full-back/xtrabackup/
     2 [root@cgp xtrabackup]# ls
     3 backup-my.cnf  ibdata1  xtrabackup  xtrabackup_binary  xtrabackup_binlog_info  xtrabackup_checkpoints  xtrabackup_logfile
     4 [root@cgp xtrabackup-2018-3-28]# rsync -avz ib* xtrabackup /var/lib/mysql/ && chown mysql.mysql /var/lib/mysql -R
     5 sending incremental file list
     6 xtrabackup/
     7 
     8 sent 141 bytes  received 22 bytes  326.00 bytes/sec
     9 total size is 90633  speedup is 556.03
    10 [root@cgp xtrabackup-2018-3-28]# cd ../../mariadb-full-back/xtrabackup/
    11 [root@cgp xtrabackup]# !rsync
    12 rsync -avz ib* xtrabackup /var/lib/mysql/ && chown mysql.mysql /var/lib/mysql -R
    13 sending incremental file list
    14 ibdata1
    15 xtrabackup/
    16 xtrabackup/db.opt
    17 xtrabackup/tb1.frm
    18 
    19 sent 712328 bytes  received 73 bytes  1424802.00 bytes/sec
    20 total size is 27271671  speedup is 38.28
    21 
    22 #启动mariadb 数据库查看数据是否正常恢复
    23 [root@cgp ~]# systemctl start mariadb.service
    24 
    25 MariaDB [(none)]> use xtrabackup;
    26 Reading table information for completion of table and column names
    27 You can turn off this feature to get a quicker startup with -A
    28 
    29 Database changed
    30 MariaDB [xtrabackup]> show tables;
    31 +----------------------+
    32 | Tables_in_xtrabackup |
    33 +----------------------+
    34 | tb1                  |
    35 +----------------------+
    36 1 row in set (0.00 sec)
    37 MariaDB [xtrabackup]> select * from tb1;
    38 +----+-----------+--------+
    39 | id | name      | gender |
    40 +----+-----------+--------+
    41 |  1 | 张飞      ||
    42 |  2 | 店小二    ||
    43 |  3 | 孙二娘    ||
    44 |  4 | 貂蝉      ||
    45 |  5 | 诸葛亮    ||
    46 |  6 | 李云龙    ||
    47 |  7 | 翠琴      ||
    48 +----+-----------+--------+
    49 7 rows in set (0.00 sec)
    第一次增量备份恢复数据
    1 MariaDB [xtrabackup]> insert into tb1(name,gender)values('李大炮',''),('二营长',''),('吕布','');
     2 Query OK, 3 rows affected (0.37 sec)
     3 Records: 3  Duplicates: 0  Warnings: 0
     4 
     5 MariaDB [xtrabackup]> select * from tb1;
     6 +----+-----------+--------+
     7 | id | name      | gender |
     8 +----+-----------+--------+
     9 |  1 | 张飞      ||
    10 |  2 | 店小二    ||
    11 |  3 | 孙二娘    ||
    12 |  4 | 貂蝉      ||
    13 |  5 | 诸葛亮    ||
    14 |  6 | 李云龙    ||
    15 |  7 | 翠琴      ||
    16 |  8 | 李大炮    ||
    17 |  9 | 二营长    ||
    18 | 10 | 吕布      ||
    19 +----+-----------+--------+
    20 10 rows in set (0.00 sec)
    21 
    22 #第二次增量备份
    23 [root@cgp ~]# innobackupex --user=bkuser --password=password --database=xtrabackup --no-timestamp --incremental /root/mariadb-increment/xtrabackup-2018-3-29 --incremental-basedir=/root/mariadb-increment/xtrabackup-2018-3-28
    24 [root@cgp ~]# cd /root/mariadb-increment/
    25 [root@cgp mariadb-increment]# ll
    26 total 0
    27 drwxr-xr-x. 3 root root 197 Mar 28 06:07 xtrabackup-2018-3-28
    28 drwxr-xr-x. 3 root root 197 Mar 28 22:25 xtrabackup-2018-3-29
    29 #删除数据此次列过。。。。。。
    30 #使用第二次增量备份数据恢复,首先将第二次增量备份数据整合到完全备份上
    31 [root@cgp ~]# innobackupex --apply-log --redo-only /root/mariadb-full-back/xtrabackup/
    32 [root@cgp ~]# innobackupex --apply-log --redo-only /root/mariadb-full-back/xtrabackup/ --incremental-dir=/root/mariadb-increment/xtrabackup-2018-3-29
    33 
    34 [root@cgp ~]# cd /root/mariadb-full-back/xtrabackup/
    35 [root@cgp xtrabackup]# !rsync
    36 rsync -avz ib* xtrabackup /var/lib/mysql/ && chown mysql.mysql /var/lib/mysql -R
    37 sending incremental file list
    38 ib_logfile0
    39 ib_logfile1
    40 ibdata1
    41 xtrabackup/
    42 xtrabackup/db.opt
    43 xtrabackup/tb1.frm
    44 
    45 sent 722879 bytes  received 111 bytes  1445980.00 bytes/sec
    46 total size is 37757431  speedup is 52.22
    47 
    48 #启动数据库查看数据是否恢复
    49 [root@cgp ~]# systemctl start mariadb.service
    50 MariaDB [(none)]> use xtrabackup;
    51 Reading table information for completion of table and column names
    52 You can turn off this feature to get a quicker startup with -A
    53 
    54 Database changed
    55 MariaDB [xtrabackup]> show tables;
    56 +----------------------+
    57 | Tables_in_xtrabackup |
    58 +----------------------+
    59 | tb1                  |
    60 +----------------------+
    61 1 row in set (0.00 sec)
    62 
    63 MariaDB [xtrabackup]> select * from tb1;
    64 +----+-----------+--------+
    65 | id | name      | gender |
    66 +----+-----------+--------+
    67 |  1 | 张飞      ||
    68 |  2 | 店小二    ||
    69 |  3 | 孙二娘    ||
    70 |  4 | 貂蝉      ||
    71 |  5 | 诸葛亮    ||
    72 |  6 | 李云龙    ||
    73 |  7 | 翠琴      ||
    74 |  8 | 李大炮    ||
    75 |  9 | 二营长    ||
    76 | 10 | 吕布      ||
    77 +----+-----------+--------+
    78 10 rows in set (0.00 sec)
    第二次增量备份恢复数据

    5、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


    6、导入或导出单张表

    默认情况下,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阶段进行的,因此,一旦完全备份完成,就可以在prepare过程中通过--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;

    7、使用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 mageedu.tb2' > /tmp/tables.txt
    # innobackupex --tables-file=/tmp/tables.txt /path/to/backup

    (c)使用--databases
    此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。如:
    # innobackupex --databases="mageedu testdb" /path/to/backup

    (2)整理(preparing)部分备份
    prepare部分备份的过程类似于导出表的过程,要使用--export选项进行:
    # innobackupex --apply-log --export /pat/to/partial/backup

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

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

  • 相关阅读:
    【C#】最完整的IIS添加WCF配置
    IIS配置中增加对WCF程序的支持svc(IIS10中添加WCF支持几种方法小结)
    ASP.NET C#各种数据库连接字符串大全——SQLServer、Oracle、Access
    记一次 .NET 某医院HIS系统 CPU爆高分析(Windbg)
    C#调用Win32 API 的方法
    闲无聊,发个winform中使用html编辑器的方案
    使用非托管 DLL 函数
    flask中的CBV和FBV
    2.6 CSS3其他特性(了解)
    2.5 CSS3盒子模型
  • 原文地址:https://www.cnblogs.com/simple001/p/8662541.html
Copyright © 2011-2022 走看看