当前位置: 首页 > article >正文

Percona XtraBackup数据备份方案

一、简介

官方文档:https://docs.percona.com/percona-xtrabackup/innovation-release/index.html

Percona XtraBackup 是一款适用于基于 MySQL 的服务器的开源热备份实用程序,可让您的数据库在计划的维护时段内保持完全可用。无论是 24x7 高负载服务器还是低交易量服务器,Percona XtraBackup 都旨在实现无缝备份,而不会影响生产环境中服务器的性能。

支持的引擎: InnoDB、XtraDB、MyISAM、MyRocks

限制:8.0版本限制于不支持备份MySQL、Percona Server for MySQL 或 Percona XtraDB Cluster 8.0s之前的版本中创建的数据库。

优点:免费、热备份、增量备份、高效恢复、支持多种引擎、备份压缩

缺点:只支持对应版本备份、资源消耗、恢复过程复杂

二、环境

三、安装(dnf)

3.1 安装存储库

dnf install \
https://repo.percona.com/yum/percona-release-latest.\
noarch.rpm

3.2 启动存储库

sudo percona-release enable-only tools release
#如果之前已安装release,则只需启用“tools”:
sudo percona-release enable-only tools

3.3 运行安装percona-xtrabackup-80

sudo dnf install percona-xtrabackup-80

四、备份

4.1 完整备份

#创建完整备份
xtrabackup --backup -H x.x.x.x -u [user] -p[password]  --target-dir=/data/backups

#准备备份
xtrabackup --prepare  --target-dir=/data/backups

#如果需要增量备份需加参数--apply-log-only 

输出结果:

4.2 增量备份

#创建完整备份
xtrabackup --backup -H x.x.x.x -u [user] -p[password]  --target-dir=/data/backup
#查看
cat /data/backups/xtrabackup_checkpoints 

#创建增量备份
xtrabackup --backup -H x.x.x.x -u [user] -p[password] --target-dir=/data/inc01 --incremental-basedir=/data/backups
#创建多个增量备份
xtrabackup --backup -H x.x.x.x -u [user] -p[password] --target-dir=/data/inc02 --incremental-basedir=/data/inc01


#准备完整备份
xtrabackup --prepare --apply-log-only --target-dir=/data/backups

#准备第一个增量备份
xtrabackup --prepare --apply-log-only --target-dir=/data/backups \
--incremental-dir=/data/inc01





4.3 压缩备份

xtrabackup --backup -H x.x.x.x -u [user] -p[password] --compress --target-dir=/data/backups/base01

#指定压缩级别--compress-zstd-level=1
#1 (默认): 最快的压缩速度,最低的压缩率。
#2-5: 较快的压缩速度,适中的压缩率。
#6-9: 平衡压缩速度和压缩率。
#10-15: 较慢的压缩速度,更高的压缩率。
#16-22: 最慢的压缩速度,最高的压缩率。
xtrabackup --backup -H x.x.x.x -u [user] -p[password] --compress compress-zstd-level=1 --target-dir=/data/backups/base01

#加快压缩速度,使用并行压缩:--compress-threads
xtrabackup --backup -H x.x.x.x -u [user] -p[password] --compress --compress-threads=4 --target-dir=/data/backups/base01

#更换压缩算法:-compress=lz4
xtrabackup --backup -H x.x.x.x -u [user] -p[password] --compress=lz4 --compress-threads=4 --target-dir=/data/backups/base01




#准备备份前需解压备份文件
xtrabackup --decompress --target-dir=/data/compressed/


#准备备份
xtrabackup --prepare --apply-log-only --target-dir=/data/backups

4.4 部分备份

#备份表
#匹配表名(正则表达式)
xtrabackup --backup --datadir=/var/lib/mysql --target-dir=/data/backups/ --tables="^test[.].*"


#提供表名列表
echo "mydatabase.mytable" > /tmp/tables.txt
xtrabackup --backup --tables-file=/tmp/tables.txt

#备份数据库
xtrabackup --databases='mysql sys performance_schema test ...'


#准备备份
xtrabackup --prepare --export --target-dir=/path/to/partial/backup
#找不到表时忽略
xtrabackup --prepare -–innodb-force-recovery=1 --export --target-dir=/path/to/partial/backup

五、恢复

xtrabackup --copy-back --target-dir=/data/backups/

chown -R mysql:mysql /var/lib/mysql

chmod 751 /var/lib/mysql

六、备份脚本

全量备份

#!/bin/bash
date=`date +%F`                                                      
backupDir=/data/backups                                                     
target_dir=/data/backups/$date                              
mysqlDir=/home/mysql/mysql8/bin/mysql                                          
backupLog=$backupDir/backuplog                                                
mysql_password=xxxxxxxxx                                  

if [[ `ls $backupDir | grep $date | wc -l` -ne '0' ]]
then
        echo "$target_dir exists!!!"
else
        mkdir $target_dir
fi

if [[ `ls $backupDir | grep backuplog | wc -l` -ne '0' ]]
then
        echo "$backupLog exists!!!"
else
        mkdir $backupLog
fi


xtrabackup --backup --host=localhost --user=root --password=$mysql_password --target-dir=$target_dir

xtrabackup --prepare --apply-log-only --target-dir=$target_dir >> $backupLog/prepare_full_success.log 2>&1

find $backupDir -maxdepth 1 -type d -mtime +30 -exec rm -Rf {} \; >> $backupLog/deleted_record.log  2>&1          ##删除30天前的备份文件

增量备份

#!/bin/bash
date=`date +"%F"`                                                      
datenum=`date -d "1 days ago" +%F`
backupall_time=`date -d "last Sunday" +%F`
backupDir=/data/backups
target_dir=/data/backups/$date
backupLog=$backupDir/backuplog
mysql_password=xxxxxxx

if [[ `ls $backupDir | grep $date | wc -l` -ne '0' ]]
then
        echo "$target_dir exists!!!"
else
        mkdir $target_dir
fi

if [[ `ls $backupDir | grep backuplog | wc -l` -ne '0' ]]
then
        echo "$backupLog exists!!!"
else
        mkdir $backupLog
fi

xtrabackup --backup --host=localhost --user=root --password=$mysql_password --target-dir=$target_dir --incremental-basedir=$backupDir/$datenum

xtrabackup --prepare --apply-log-only --target-dir=$backupDir/$backupall_time --incremental-dir=$target_dir >> $backupLog/prepare_incr_success.log 2>&1

find $backupDir -maxdepth 1 -type d -mtime +30 -exec rm -Rf {} \; >> $backupLog/deleted_record.log  2>&1 

备份策略

0 1 * * 7 /bin/bash /data/shell/backup_all.sh
0 1 * * 1-6 /bin/bash /data/shell/backup_add.sh

http://www.kler.cn/a/380788.html

相关文章:

  • MYSQL安装(ubuntu系统)
  • 【笔记】前后端互通中前端登录无响应
  • vue2和vue3在html中引用组件component方式不一样
  • Python实现FTP服务器:从入门到实践
  • C++20 STL CookBook2 更强大的编译时 + 安全比较 + spaceship比较符
  • sparkSQL面试题
  • Java学习教程,从入门到精通,Java对象和类语法知识点(20)
  • pdf转图片
  • Angular解析本地json文件
  • [mysql]修改表和课后练习
  • How to initiate a conversation with a stranger?
  • 【Mysql 深入探索】InnoDB 实现事务的机制
  • qt QColor详解
  • 海报在线制作系统
  • MySQL-如果你在添加外键时忘加约束名,如何找到系统默认的约束名
  • 默认路由:实现内网所有网段流量走一条默认路由访问外网
  • redis:String字符串命令和内部编码
  • 教育机构如何利用知识中台进行数字教学
  • 第二十八章 Vue之自定义指令
  • go的template示例
  • pdf 添加页眉页脚,获取前五页
  • JavaScript、ES6 高频重点面试题
  • 【开源免费】基于SpringBoot+Vue.JS大学生就业招聘系统(JAVA毕业设计)
  • JS装备智能化储备管理体系优化改革
  • AS技术探索
  • 设计模式之结构型模式---装饰器模式