首先在“准备prepare”的过程中,使用参数--export将表导出,这个导出会将每个InnoDB表创建一个以.exp结尾的文件,这些文件为之后的导入过程服务。
$ innobackupex --apply-log --export ${BACKUP_DIR}/base
然后将你需要恢复的表的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;
这样的导出导入就可以保住恢复的表可以与数据库其他表保持一致性了。
并行备份
xtrbackup还支持并行备份,默认情况下XtraBackup备份时只会开启一个进程进行数据文件的备份,若配置参数--parallel=N可以让XtraBackup开启N个子进程对多个数据文件进行并发备份,这样可以加快备份的速度。当然服务器的IO处理能力以及对服务器的影响也是要考虑的,所以另一个参数--throttle=IOS会与它同时使用,这个参数用来限制备份过程中每秒读写的IO次数,对服务器的IO是一个保护。
这两个参数XtraBackup和innobackupex都支持,举例如下:
$ innobackupex --parallel=4 --throttle=400 ${BACKUP_DIR}/part-base
注意:对同一个数据文件只会有一个进程在备份。
其他
XtraBackup在备份时主要的工作是做数据文件复制,它每次只会读写1MB的数据(即64个page,不能修改),XtraBackup逐页访问1MB数据,使用innodb的buf_page_is_corrupted()函数检查此页的数据是否正常,如果数据不正常,就重新读取这一页,最多重新读取10次,如果还是失败,备份就失败了,退出。
在复制事务日志的时候,每次读写512KB的数据,同样不可以配置。
XtraBackup工具安装percona-xtrabackup-2.2.7-5050-Linux-x86_64.tar.gz
2、检查服务器是否安装了MYSQL,如果没有就要安装好MYSQL
3、开始安装xtrabackup
1)解压
tar -zxvf percona-xtrabackup-2.2.7-5050-Linux-x86_64.tar.gz
2)拷贝innobackupex、 xtrabackup工具到/usr/bin
3)备份并压缩打包
innobackupex --user=$user --password=$password --defaults-file=/opt/mysql5621/my.cnf --database=$db --stream=tar $backupdir 2>$backupdir/$log|gzip 1>$backupdir/$str
4、说明
--database=zztx单独对zztx数据库做备份,若是不添加此参数那就是对全库做备份
2>/data/back_data/zztx.log输出信息写入日志中
1>/data/back_data/zztx.tar.gz 打包压缩存储到该文件中
5、备份脚本
#!/bin/bash
echo "开始备份"`date`
DATE=`date +%y%m%d%H%M`
db=sms_db
user=backupuser
password=backuP_#
backupdir=/mysql/databackup
log=$db'_'$DATE.log
str=$db'_'$DATE.tar.gz
innobackupex --user=$user --password=$password --defaults-file=/opt/mysql5621/my.cnf --database=$db --stream=tar $backupdir 2>$backupdir/$log|gzip 1>$backupdir/$str
echo "备份完毕..."`date`
6、恢复数据
1)先停止数据库:
/opt/mysql5621/bin/mysqladmin -uroot -p --shutdown
2)解压
tar -izxvf sms_db_1501120000.tar.gz -C /data/back_data/db/(没有db,需要mkdir /data/back_data/db/)
3)恢复
innodbbackupex --user=root --password --defaults-file=/opt/mysql5621/my.cnf --apply-log /data/back_data/db/
innodbbackupex --user=root --password --defaults-file=/opt/mysql5621/my.cnf --copy-back /data/back_data/db/
--apply-log选项的命令是准备在一个备份上启动mysql服务
--copy-log选项的命令是从备份目录拷贝数据、索引、日志到my.cnf文件里规定的初始位置
4)赋权
chown -R mysql.mysql /var/lib/mysql/*
5)重启数据库
/opt/mysql5621/bin/mysqld_safe --basedir=/opt/mysql5621/ --datadir=/mysql/data --user=mysql
更多XtraBackup相关教程见以下内容:
用XtraBackup实现MySQL的主从复制快速部署【主不锁表】