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

发布时间:2026/6/27 9:35:02
备份脚本记录(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