5、Xtrabackup全备增备
Xtrabackup的安装
环境: centos7
XtraBackup官网:https://www.percona.com/downloads/
yum -y install \
https://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.9/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.9-1.el7.x86_64.rpm
备份策略: 周六 晚上0点全备, 周一至周五、周日 是增量,基于上一天增量
0 0 * * 6 zjs_full.sh 0 1 * * 0-5 zjs_inc.sh
mkdir /backup/xbackup/full /backup/xbackup/inc1 /backup/xbackup/inc2
# 周日全备
innobackupex --user=root --password=123 --no-timestamp /backup/xbackup/full/
# 周一增量备份
innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/xbackup/full/ /backup/xbackup/inc1
# 周二增量备份
innobackupex --user=root --password=123 --incremental --no-timestamp --incremental-basedir=/backup/xbackup/inc1 /backup/xbackup/inc2
周三误操作事故
drop table test;
恢复流程
a) 准备上周六全备。 b) 合并周日、周一 、周二增量。 c) 在测试库恢复以上数据,数据的目前状态应该周三凌晨1:00 d) 需要恢复的数据状态是,下午2点钟左右 e) 从1点开始的binlog恢复到删除之前转台 f) 导出删除的表zjs_base,恢复到生产库,验证数据可用性、完整性。 g) 启动应用连接数据库
准备恢复数据
# 1. 准备xtrabackup备份,合并备份
innobackupex --apply-log --redo-only /backup/xbackup/full
innobackupex --apply-log --redo-only --incremental-dir=/backup/xbackup/inc1 /backup/xbackup/full
innobackupex --apply-log --incremental-dir=/backup/xbackup/inc2 /backup/xbackup/full
innobackupex --apply-log /backup/xbackup/full
# 2. 确认备份数据 binlog起点,准备截取binlog。
cd /backup/xbackup/inc2/
cat xtrabackup_binlog_info
mysql-bin.000001 1121
# 3. 截取到 drop 操作之前的binlog
mysqlbinlog --start-position=1121 /tmp/mysql-bin.000003
找到drop之前的event和postion号做日志截取,假如 1437
mysqlbinlog --start-position=1121 --stop-position=1437 /tmp/mysql-bin.000003 >/tmp/incbinlog.sql
# 4.关闭数据库、备份二进制日志
/etc/init.d/mysqld stop
cd /application/mysql/data/
cp mysql-bin.000001 /tmp
# 5. 删除MySQL所有数据,可先到其他地方
cd /application/mysql/data/
rm -rf *
恢复数据
# 将全量备份的数据恢复到数据目录下
innobackupex --copy-back /backup/xbackup/full/
chown -R mysql.mysql /application/mysql/data/
/etc/init.d/mysqld start
# 恢复binlog记录
set sql_log_bin=0
source /tmp/incbinlog.sql
全备打包(适合全备)
# tar 包
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=*** /backup/ --stream=tar > /backup/`date +"%Y%m%d_%H%M%S"`.tar
# tar.gz 包
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --password=*** /backup/ --stream=tar | gzip > /backup/`date +"%Y%m%d_%H%M%S"`.tar.gz
备份策略
xfull --apply-log --redo-only 保证last-lsn=周一增量开始lsn xinc1 合并周一的增量到全备,并apply-log --redo-only 保证last-lsn=周二增量开始lsn xinc2 合并周二的增量到全备,并apply-log --redo-only 保证last-lsn=周三增量开始lsn xinc3 合并周三的增量到全备,并apply-log --redo-only 保证last-lsn=周四增量开始lsn xinc4 合并周四的增量到全备,并apply-log --redo-only 保证last-lsn=周五增量开始lsn xinc5 合并周五的增量到全备,并apply-log --redo-only 保证last-lsn=周六增量开始lsn xinc6 合并周六的增量到全备,--apply-log 准备恢复即可
innobackupex参数说明
--user 该选项表示备份账号。
--password 该选项表示备份的密码。
--port 该选项表示备份数据库的端口。
--host 该选项表示备份数据库的地址。
--databases 用于指定要备份的数据库, 多个库文件使用方法: “database1 database2″
--socket 该选项表示mysql.sock所在位置,以便备份进程登录mysql。
--defaults-file 数据库的配置文件路径
--apply-log 准备在一个备份上启动mysql服务
--copy-back 从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置
--stream 该选项表示流式备份的格式,backup完成之后以指定格式到STDOUT,目前只支持tar和xbstream。
--no-timestamp 创建备份时不自动生成时间目录,可以自定义备份目录名例如: /backups/mysql/base
--incremental 在全备份的基础上进行增量备份,后跟增量备份存贮目录路径
--incremental-basedir=DIRECTORY 增量备份所需要的全备份路径目录或上次做增量备份的目录路径
--incremental-dir=DIRECTORY 增量备份存贮的目录路径
--redo-only 用于准备增量备份内容把数据合并到全备份目录,配合–incremental-dir 增量备份目录使用。
--force-non-empty-directories 如果是特定库备份还原,不需要删掉整个mysql目录,只是特定库的及相关文件就可以,还原时加上此参数就不会报错。
Last updated