xtrabackup初使用(2)
4、备份中的常用选项和场景
innobackupex中的选项很多,常用的比如stream选项,–slave-info选项能够方便搭建从库,生成偏移量的信息,比如并行–parallel等,还可以根据LSN来备份,选项是–incremental-lsn
对于stream选项,默认是打包,可以结合管道来实现压缩,比如:
innobackupex –defaults-file=/etc/my.cnf –user=root –stream=tar /data/backup/0408/ | gzip > /data/backup/0408/0408.tar.gz
很多时候其实我不想备份整个库,我只想备份一个表,那么这个操作如何来实现呢。
innobackupex –defaults-file=/etc/my.cnf –user=root -pn–include=’test.t’ /data/backup/0408
这里有几点需要注意,工具还是会逐个去扫描,只是那些不符合的会被忽略掉,也就意味着备份出来的情况和全备的目录结构是一样的,但是指定的表会备份出ibd,frm文件。
而这种情况下,ibdata也会完整备份出来,如果这个文件很大,那就相当不给力了。
不过有一个场景还是很实用的。那就是迁移表。
5、迁移表实验
如果我们还有一个实例3307的数据库,想把3306库中的test.t表导入到3307的test数据库中我们可以使用Innobackupex来做物理备份,然后还原导入,达到迁移的目的。
下面的命令会声明指定目录下的备份需要导出对象。
innobackupex --apply-log --export /data/backup/0408/2017-03-04_15-21-16
直接结果就是多了如下的文件:
然后在新的3307的test数据库中创建表t,并且对表t信息做截断:
然后将exp和ibd文件拷贝到目标目录然后修改属组导入即可(如是导入到mysql5.6拷贝.cfg,而不是.exp):
然后再在test数据库中对表t进行导入操作:
可以看到数据从3306的test数据库中导入到了3307的数据库当中。
如果不是按如上步骤进行操作会报如下的错误:
原因就是,1、在没有对表进行创建和discard之前就将文件拷贝到了test目录下;2、表创建完成以后,没有将对应的文件拷贝到test目录下,导致数据库无法找到对应的文件
有另外一点值得说的是,这个.exp文件是不是必须的,其实也不是。
我们只拷贝.ibd文件也照样可以。可能在新版本中会有一些警告提示,我们重新来做一下。
root@localhost:mysql.sock 15:50:32 [test]>alter table t discard tablespace;Query OK, 0 rows affected (0.03 sec)
同时删除刚刚拷贝过来的.exp文件。
然后拷贝ibd文件到指定目录,赋权限
导入表空间信息。
root@localhost:mysql.sock 15:50:32 [test]> alter table t import tablespace; Query OK, 0 rows affected (0.00 sec)
over!!!