MySQL备份之Xtrabackup实战

简介

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)

特点

1) 备份过程快速、可靠;

2) 备份过程不会打断正在执行的事务;

3) 能够基于压缩等功能节约磁盘空间和流量;

4) 自动实现备份检验;

5) 还原速度快;

安装

ubuntu下安装

sudo apt-get install percona-xtrabackup

完全备份

备份

innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/

--user: 需要创建一个拥有最小权限的用户
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'xtrauser'@'localhost' IDENTIFIED BY 'xtrauser' ;
mysql> FLUSH PRIVILEGES ;

/path/to/BACKUP_DIR

备份出来的数据存放目录,外加包含一些xtrabackup的元数据使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命令的目录中。

innobackupex --user=xtrauser --password=xtrauser --defaults-file=/etc/my.cnf /data/backup

在备份的同时,innobackupex还会在备份目录中创建如下文件:

1.xtrabackup_checkpoints: 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(Log Serial Number日志序列号)范围信息;

 # cat xtrabackup_checkpoints     
  backup_type = full-backuped
  from_lsn = 0
  to_lsn = 1752057
  last_lsn = 1752057
  compact = 0
  recover_binlog_info = 0

在mysql中,存储数据的数据块会有按照顺序的ID, 如果某一块数据被修改,将会赋予新的ID。 根据这些ID,可以标记数据的新老成都。xtrabackup也就是使用这些ID来进行备份,和增量备份

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

2.xtrabackup_binlog_info: mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

还原
假设数据库发生错误,删除了数据目录

//删除目录(根据自己的环境)
sudo rm -rf /data/mysql/var
sudo rm -rf /data/mysql/data
//创建目录(根据自己的环境)
sudo mkdir /data/mysql/var
sudo mkdir /data/mysql/data
//修改目录的所有者(根据自己的环境)
sudo chown -R mysql:mysql /data/mysql/var
sudo chown -R mysql:mysql /data/mysql/data
//还原数据
innobackupex --defaults-file=/etc/my.cnf --copy-back=/data/backup/2017-02-22_16-36-35

增量备份

备份
基于全量备份做增量备份。

先做一次全量备份

innobackupex --user=xtrauser --password=xtrauser --defaults-file=/etc/my.cnf /data/backup

中间做一些修改……

第一次增量备份

innobackupex --user=xtrauser --password=xtrauser --defaults-file=/etc/my.cnf --incremental /data/increment --incremental-basedir=/data/backup/2017-02-22_17-46-35

中间做一些修改……

第二次增量备份

innobackupex --user=xtrauser --password=xtrauser --defaults-file=/etc/my.cnf --incremental /data/increment --incremental-basedir=/data/increment/2017-02-22_17-48-01

准备
“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:

1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。

2)基于所有的备份将未提交的事务进行“回滚”。于是,操作就变成了:不能回滚,因为有可能第一次备份时候没提交,在增量中已经成功提交

innobackupex --apply-log --redo-only /data/backup/2017-02-22_17-46-35

innobackupex --apply-log --redo-only /data/backup/2017-02-22_17-46-35 --incremental-dir=/data/increment/2017-02-22_17-48-01

innobackupex --apply-log --redo-only /data/backup/2017-02-22_17-46-35 --incremental-dir=/data/increment/2017-02-22_17-49-11

恢复

同完全备份恢复过程一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值