现在的位置: 首页 > 关系型数据库 > 备份恢复 > 正文

xtrabackup实现多实例备份实践

时间:2015年10月11日 | 分类:备份恢复 | 评论:0 条 | 浏览:1,833 次

多实例备份,我一直未曾去学习使用它,最近,因公司报表机数据增长太快,dump备份太慢,也很容易卡住,因此,决定弃用dunp备份,改用xtrabackup备份,实现增备、全备;

目前,DB存在3307,3308,3309 三个实例,使用的mysqld_multi部署的多实例;

这里,如果需要使用xtrabackup备份多实例的话,需要针对每个实例,将配置文件独立写出一份,放在/home/backup/conf目录下

我们备份的目录为:/home/backup

备份的最新检查点放在:/home/backup/last_backup

备份存放路径:/home/backup/BackupDir_xtrabackup

备份日志存放路径:/home/backup/log

具体目录结构如下:

[root@slave1 home]# tree /home/backup
/home/backup
├── BackupDir_xtrabackup
├── backup_xtrabackup.sh
├── conf
│ ├── my3307.cnf
│ ├── my3308.cnf
│ └── my3309.cnf
├── last_backup
└── log

percona xtrabackup 官方文档地址:

https://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/innobackupex_script.html

下面,简单讲一下,xtrbackup备份多实例的使用

xtrbackup常用的几个参数:

--user: mysql用户

--password: 用户密码

--defaults-file: 指定my.cnf文件路径,若不指定则读取mysql默认的my.cnf文件,这里我们会指定我们在conf目录独立出的各个实例的文件

--socket:mysql实例对应的socket文件

全备示例:

innobackupex --user=root --password=123456 --socket=/tmp/mysql3307.sock --defaults-file=/home/backup/conf/my3307.cnf /home/backup/BackupDir_xtrabackup/3307/

当备份日志出现:innobackupex: completed OK! 则代表备份成功。

备份结束后,备份目录会出现几个文件,下面,我们解释一下:

backup-my.cnf:主要是记录innobackupex中使用到Mysql参数。

xtrabackup_checkpoints:记录备份类型及开始及结束的lsn位置。backup_type 有两种full-prepared (全备)、incremental (增备)。

xtrabackup_info:记录mysql相关信息。

xtrabackup_logfile: xtrabackup自己的日志文件,新版本中不直接可见。

xtrabackup_binlog_info :这个会记录你备份结束时,主上binlog的位置,可以用于重建主从

增量备份,由于是基于全备执行,而且,方法比较简单,这里就不演示

下面描述一下,恢复需要注意的问题:

1. 对全量备份进行操作

了解两个参数 :

--apply-log :创建新的事务日志,从backup-my.cnf文件中读取innodb配置信息。

--redo-only:只读已提交的事务,在最后一次增量合并时,不需要填写这个参数。

全量备份恢复前准备

innobackupex --apply-log --redo-only /home/backup/BackupDir_xtrabackup/3307/......

2. 将第一次增量备份的数据合并到全量备份中

innobackupex --apply-log --redo-only /home/backup/BackupDir_xtrabackup/3307/...full --incremental-dir= /home/backup/BackupDir_xtrabackup/3307/.....inc

3.将第二次全量备份的数据合并到全量备份中(最后一个增量备份)

innobackupex --apply-log /home/backup/BackupDir_xtrabackup/3307/...full --incremental-dir= /home/backup/BackupDir_xtrabackup/3307/.....inc

注:最后一次的合并操作中不需要添加--redo-only参数。

4.这里需要对全备,再做一次apply-log,网上很多都没有这步,但官方文档上有

innobackupex --apply-log /home/backup/BackupDir_xtrabackup/3307/...full

5.停止mysql服务

恢复时需要停掉MySQL,并且数据目录必须为空,所以,我们需要多原有的数据目录进行备份,最简单方式:mv data data_1011_bak

然后,再新建一个数据目录:mkdir data

6. 恢复数据。

innobackupex --defaults-file=/home/backup/conf/my3307.cnf --copy-back /home/backup/BackupDir_xtrabackup/3307/...full

7.权限设置

恢复完成后,需要对数据目录设置mysql权限

chown -R mysql:mysql /data/

8.启动mysql实例

9. 查看是否恢复成功,这里恢复算完成了,但是,实际情况下,我们还需要根据xtrbackup_binlog_info的信息去恢复 binlog的部分数据,这个环节网上也没有提到,所以,刚才对数据目录的备份就十分有用,这里,就不做演示,相信基于binlog的恢复,应该都十分熟练了