xtrabackup 备份mysql数据库三:partial backup 部分备份及恢复

innobackup 部分备份恢复实验

三种方式:
## Using the --include option
The command above will create a timestamped directory with the usual files that innobackupex creates, 
but only the data files related to the tables matched.
Note that this option is passed to xtrabackup --tables and is matched against each table of each database,
the directories of each database will be created even if they are empty.
该方式会将没有备份表的数据库目录也生成,支持模式匹配


--备份test库t_innodb开头的表
$ innobackupex --user=bkpuser --password=s3cret --defaults-file=/etc/my.cnf --include='^test[.]t_innodb' 
--备份test库下所有的表
$ innobackupex --user=bkpuser --password=s3cret --defaults-file=/etc/my.cnf --include='^test[.]' 




## Using the --tables-file option
Note that this option is passed to xtrabackup --tables and is matched against each table of each database, 
the directories of each database will be created even if they are empty.
该方式不能实现模式匹配,只生产需要备份表的数据库目录


--备份test.t_innodb,
$ echo "test.t_innodb" > /tmp/tables.txt
$ innobackupex --user=bkpuser --password=s3cret --defaults-file=/etc/my.cnf --tables-file=/tmp/tables.txt /backup




## Using the --databases option
This option is specific to innobackupex and accepts either a space-separated list of the databases and 
tables to backup - in the databasename[.tablename] form - or a file containing the list at one element per line
Currently, only .frm and non-InnoDB tables are limited by that option
当前版本,只对non-innodb 有限制作用


$ innobackupex --user=bkpuser --password=s3cret --defaults-file=/etc/my.cnf  --databases="test.innodb" /backup




## 测试表 t_innodb ,并插入10000条记录
(root@localhost) [test]>desc t_innodb;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | bigint(20)   | NO   | PRI | NULL    | auto_increment | 
| name       | varchar(50)  | YES  |     | NULL    |                | 
| password   | varchar(150) | YES  |     | NULL    |                | 
| userstatus | int(2)       | YES  |     | NULL    |                | 
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)


(root@localhost) [test]>call addTest(10000,0);
Query OK, 1 row affected (4.12 sec)


(root@localhost) [test]>select count(*) from t_innodb;
+----------+
| count(*) |
+----------+
|    10000 | 
+----------+
1 row in set (0.01 sec)




## 执行一次表t_innodb的备份,作为全备
$ echo "test.t_innodb" > /tmp/tables.txt
$ innobackupex --user=bkpuser --password=s3cret --defaults-file=/etc/my.cnf --tables-file=/tmp/tables.txt /backup/full_innodb --no-timestamp




## 全备后,再次插入10000条记录
(root@localhost) [test]>call addTest(10000,0);
Query OK, 1 row affected (4.12 sec)


(root@localhost) [test]>select count(*) from t_innodb;
+----------+
| count(*) |
+----------+
|    20000 | 
+----------+
1 row in set (0.01 sec)




## 执行一次增量备份
$ innobackupex --user=bkpuser --password=s3cret --defaults-file=/etc/my.cnf --incremental --incremental-basedir=/backup/full_innodb --tables-file=/tmp/tables.txt /backup/inc_innodb --no-timestamp




## 删除原库中的标
(root@localhost) [test]>drop table t_innodb;
Query OK, 0 rows affected (0.01 sec)




## 针对全备做一次apply-log,需要使用redo-only 选项
innobackupex --apply-log --redo-only --export /backup/full_innodb




## 增量备份,做一次apply-log,作为最后一个增量,不要使用redo-only
innobackupex --defaults-file=/etc/my.cnf --apply-log --incremental-dir=/backup/full_innodb /backup/full_innodb




## 再次执行apply-log, 是用export 生成exp、cfg 文件
innobackupex --apply-log --export /backup/full_innodb




## 在数据库中新建表t_innodb
(root@localhost) [test]>drop table t_innodb;

 

## 可以是用mysqlfrm 从t_innodb 中获取建表语句

#  显示frm的建表语句
mysqlfrm --server=root:mysql@localhost:3306 /backup/full_innodb/test/t_innodb.frm --port=3333

 

(root@localhost) [test]>CREATE TABLE `t_innodb` (
    ->   `id` bigint(20) NOT NULL AUTO_INCREMENT,
    ->   `name` varchar(50) DEFAULT NULL,
    ->   `password` varchar(150) DEFAULT NULL,
    ->   `userstatus` int(2) DEFAULT NULL,
    ->   PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB AUTO_INCREMENT=20001 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.02 sec)




## 删除当前的.ibd文件
(root@localhost) [test]>ALTER TABLE test.t_innodb DISCARD TABLESPACE;
Query OK, 0 rows affected (0.00 sec)




## 把cfg、ibd、exp文件放到test数据库目录中
[mysql@rhel5 test]$ cp t_innodb.cfg /usr/local/mysql/data/test/
[mysql@rhel5 test]$ cp t_innodb.ibd /usr/local/mysql/data/test/
[mysql@rhel5 test]$ cp t_innodb.exp /usr/local/mysql/data/test/




## 把备份的.ibd文件还原到表中
(root@localhost) [test]>ALTER TABLE test.t_innodb  IMPORT TABLESPACE;




## 查询恢复的数据
(root@localhost) [test]>select count(*) from t_innodb;                                    
+----------+
| count(*) |
+----------+
|    20000 | 
+----------+
1 row in set (0.01 sec)

你可能感兴趣的:(MySQL)