备份脚本记录(binlog文件+mysql+mongo)
2026/7/4 15:09:08 网站建设 项目流程

备份脚本记录(binlog文件+mysql+mongo)

mysql备份

#!/bin/bash# ===================== 配置区 =====================MYSQL_USER="xxx"MYSQL_PASSWORD='xxxxxx'MYSQL_SOCKET="/tmp/mysql.sock"# 根据你的实际路径调整MYSQL_DATA_DIR="/data/mysqldata"BACKUP_DIR="/data/backup"OSS_DIR="oss://backups/test/test-mysql/"DATE=$(date+"%Y-%m-%d")BACKUP_NAME="mysql_full_${DATE}"FULL_BACKUP="${BACKUP_DIR}/${BACKUP_NAME}"ARCHIVE_FILE="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"ENC_PASSWORD="wlyy"ENC_ARCHIVE_FILE="$BACKUP_DIR/${BACKUP_NAME}.tar.gz.enc"RETENTION_DAYS=3# 保留最近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}"\--stream=xbstream|gzip->${ARCHIVE_FILE}if[$?-ne0];thenlog"ERROR: 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}"-name"mysql_full_*.tar.gz"-mtime+${RETENTION_DAYS}-deletefind"${BACKUP_DIR}"-name"mysql_full_*.tar.gz.enc"-mtime+${RETENTION_DAYS}-deletefind"${BACKUP_DIR}"-name"xtrabackup.log"-mtime+30-delete}# ===================== 主流程 =====================main(){log"========== MySQL 8.0 XtraBackup 开始 =========="do_full_backup clean_old_backups log"========== MySQL 8.0 XtraBackup 结束 =========="}main

mysql的binlog文件

#!/bin/bashset-euopipefail############################### ====== 配置区 ======##############################BINLOG_DIR="/data/mysqldata"INDEX_FILE="${BINLOG_DIR}/binlog.index"OSS_DIR="oss://backups/test/test-mysql/"BACKUP_DIR="/data/backup"DATE=$(date+"%Y-%m-%d")TIMESTAMP=$(date'+%Y%m%d_%H%M%S')TAR_FILE="$BACKUP_DIR/binlog_${DATE}.tar.gz"LOG_FILE="$BACKUP_DIR/backup_binlog.log"ENC_PASSWORD="xxxx"ENC_TAR_FILE="$BACKUP_DIR/binlog_${DATE}.tar.gz.enc"RETENTION_DAYS=1############################### ====== 函数 ======##############################log(){echo"[$(date'+%F %T')]$*"|tee-a"$LOG_FILE"}cleanup(){rm-f"$BACKUP_DIR/binlog.list"}trapcleanup EXITcheck_env(){if[!-f"$INDEX_FILE"];thenlog"ERROR: binlog.index not found:$INDEX_FILE"exit1fiif!command-vossutil&>/dev/null;thenlog"ERROR: ossutil not found"exit1fi}############################### ====== 主流程 ======##############################check_env# 1) 读取 index,去掉最后一行(当前 binlog)OLD_BINLOGS=$(head-n-1"$INDEX_FILE"||true)if[-z"$OLD_BINLOGS"];thenlog"No closed binlog to backup (only current active binlog exists)"exit0fi# 2) 转成文件名列表(仅 basename)>"$BACKUP_DIR/binlog.list"echo"$OLD_BINLOGS"|whileread-rpath;do[-n"$path"]&&echo"$(basename"$path")">>"$BACKUP_DIR/binlog.list"doneCOUNT=$(wc-l<"$BACKUP_DIR/binlog.list")log"Found$COUNTclosed binlog(s) to backup"# 3) 打包log"Creating archive:$TAR_FILE"tar-czf"$TAR_FILE"-C"$BINLOG_DIR"\--files-from="$BACKUP_DIR/binlog.list"if[!-s"$TAR_FILE"];thenlog"ERROR: tar.gz is empty"exit1filog"Archive 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) 上传到 OSSlog"Uploading to${OSS_DIR}"/usr/local/bin/ossutilcp${ENC_TAR_FILE}${OSS_DIR}log"Backup SUCCESS:${OSS_DIR}"# 6) 可选:清理本地 tarfind"${BACKUP_DIR}"-name"binlog_*.tar.gz"-mtime+${RETENTION_DAYS}-deletefind"${BACKUP_DIR}"-name"binlog_*.tar.gz.enc"-mtime+${RETENTION_DAYS}-deletelog"Done."

mongo备份

#!/bin/bash# ===================== 配置区 =====================MONGO_HOST="127.0.0.1"MONGO_PORT="27020"MONGO_USER="xxx"# 如无认证留空MONGO_PASS="xxxx"# 如无认证留空MONGO_AUTH_DB="xxxx"# 认证库BACKUP_DIR="/data/backup"OSS_DIR="oss://backups/prod/mongo/"DATE=$(date+"%Y-%m-%d")BACKUP_NAME="mongo_backup_${DATE}"RETENTION_DAYS=3# 保留最近3天备份# ==================================================# ===================== 函数区 =====================log(){echo"[$(date'+%F %T')]$1"}do_backup(){localbackup_path="${BACKUP_DIR}/${BACKUP_NAME}"localarchive_file="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz"localenc_archive_file="${BACKUP_DIR}/${BACKUP_NAME}.tar.gz.enc"log"开始备份 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.log"2>&1if[$?-ne0];thenlog"ERROR: mongodump 执行失败"rm-rf"${backup_path}"exit1fi# 压缩备份log"压缩备份文件..."tar-czf"${archive_file}"-C"${BACKUP_DIR}""${BACKUP_NAME}">>"${BACKUP_DIR}/backup.log"2>&1if[$?-ne0];thenlog"ERROR: 压缩失败"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}"-name"mongo_backup_*.tar.gz"-mtime+${RETENTION_DAYS}-deletefind"${BACKUP_DIR}"-name"mongo_backup_*.tar.gz.enc"-mtime+${RETENTION_DAYS}-deletefind"${BACKUP_DIR}"-name"backup.log"-mtime+${RETENTION_DAYS}-delete}# ===================== 主流程 =====================main(){log"========== MongoDB 备份开始 =========="do_backup clean_old_backups log"========== MongoDB 备份结束 =========="}main

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询