# innobackupex –defaults-file=/etc/my.cnf –export /tmp/
接着应用日志得到一个一致的备份:
# innobackupex --defaults-file=/etc/my.cnf --apply-log --export /tmp/2012-01-22_14-13-20/
现在,将要删除部分数据。这个例子中,我们删除user 10008的salary信息:
mysql> SELECT * FROM salaries WHERE emp_no=10008;
+--------+--------+------------+------------+
| emp_no | salary | from_date | to_date |
+--------+--------+------------+------------+
| 10008 | 46671 | 1998-03-11 | 1999-03-11 |
| 10008 | 48584 | 1999-03-11 | 2000-03-10 |
| 10008 | 52668 | 2000-03-10 | 2000-07-31 |
+--------+--------+------------+------------+
mysql> DELETE FROM salaries WHERE emp_no=10008;
下面的步骤将节省不少时间与脑细胞:-p我们只恢复salaries表而不是所有InnoDB数据。
Discard salaries表的表空间: mysql> ALTER TABLE salaries DISCARD TABLESPACE;
从备份目录拷贝salaries.ibd文件到数据目录: # cp /tmp/2012-01-22_14-13-20/employees/salaries.ibd /var/lib/mysql/data/employees/
导入新的表空间: mysql> ALTER TABLE salaries IMPORT TABLESPACE;
mysql> SELECT * FROM salaries WHERE emp_no=10008;
+--------+--------+------------+------------+
| emp_no | salary | from_date | to_date |
+--------+--------+------------+------------+
| 10008 | 46671 | 1998-03-11 | 1999-03-11 |
| 10008 | 48584 | 1999-03-11 | 2000-03-10 |
| 10008 | 52668 | 2000-03-10 | 2000-07-31 |
+--------+--------+------------+------------+
user的salary记录又回来了!
结论:
如刚才所演示的,某个InnoDB表空间可以像MyISAM一样进行单独恢复操作。需要留意的是,这需要一些先决条件。
Percona Server解除了很多限制,比如:alter或truncate表的同时,在另外一个服务器实例中导入该表。虽然这仅适用于使用Xtrabackup导出的表,导出的数据中含有本来没有存在.ibd文件中的主要表空间的基本信息。
要想刚才所述的功能工作的话, innodb_import_table_from_xtrabackup=1 选项必须打开。访问 Percona Server扩展导出文档 获取更详细的信息。
下一篇博客,我将会阐述如何使用Percona Data Recovery工具集实现恢复操作。
转至:http://www.himysql.com/mysql/how-to-recover-a-single-innodb-table-from-a-full-backup.html