首页 > 数据库 >MySQL8一键物理备份脚本分享

MySQL8一键物理备份脚本分享

时间:2024-10-16 19:45:59浏览次数:9  
标签:MySQL8 备份 一键 -- BASE xtrabackup BACKUP DIR

一、Xtrabackup介绍

xtrabackup是由Percona公司开发的一个用于MySQL数据库物理热备的工具,开源免费,目前官方最新版本是8.0.35,也支持8.0.37版本数据库,本文已经过测试。另外8.1,8.2和8.3也支持。它具有如下优点:
(1)备份速度快,物理备份可靠;
(2)在备份期间不间断地处理事务;
(3)支持备份压缩,节约磁盘空间和网络带宽;
(4)自动校验备份。xtrabackup支持流式输出、压缩、增量备份、加密,是目前各个备份厂商普遍使用的MySQL备份工具。

二、Xtrabackup备份原理

1、xtrabackup开始,记录lsn ,同时启动后台进程监控redo日志的变化,且将变化实时记录到xtrabackup_logfile中;
2、复制ibdata1,.ibd数据文件;
3、全局读锁,执行LOCK INSTANCE FOR BACKUP(8.0取代了 FLUSH TABLES WITH READ LOCK);
4、复制非InnoDB的表和文件;
5、获取binlog位置信息;
6、停止复制redo log,即停止记录xtrabackup_logfile;
7、执行UNLOCK INSTANCE释放锁;
8、复制buffer pool;
9、备份完成。

三、下载软件

官网地址:https://www.percona.com/downloads Percona XtraBackup 8.0 只支持MySQL 8.0的版本 Percona XtraBackup 2.4 支持MySQL 5.11 , 5.5, 5.6 和5.7的版本大家按需下载对应的版本当然,也可以从网盘下载

链接: https://pan.baidu.com/s/1cWZ_Vbf8d-eUaAsawA2lUg
提取码: sfka

在这里插入图片描述

四、安装xtrabackup工具

一键安装脚本如下:

#!/bin/bash
cd /etc/yum.repos.d/
rm -rf ./*
cat >> /etc/yum.repos.d/centos.repo <<-EOF
[centos]
name=oracle
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
cd
mount /dev/sr0 /mnt	
yum clean all|wc -l
yum makecache
yum install perl-Digest-MD5 -y
echo "-----------------创建所需目录及用户并上传安装包----------------------------"
# 获取当前所在目录位置
current_dir=$(pwd)
echo "当前所在目录位置: $current_dir"
# 目标路径
target_dir="/usr/local"
# 检查目标路径是否存在,如果不存在则创建
if [ ! -d "$target_dir" ]; then
    mkdir -p "$target_dir"
    echo "已创建目录: $target_dir"
fi
# 移动当前目录下的所有文件到目标路径
mv $current_dir/percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17.tar.gz  $target_dir
echo "已将当前目录下所有文件移动至 $target_dir"
cd /usr/local
tar -xvf percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17.tar.gz
mv percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17 xtrabackup
echo "export PATH=\$PATH:/usr/local/xtrabackup/bin" >>/etc/profile
source /etc/profile
which xtrabackup
xtrabackup --version

五、备份脚本

#!/bin/bash
# 定义变量
BACKUP_BASE_DIR="/data/backup"
DATE_STR=$(date +%F)
TIME_STR=$(date +%H%M%S)  # 添加时间戳
DAY_OF_WEEK=$(date +%u)
FULL_BACKUP_DIR="${BACKUP_BASE_DIR}/db_full_${DATE_STR}"
INCREMENTAL_BACKUP_DIR="${BACKUP_BASE_DIR}/db_incr_${DATE_STR}_${TIME_STR}"
LOG_FILE="${BACKUP_BASE_DIR}/db_backup_${DATE_STR}_${TIME_STR}.log"
MYSQL_CONF="/etc/my.cnf"
MYSQL_USER="root"
MYSQL_PASSWORD="123456"
MYSQL_SOCKET="/tmp/mysql.sock"
# 上一次备份目录(可以是全备份或上一次增量备份)
LAST_BACKUP_DIR="${BACKUP_BASE_DIR}/db_last"
# 判断是否是周一,如果是,则进行全量备份;否则进行增量备份
if [ "$DAY_OF_WEEK" -eq 1 ]; then
    BACKUP_DIR=$FULL_BACKUP_DIR
    BACKUP_TYPE="FULL"
    INCREMENTAL_OPTION=""
else
    if [ -L "$LAST_BACKUP_DIR" ] && [ -d "$(readlink -f $LAST_BACKUP_DIR)" ] && [ -f "$(readlink -f $LAST_BACKUP_DIR)/xtrabackup_checkpoints" ]; then
        BACKUP_DIR=$INCREMENTAL_BACKUP_DIR
        BACKUP_TYPE="INCREMENTAL"
        INCREMENTAL_OPTION="--incremental-basedir=$(readlink -f $LAST_BACKUP_DIR)"
    else
        BACKUP_DIR=$FULL_BACKUP_DIR
        BACKUP_TYPE="FULL"
        INCREMENTAL_OPTION=""
    fi
fi
# 创建新的备份目录
mkdir -p $BACKUP_DIR
# 执行 xtrabackup 备份命令
/usr/local/xtrabackup/bin/xtrabackup --defaults-file=$MYSQL_CONF \
           --backup \
           --target-dir=$BACKUP_DIR \
           $INCREMENTAL_OPTION \
           --user=$MYSQL_USER \
           --password=$MYSQL_PASSWORD \
           --socket=$MYSQL_SOCKET \
           > $LOG_FILE 2>&1
# 检查备份是否成功
if [ $? -eq 0 ]; then
    echo "${BACKUP_TYPE} backup completed successfully at $(date)" | tee -a $LOG_FILE
else
    echo "${BACKUP_TYPE} backup failed at $(date)" | tee -a $LOG_FILE
    exit 1
fi
# 更新 LAST_BACKUP_DIR 链接指向最新备份目录
ln -sfn $BACKUP_DIR $LAST_BACKUP_DIR
# 清理3天以前的备份
find $BACKUP_BASE_DIR -type d -name "db_full_*" -mtime +3 -exec rm -rf {} \;
find $BACKUP_BASE_DIR -type d -name "db_incr_*" -mtime +3 -exec rm -rf {} \;
find $BACKUP_BASE_DIR -type f -name "db_backup_*.log" -mtime +3 -exec rm -f {} \;
echo "Cleanup of backups older than 3 days completed at $(date)" | tee -a $LOG_FILE

欢迎关注公众号《小周的数据库进阶之路》,更多精彩知识和干货尽在其中。
在这里插入图片描述

标签:MySQL8,备份,一键,--,BASE,xtrabackup,BACKUP,DIR
From: https://blog.csdn.net/qq_36936192/article/details/142989926

相关文章

  • jeecgboot 3.7.1 一键将生成好的代码复制到前后端项目目录,并执行SQL插入菜单的python
    importshutilimportosimportmysql.connectorfrommysql.connectorimportErrorbase_dir="D:/pro/JeecgBoot-v3.7.1"code_dir="/gendcode"package_name="meetrice"#MySQL连接配置config={'user':'root......
  • LLAMAFACTORY:一键优化大型语言模型微调的利器
    人工智能咨询培训老师叶梓转载标明出处模型适配到特定的下游任务,通常需要进行微调(fine-tuning),这一过程往往需要大量的计算资源。为了解决这一问题,来自北京航空航天大学和北京大学的研究人员共同开发了LLAMAFACTORY,这是一个统一的框架,集成了多种前沿的高效训练方法,使得用户可......
  • 使用宝塔面板一键部署.NET Core
    都2024年了,搜了一下网上关于在宝塔上部署.netCore项目的,基本还是五六年前那一套: supervisor守护进程启动项目+ 新增静态站点+手动配置反向代理全套下来也挺麻烦的........前几天在一台闲置主机上安装了个宝塔面板版本是:9.0  发现网站选项里多了很多选项,万恶的是居......
  • python批处理,一键打开vscode窗口,分别加载jeecg前后端项目,并运行前后端服务.
    importsubprocess#VsCode打开后端项目cmd1=["code","D:\pro\JeecgBoot-v3.7.1\jeecg-boot"]process1=subprocess.Popen(cmd1,stdout=subprocess.PIPE,shell=True)output1,_=process1.communicate()print(output1.decode('utf-8')......
  • 文件同步文件备份软件 Goodsync 序列号
    GoodSync是一种简单和可靠的文件备份和文件同步软件。它会自动分析、同步,并备份您的电子邮件、珍贵的家庭照片、联系人,、MP3歌曲,财务文件和其他重要文件本地-之间的台式机,笔记本电脑,服务器,外部驱动器,以及WindowsMobile设备,以及通过FTP远程,网友的WebDAV等等。该版本已内置序......
  • clickhouse 备份
    此命令是在clickhouse22.7.5版本下执行:官方文档见:https://clickhouse.com/docs/en/operations/backup#command-summary参考文档: https://blog.csdn.net/lusklusklusk/article/details/139781360创建备份目录mkdir/backups/修改权限:chmod766/backups/logsudochown-Rc......
  • C#连接MySQL8.0数据库失败
    环境.net7MySQL8.0报错提示:未经处理的异常System.AggregateException:“Oneormoreerrorsoccurred.(Authenticationmethod'caching_sha2_password'failed.Eitheruseasecureconnection,specifytheserver'sRSApublickeywithServerRSAPublicKeyFile,......
  • IDEA一键启动多个微服务操作步骤
    前言我们在做微服务项目开发的时候,每次刚打开IDEA,就需要把各个服务一个个依次启动,特别是服务比较多时,逐个点击不仅麻烦还费时。下面来说一下如何一键启动多个微服务。操作步骤1.点击EditConfigurations2.点击“+”,选择Compound 3.添加你所需要一键启动的所有微服务模块,并为微服务......
  • Python 数据库备份脚本
    importdatetimeimportosimportsubprocess#数据库备份目录BACKUP_DIR='/path/to/backup'#备份文件保留周期(天)RETENTION_PERIOD=7#备份数据库defbackup_database():current_time=datetime.datetime.now()backup_file=f"backup_{current_time.strf......
  • 122-bt-nginx 配置备份
    userwwwwww;worker_processesauto;error_log/www/wwwlogs/nginx_error.logcrit;pid/www/server/nginx/logs/nginx.pid;worker_rlimit_nofile51200;stream{log_formattcp_format'$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_......