返回顶部

Xtrabackup物理备份工具使用

Xtrabackup物理备份工具使用

 

一  安装

wget -O /etc/yum.repos.d/epel.repo  http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm

 

 

二 全备并恢复

 

mkdir /server/backup  -p

 

1.参数

--user=
--password=
--socket=
--no-timestamp 

 

 

2. 全备例子

innobackupex   --user=root --password=123456 --no-timestamp /server/backup/mysql_backup/

 

 

3. 恢复数据前的准备(合并xtabackup_logfile和备份的物理文件)

innobackupex --apply-log --use-memory=32M /server/backup/mysql_backup/

 

 

4. 模拟故障

[root@db2 backup]# pkill mysqld
[root@db2 backup]# cd /data/mysql/data/
[root@db2 data]# /bin/rm -rf *

 

 

5. 恢复

cp -a /server/backup/mysql_backup/*  /data/mysql/data/

 

或者

innobackupex --copy-back  /server/backup/mysql_backup/

 

 

注意:恢复时,要确认数据路径是空的,并且数据库是停掉的

chown -R mysql.mysql /data/mysql/data/
/etc/init.d/mysqld start

 

 

6.验证

mysql -uroot -p123456 -e "select * from ysl.student"

 

 

三 增量备份并恢复数据

周日全备,周一到周六做增量

1.周日全量备份

mkdir /backup/full
innobackupex --user=root --password=123456 --no-timestamp /backup/full/

 

 

2.周一增量备份(周一晚上)

innobackupex --user=root --password=123456 --incremental --no-timestamp --incremental-basedir=/backup/full/ /backup/inc1

 

 

3.周二增量备份(周二晚上)

innobackupex --user=root --password=123456 --incremental --no-timestamp --incremental-basedir=/backup/inc1/ /backup/inc2

 

 

4.模拟故障

周三删表 student
drop table ysl.student;

 

5. 数据恢复 

恢复时,要确认数据路径是空的,并且数据库是停掉的

#把全量数据 和增量数据  合并到一起
innobackupex --apply-log  --redo-only /backup/full
innobackupex --apply-log  --redo-only --incremental-dir=/backup/inc1 /backup/full
innobackupex --apply-log  --incremental-dir=/backup/inc2 /backup/full
innobackupex --apply-log  /backup/full

 

 

# 恢复数据
innobackupex --copy-back  /backup/full/

chown -R mysql.mysql /data/mysql/data/
/etc/init.d/mysqld start

 

 

四 练习

背景:
1、xtrabackup备份策略每周日,full全备
2、xtrabackup周一到周六,inc1-inic6
3、总数据量200G
4、周三上午10点误删除表student,数据量1G左右
5、周二晚上inc2备份完成之后到周三上午10点又做了很多操作

如何将数据库恢复到t1表误删除之前状态?

思路:
    1、停业务,挂维护页
    2、找备用库
    3、合并full+inc1+inc2
    4、截取周二晚上inc2备份后到周三上午10点,t1表删除之前的binlog日志
    5、将合并后的full+截取的binlog恢复到备用库
    6、验证数据可用性和完整性
    7、使用备用库替代生产库使用或者将t1表导出并导入回生产库
    8、业务恢复

 

 

1.全备

mkdir /backup/full
innobackupex --user=root --password=123456 --no-timestamp /backup/full/

 

 

2.周一增量备份(周一晚上)

innobackupex --user=root --password=123456 --incremental --no-timestamp --incremental-basedir=/backup/full/ /backup/inc1

 

 

3.周二增量备份(周二晚上)

innobackupex --user=root --password=123456 --incremental --no-timestamp --incremental-basedir=/backup/inc1/ /backup/inc2

 

 

4. 周三10点之前也有数据操作, 10点有删表误操作

 

5. 把全量数据 和增量数据  合并到一起

将合并后的full+截取的binlog恢复到备用库
innobackupex --apply-log  --redo-only /backup/full
innobackupex --apply-log  --redo-only --incremental-dir=/backup/inc1 /backup/full
innobackupex --apply-log  --incremental-dir=/backup/inc2 /backup/full
innobackupex --apply-log  /backup/full

 

 

6. 恢复备份数据

恢复时,要确认数据路径是空的,并且数据库是停掉的

将合并后的full+截取的binlog恢复到备用库
#恢复备份数据
innobackupex --copy-back  /backup/full/
chown -R mysql.mysql /data/mysql/data/
/etc/init.d/mysqld start

 

 

7. 进行二进制日志数据恢复

将合并后的full+截取的binlog恢复到备用库
#查看 binlog日志
show master status;
#找到删除命令的前一行
show binlog events in "my-bin.000009";

# 截取二进制日志 需要的二进制日志
mysqlbinlog --start-position=120 --stop-position=322 /data/binlog/my-bin.000009 >/tmp/binlog.sql

# 临时关闭 二进制日志
set sql_log_bin=0;
source /tmp/binlog.sql

 

 

8 生产库上的操作

drop table student;
create table student (id int,name varchar(20));

或者拷贝从库的表结构
create table student_bak select * from ysl.student where 1=2;
# 生产库 修改表名

# 删除 student 表空间
alter table student discard tablespace;

cd /data/mysql/data/ysl
cp /backup/full/ysl/student.ibd ./

chown -R mysql.mysql *
alter table student import tablespace;

 

posted on 2019-09-17 17:02  augustyang  阅读(282)  评论(0)    收藏  举报

导航