备份脚本记录(binlog文件+mysql+mongo)
备份脚本记录binlog文件mysqlmongomysql备份#!/bin/bash# 配置区 MYSQL_USERxxxMYSQL_PASSWORDxxxxxxMYSQL_SOCKET/tmp/mysql.sock# 根据你的实际路径调整MYSQL_DATA_DIR/data/mysqldataBACKUP_DIR/data/backupOSS_DIRoss://backups/test/test-mysql/DATE$(date%Y-%m-%d)BACKUP_NAMEmysql_full_${DATE}FULL_BACKUP${BACKUP_DIR}/${BACKUP_NAME}ARCHIVE_FILE${BACKUP_DIR}/${BACKUP_NAME}.tar.gzENC_PASSWORDwlyyENC_ARCHIVE_FILE$BACKUP_DIR/${BACKUP_NAME}.tar.gz.encRETENTION_DAYS3# 保留最近3天备份XTABACKUP_LOG${BACKUP_DIR}/xtrabackup.log# # 函数区 log(){echo[$(date%F %T)]$1|tee-a${XTABACKUP_LOG}}do_full_backup(){log开始 MySQL 8.0 XtraBackup 全量备份...# 执行全量备份/data/percona-xtrabackup-8.0.34/bin/xtrabackup\--backup\--target-dir${FULL_BACKUP}\--user${MYSQL_USER}\--password${MYSQL_PASSWORD}\--socket${MYSQL_SOCKET}\--streamxbstream|gzip-${ARCHIVE_FILE}if[$?-ne0];thenlogERROR: xtrabackup 备份失败rm-rf${FULL_BACKUP}exit1fi# 加密openssl enc -aes-256-cbc-salt-passpass:${ENC_PASSWORD}-in${ARCHIVE_FILE}-out${ENC_ARCHIVE_FILE}# 复制到OSS/usr/local/bin/ossutilcp${ENC_ARCHIVE_FILE}${OSS_DIR}# 删除临时备份目录rm-rf${FULL_BACKUP}log备份完成:${ENC_ARCHIVE_FILE}}clean_old_backups(){log清理${RETENTION_DAYS}天前的旧备份...find${BACKUP_DIR}-namemysql_full_*.tar.gz-mtime${RETENTION_DAYS}-deletefind${BACKUP_DIR}-namemysql_full_*.tar.gz.enc-mtime${RETENTION_DAYS}-deletefind${BACKUP_DIR}-namextrabackup.log-mtime30-delete}# 主流程 main(){log MySQL 8.0 XtraBackup 开始 do_full_backup clean_old_backups log MySQL 8.0 XtraBackup 结束 }mainmysql的binlog文件#!/bin/bashset-euopipefail############################### 配置区 ##############################BINLOG_DIR/data/mysqldataINDEX_FILE${BINLOG_DIR}/binlog.indexOSS_DIRoss://backups/test/test-mysql/BACKUP_DIR/data/backupDATE$(date%Y-%m-%d)TIMESTAMP$(date%Y%m%d_%H%M%S)TAR_FILE$BACKUP_DIR/binlog_${DATE}.tar.gzLOG_FILE$BACKUP_DIR/backup_binlog.logENC_PASSWORDxxxxENC_TAR_FILE$BACKUP_DIR/binlog_${DATE}.tar.gz.encRETENTION_DAYS1############################### 函数 ##############################log(){echo[$(date%F %T)]$*|tee-a$LOG_FILE}cleanup(){rm-f$BACKUP_DIR/binlog.list}trapcleanup EXITcheck_env(){if[!-f$INDEX_FILE];thenlogERROR: binlog.index not found:$INDEX_FILEexit1fiif!command-vossutil/dev/null;thenlogERROR: ossutil not foundexit1fi}############################### 主流程 ##############################check_env# 1) 读取 index去掉最后一行当前 binlogOLD_BINLOGS$(head-n-1$INDEX_FILE||true)if[-z$OLD_BINLOGS];thenlogNo closed binlog to backup (only current active binlog exists)exit0fi# 2) 转成文件名列表仅 basename$BACKUP_DIR/binlog.listecho$OLD_BINLOGS|whileread-rpath;do[-n$path]echo$(basename$path)$BACKUP_DIR/binlog.listdoneCOUNT$(wc-l$BACKUP_DIR/binlog.list)logFound$COUNTclosed binlog(s) to backup# 3) 打包logCreating archive:$TAR_FILEtar-czf$TAR_FILE-C$BINLOG_DIR\--files-from$BACKUP_DIR/binlog.listif[!-s$TAR_FILE];thenlogERROR: tar.gz is emptyexit1filogArchive size:$(du-sh$TAR_FILE|awk{print $1})# 4) 加密openssl enc -aes-256-cbc-salt-passpass:${ENC_PASSWORD}-in${TAR_FILE}-out${ENC_TAR_FILE}# 5) 上传到 OSSlogUploading to${OSS_DIR}/usr/local/bin/ossutilcp${ENC_TAR_FILE}${OSS_DIR}logBackup SUCCESS:${OSS_DIR}# 6) 可选清理本地 tarfind${BACKUP_DIR}-namebinlog_*.tar.gz-mtime${RETENTION_DAYS}-deletefind${BACKUP_DIR}-namebinlog_*.tar.gz.enc-mtime${RETENTION_DAYS}-deletelogDone.mongo备份#!/bin/bash# 配置区 MONGO_HOST127.0.0.1MONGO_PORT27020MONGO_USERxxx# 如无认证留空MONGO_PASSxxxx# 如无认证留空MONGO_AUTH_DBxxxx# 认证库BACKUP_DIR/data/backupOSS_DIRoss://backups/prod/mongo/DATE$(date%Y-%m-%d)BACKUP_NAMEmongo_backup_${DATE}RETENTION_DAYS3# 保留最近3天备份# # 函数区 log(){echo[$(date%F %T)]$1}do_backup(){localbackup_path${BACKUP_DIR}/${BACKUP_NAME}localarchive_file${BACKUP_DIR}/${BACKUP_NAME}.tar.gzlocalenc_archive_file${BACKUP_DIR}/${BACKUP_NAME}.tar.gz.enclog开始备份 MongoDB...# 构造 mongodump 命令localcmd/usr/local/mongodb/bin/mongodump \ --host${MONGO_HOST}\ --port${MONGO_PORT}\ --out${backup_path}# 如果配置了认证if[-n${MONGO_USER}][-n${MONGO_PASS}];thencmd${cmd}\ --username${MONGO_USER}\ --password${MONGO_PASS}\ --authenticationDatabase${MONGO_AUTH_DB}fi# 执行备份eval${cmd}${BACKUP_DIR}/backup.log21if[$?-ne0];thenlogERROR: mongodump 执行失败rm-rf${backup_path}exit1fi# 压缩备份log压缩备份文件...tar-czf${archive_file}-C${BACKUP_DIR}${BACKUP_NAME}${BACKUP_DIR}/backup.log21if[$?-ne0];thenlogERROR: 压缩失败exit1fi# 加密openssl enc -aes-256-cbc-salt-passpass:${ENC_PASSWORD}-in${archive_file}-out${enc_archive_file}# 复制到OSS/usr/local/bin/ossutilcp${enc_archive_file}${OSS_DIR}# 删除临时目录rm-rf${backup_path}log备份完成:${enc_archive_file}}clean_old_backups(){log清理${RETENTION_DAYS}天前的旧备份...find${BACKUP_DIR}-namemongo_backup_*.tar.gz-mtime${RETENTION_DAYS}-deletefind${BACKUP_DIR}-namemongo_backup_*.tar.gz.enc-mtime${RETENTION_DAYS}-deletefind${BACKUP_DIR}-namebackup.log-mtime${RETENTION_DAYS}-delete}# 主流程 main(){log MongoDB 备份开始 do_backup clean_old_backups log MongoDB 备份结束 }main

相关新闻

Python实现B站视频下载工具:支持大会员4K与充电专属内容

Python实现B站视频下载工具:支持大会员4K与充电专属内容

Python实现B站视频下载工具:支持大会员4K与充电专属内容 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader Bilibili视频下载…

2026/6/27 9:35:02阅读更多 →
2026年AI编程新趋势:从Prompt到Loop Engineering,小白也能掌握的大模型实战指南

2026年AI编程新趋势:从Prompt到Loop Engineering,小白也能掌握的大模型实战指南

本文介绍了从Prompt Engineering到Loop Engineering的AI发展历程,阐述了AI工程四层图景:Prompt、Context、Harness和Loop。其中,Harness Engineering负责将模型转化为能干活的安全智能体,而Loop Engineering则解决跨多轮持续工作的…

2026/6/27 9:35:02阅读更多 →
Python遍历列表、元组、字典、集合

Python遍历列表、元组、字典、集合

在 Python 中,列表(list)、元组(tuple)、字典(dict)和集合(set)都是可迭代对象(Iterable),遍历的核心机制是 for...in 循环&#xff0…

2026/6/27 9:30:02阅读更多 →
从“关键词”到“知识图谱”:AIGEO重塑实体企业数字基建

从“关键词”到“知识图谱”:AIGEO重塑实体企业数字基建

在生成式AI全面普及的当下,信息获取的底层逻辑正在经历深刻变革。用户从传统的“关键词搜网页”转变为“一句话提问AI找服务”,这种交互方式的转变,直接催生了AIGEO(生成式引擎优化)这一新兴领域。面对这一趋势&#x…

2026/6/27 11:10:10阅读更多 →
IDEA远程开发配置全攻略:从零搭建SSH/WSL2/Docker远程环境,15分钟完成企业级部署

IDEA远程开发配置全攻略:从零搭建SSH/WSL2/Docker远程环境,15分钟完成企业级部署

更多请点击: https://intelliparadigm.com 第一章:IDEA远程开发的核心原理与适用场景 IntelliJ IDEA 的远程开发并非简单地将本地编辑器界面映射到远端,而是基于 JetBrains Gateway 与 Remote Development Backend 构建的双向代理架构。其核…

2026/6/27 11:10:10阅读更多 →
DLSS Swapper完全指南:3步轻松管理游戏DLSS版本,提升50%游戏性能

DLSS Swapper完全指南:3步轻松管理游戏DLSS版本,提升50%游戏性能

DLSS Swapper完全指南:3步轻松管理游戏DLSS版本,提升50%游戏性能 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否遇到过这样的困扰:新游戏发布时,DLSS版本不兼容导…

2026/6/27 11:10:10阅读更多 →
商超同款洗衣液线上线下谁划算?2026全渠道比价与科学选购指南

商超同款洗衣液线上线下谁划算?2026全渠道比价与科学选购指南

商超同款洗衣液线上线下谁划算?2026全渠道比价与科学选购指南在消费日益理性的2026年,面对商超货架与电商大促中琳琅满目的洗涤产品,消费者在搜索“商超同款洗衣液线上线下哪个品牌划算”时,其核心诉求早已超越了单纯的“价格比拼…

2026/6/27 11:10:10阅读更多 →
【IDEA搜索效率翻倍秘籍】:20年JetBrains资深专家亲授17个被90%开发者忽略的隐藏搜索技巧

【IDEA搜索效率翻倍秘籍】:20年JetBrains资深专家亲授17个被90%开发者忽略的隐藏搜索技巧

更多请点击: https://intelliparadigm.com 第一章:搜索效率翻倍的底层逻辑与认知重构 传统搜索行为常陷入“关键词堆砌—结果筛选—反复试错”的低效循环,其本质是人脑语义建模与机器索引机制之间的结构性错配。真正提升搜索效率的关键&…

2026/6/27 11:10:10阅读更多 →
全面掌握PacketSender:开源网络调试工具终极实战指南

全面掌握PacketSender:开源网络调试工具终极实战指南

全面掌握PacketSender:开源网络调试工具终极实战指南 【免费下载链接】PacketSender Network utility for sending / receiving TCP, UDP, SSL, HTTP 项目地址: https://gitcode.com/gh_mirrors/pa/PacketSender 在网络开发和系统集成工作中,调试…

2026/6/27 11:05:10阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/26 11:03:22阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/27 5:46:02阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/26 9:29:01阅读更多 →
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南

10分钟AI语音克隆与实时变声&#xff1a;Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…

2026/6/27 0:04:03阅读更多 →
Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider:3分钟AI智能分层,彻底告别手动抠图时代

Layerdivider&#xff1a;3分钟AI智能分层&#xff0c;彻底告别手动抠图时代 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider 还在为复杂的图像分层工作烦…

2026/6/27 0:04:03阅读更多 →
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践

1. 项目概述&#xff1a;为什么X-Frame-Options是Web安全的“防盗门”&#xff1f;最近在排查一个老项目的安全审计报告时&#xff0c;又被提到了“点击劫持”风险&#xff0c;矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了&#xff0c;很多开发团队&#xff0c;尤…

2026/6/27 0:04:03阅读更多 →