本文是翻译的Percona XtraBackup 2.2版的官方文档,原文地址在此:https://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/partial_backups_innobackupex.html,如下是译文。html
原官方文档没有如何恢复的方法,恢复部分是我本身加的。 -----------------------------------------------------------这是一条分割线-----------------------------------------------------------mysql
Percona XtraBackup的功能之一“部分备份(partial backups)”,即让用户能够备份指定的表或数据库。要注意的是:你但愿备份的表必须是在独立的表空间中,即该表在建立之前,你的MySQL开启了innodb_file_per_table设置。 还一点要注意的是:不要将prepared backup备份的东西拷贝回去。部分备份使用的是导入表(importing the tables),而不是全库备份的--copy-back参数。尽管有时简单的拷贝备份文件能够成功,可是这种方法很容易致使数据库的不一致,所以不推荐你们这么作。正则表达式
建立部分备份(Creating Partial Backups) 部分备份共有三种方式,分别是:1. 用正则表达式表示要备份的库名及表名(参数为--include);2. 将要备份的表名或库名都写在一个文本文件中(参数为--tables-file)以及 3. 将要备份表名或库名完整的写在命令行中(参数为:--databases)。(译者注:无论你备份哪一个库或是哪张表,强烈推荐把mysql库也一块儿备份,恢复的时候要用。)sql
方式一:使用--include参数 这种方式经过正则表达式来匹配数据库名和表名,你须要写完整的数据库名及表名,若是数据库有用户名密码请使用--user和--password指定相关信息。,格式以下:databasename.tablename。下面是一个例子:数据库
$ innobackupex --include='^mydatabase[.]mytable' /path/to/backup --user=backup --password=backup
上面的方式会和其余使用innobackupex命令的备份方式同样,建立一个时间戳命名的文件夹,不一样的是,最终只包括那些正则表达式匹配的表。 要注意的是,这个命令最后会传给xtrabackup --tables命令执行,而且会为每一个数据库(包括不须要备份的数据库)建立一个对应的文件夹。app
方式二:使用--tables-file参数 这种方式是将全部要备份的完整表名都写在一个文本文件中,每行一个完整表名,而后程序读取这个文本文件进行备份。完整表名即:databasename.tablename。若是数据库有用户名密码请使用--user和--password指定相关信息。下面是一个例子:spa
$ echo "mydatabase.mytable" > /tmp/tables.txt $ innobackupex --tables-file=/tmp/tables.txt /path/to/backup --user=backup --password=backup
上面的方式会和其余使用innobackupex命令的备份方式同样,建立一个时间戳命名的文件夹,不一样的是,最终只包括那些文件中指定的表名。 这个命令最后会传给xtrabackup --tables-file命令执行,而不是--tables,所以这个命令只会建立那些须要备份的数据库文件夹。命令行
方式三:使用--databases参数 使用这种方式,用户既能够将全部要备份的数据库名和完整表名都写在一块儿,以空格分隔,也能够将数据库名、完整表名写在一个文件中,每行一个,若是数据库有用户名密码请使用--user和--password指定相关信息。下面是一个例子。翻译
$ innobackupex --databases="mydatabase.mytable mysql" /path/to/backup --user=backup --password=backup
上面的方式会和其余使用innobackupex命令的备份方式同样,建立一个时间戳命名的文件夹,最终结果将包括mydatabase数据库中的mytable表,以及整个完整的mysql数据库。 准备部分备份(Preparing Partial Backups) 执行preparing partial backups,与恢复独立的表(Restoring Individual Tables)很相似:使用--apply-log和--export参数,并包含上一步生成的时间戳文件夹,以下:code
$ innobackupex --apply-log --export /path/to/backup/2015-11-09_16-33-58
执行命令的时候,对于那些不须要备份的表,会出现表不存在的提示。不用担忧,这是正常现象。下面是可能出现的错误提示:
111225 0:54:06 InnoDB: Error: table 'mydatabase/mytablenotincludedinpartialb' InnoDB: in InnoDB data dictionary has tablespace id 6, InnoDB: but tablespace with that id or name does not exist. It will be removed from data dictionary.
同时,你还会看到系统生成对要备份的表建立导出文件的提示,信息以下:
xtrabackup: export option is specified. xtrabackup: export metadata of table 'employees/departments' to file `.//departments.exp` (2 indexes) xtrabackup: name=PRIMARY, id.low=80, page=3 xtrabackup: name=dept_name, id.low=81, page=4
注意,你可以对已经执行过准备备份(already-prepared backup)的文件执行带有--export和--apply-log参数的命令,来生成.exp文件。 最终,记得观察下面的输出,已肯定准备备份工做结束。
111225 00:54:18 innobackupex: completed OK!
恢复部分被备份(Restoring Partial Backups)
中止MySQL:service mysql stop
将/var/lib/mysql下面的全部文件所有删除:rm /var/lib/mysql/* -rf(若是前面没有备份mysql数据库, 那么在删除数据文件后要重建mysql系统表,重建命令是sudo mysql_install_db --user=mysql,但重建会致使原有用户信息所有丢失)
将第二步准备过的文件拷贝到/var/lib/mysql下:cp /usr/local/backup/2015-11-09_16-33-58/* /var/lib/mysql -rf
给文件赋权:chown -R mysql:mysql /var/lib/mysql/
启动MySQL:service mysql start