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) 收藏 举报
浙公网安备 33010602011771号