|
xtrabackup备份实际上是在线的物理热备,为什么这么说呢,因为实际上他是以拷贝mysql物理文件来备份的方式,只是加入了一些锁和钩子来避免数据缺失,优势当然就是快了,物理拷贝始终是速度最快的备份方式,缺点就是占用空间大. 备份初期会创建一个redo的钩子,让在备份期间产生的数据都能记录下来,而备份数据文件时也会锁一下表,这样数据就会更完整. xtrabackup支持全备和增备,但是我个人不建议用增备,因为增备效果不怎么样,而且直接拷贝binlog其实也挺好用,所以全备+binlog就可以了. xtrabackup是个链向InnoDB API和mysql client API的C程序,其中 为了兼容InnoDB数据文件格式,xtrabackup 2.1版本目前存在4种独立的可执行程序 我们能够像使用任何mysql客户端那样自如地运用xtrabackup |
|
| backup备份 |
当选择--backup模式
|
| Preparing备份 |
从备份到恢复会经过3个步骤:backup→prepare→restore
在prepare过程,建议不能因为计划内或计划外将其中断,这会导致数据文件损坏,备份的有效性将不能得到保证 |
|
--defaults-file 备份数据库的配置文件my.cnf的路径 --user=root 备份操作用户名,一般都是root用户,但可以改 --throttle=400 运行io限制数,一般来说并行能增加速度,但是IO也高,限制能减少影响 --stream=tar 压缩类型,这里选择tar格式,好像也只能是tar --databases 指定备份的数据库和某个库的表,例如这样:--databases="db db.table",不过要注意的是,他依然会把mysql库备份一遍,因为有很多公共信息还是依赖到他. --no-lock 可以在备份非innodb表和frm文件时不锁表,但是master和slave的pos信息就无法记录,因为write_binlog_info和write_slave_info函数只在mysql_lockall函数中调用,而mysql_lockal调用了flush tables with read lock (不适合生产环境) --use-memory preparing 进程可以通过分配更多的内存来提高速度,这取决于系统的可用内存,默认值是100MB。总的来说分配的内存越多越好。 如果是从库,还可以加从库参数 --slave-info 备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE='', MASTER_LOG_POS=0 |
|
| 恢复 | |
|
--databases 指定还原的数据库和某个库的表 --export 在--apply-log时使用,为每个InnoDB表创建一个以.exp结尾的文件,然后将你需要恢复的表的ibd和exp文件复制到目标机器,在目标机器上执行导入:mysql> create table t() engine=innodb; //此处需要DBA手动创建一个同结构的表或表已存在 mysql> ALTER TABLE t DISCARD TABLESPACE; $ cp t.ibd t.exp ${DATA_DIR}/${DB}/ mysql> ALTER TABLE t IMPORT TABLESPACE;相当于做了一次表空间传输,恢复了单表数据。 --defaults-file=/etc/my.cnf 使用my.cnf文件,把需要恢复的文件恢复到my.cnf指定的位置,必须写在最前面,不然会报错。 --use-memory=4G 为了加快恢复速度,设置可用内存参数,可以不用 |
|