news 2026/4/23 14:05:53

Linux 定时备份 MySQL 并推送 Gitee

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 定时备份 MySQL 并推送 Gitee

核心准备工作

环境依赖
确保服务器已安装以下工具:

  • Docker
  • Git
  • mailx(用于邮件通知)
  • dos2unix(解决脚本格式问题)

Gitee 配置
创建私有仓库(如mysql_backup),避免数据泄露。

SSH 免密配置

# 生成 SSH 密钥(一路回车)ssh-keygen-trsa-C"your_email@example.com"# 复制公钥内容cat~/.ssh/id_rsa.pub# Gitee 配置:头像→设置→SSH公钥→粘贴公钥保存# 测试免密连接ssh-Tgit@gitee.com

初始化本地 Git 仓库

mkdir-p/opt/mysql_backup/{backups,gitee_backup}cd/opt/mysql_backup/gitee_backupgitinitgitremoteaddorigin git@gitee.com:your_username/mysql_backup.git# 配置 Git 用户名和邮箱gitconfig--globaluser.name"Your Name"gitconfig--globaluser.email"your_email@example.com"

备份脚本优化

创建/opt/mysql_backup/backup.sh,支持以下功能:

  • 指定库或全库备份
  • 失败自动重试
  • 邮件通知
  • 自动压缩和清理旧备份
#!/bin/bashset-e# ===== 配置区 =====CONTAINER_NAME="mysql"# Docker MySQL 容器名MYSQL_USER="root"MYSQL_PASSWORD="1234"# MySQL 密码BACKUP_MODE="all"# 备份模式:all(全库)或指定库名BACKUP_DIR="/opt/mysql_backup/backups"GIT_REPO_DIR="/opt/mysql_backup/gitee_backup"KEEP_BACKUPS=10# 保留最近10个备份MAX_RETRIES=3# 失败重试次数RETRY_DELAY=60# 重试间隔(秒)EMAIL_TO="your_email@example.com"# 通知邮箱DATE=$(date+"%Y%m%d_%H%M%S")BACKUP_FILE="${BACKUP_DIR}/mysql_${DATE}.sql"BACKUP_FILE_GZ="${BACKUP_FILE}.gz"LOG_FILE="/opt/mysql_backup/backup_${DATE}.log"# ===== 配置结束 =====# 日志函数log(){echo"[$(date'+%F %T')]$1"|tee-a${LOG_FILE}}# 邮件通知函数send_email(){localsubject="$1"localbody="$2"echo-e"${body}"|mailx-s"${subject}"${EMAIL_TO}}# 失败重试函数retry(){localn=1localmax=${MAX_RETRIES}localdelay=${RETRY_DELAY}whiletrue;do"$@"&&break||{if[[${n}-lt${max}]];thenlog"失败重试${n}/${max}${delay}秒后重试..."((n++))sleep${delay}elselog"达到最大重试次数${max},任务失败"return1fi}done}# 主备份流程log"开始 MySQL 备份任务..."mkdir-p${BACKUP_DIR}# 选择备份模式if[["${BACKUP_MODE}"=="all"]];thenBACKUP_CMD="mysqldump -u${MYSQL_USER}-p${MYSQL_PASSWORD}--all-databases --single-transaction"elseBACKUP_CMD="mysqldump -u${MYSQL_USER}-p${MYSQL_PASSWORD}${BACKUP_MODE}--single-transaction"fi# 执行备份(带重试)if!retrydockerexec${CONTAINER_NAME}${BACKUP_CMD}>${BACKUP_FILE};thenlog"数据库备份失败!"send_email"MySQL备份失败""备份时间:$(date)\n失败日志:${LOG_FILE}"exit1fi# 压缩备份文件gzip${BACKUP_FILE}log"备份完成:${BACKUP_FILE_GZ}"# 清理旧备份ls-tp${BACKUP_DIR}/*.sql.gz|grep-v'/$'|tail-n+$((KEEP_BACKUPS+1))|xargs-I{}rm--{}log"已清理旧备份,保留最近${KEEP_BACKUPS}个"# 推送 Gitee(带重试)if!retrybash-c"cd${GIT_REPO_DIR}&& cp${BACKUP_FILE_GZ}. && git add . && git commit -m 'Backup${DATE}' && git push origin master";thenlog"推送 Gitee 失败!"send_email"MySQL备份推送失败""备份成功但推送失败,日志:${LOG_FILE}"exit1filog"推送 Gitee 成功!"send_email"MySQL备份成功""备份文件:${BACKUP_FILE_GZ}\n备份时间:$(date)"log"备份任务全部完成!"

脚本修复与权限配置

# 修复 Windows 格式问题dos2unix /opt/mysql_backup/backup.sh# 添加执行权限chmod+x /opt/mysql_backup/backup.sh# 手动测试脚本/opt/mysql_backup/backup.sh

定时任务设置

# 编辑 crontabcrontab-e# 每天 12 点和 0 点备份012* * * /opt/mysql_backup/backup.sh>>/opt/mysql_backup/backup.log2>&100* * * /opt/mysql_backup/backup.sh>>/opt/mysql_backup/backup.log2>&1# 查看定时任务crontab-l

关键问题排查

备份文件数据量少
检查BACKUP_MODE是否设置为all,确保启用全库备份。

推送 Gitee 报 404
检查 Git 远程地址是否正确:

gitremote set-url origin git@gitee.com:your_username/mysql_backup.git

SSH 免密失败
确保私钥权限正确:

chmod600~/.ssh/id_rsa

优化建议

安全优化
使用~/.my.cnf存储 MySQL 凭据,避免明文密码:

[mysqldump] user=root password=1234

修改备份命令为:

BACKUP_CMD="mysqldump --defaults-extra-file=/root/.my.cnf --single-transaction${BACKUP_MODE}"

性能优化
添加--single-transaction参数避免锁表,适合 InnoDB 数据库。

验证优化
定期从 Gitee 下载备份文件,执行恢复测试,确保备份有效性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:54:16

C17 _Generic实战精讲:写出可维护、高性能C代码的3个关键步骤

第一章:C17 _Generic特性概述与核心价值C17 标准中的 _Generic 关键字是一项重要的泛型编程工具,它允许开发者根据表达式的类型在编译时选择不同的实现路径。该特性并非创建新的类型系统,而是提供一种类型感知的宏机制,从而增强代…

作者头像 李华
网站建设 2026/4/23 12:46:38

工业电机控制中Keil代码提示的配置指南:操作指南

工业电机控制中Keil代码提示的配置指南:让开发效率起飞在工业自动化现场,时间就是金钱。当你正调试一台伺服驱动器的FOC算法,却因为拼错一个HAL_TIM_PWM_Start()函数名而卡住编译;或者面对复杂的ADC双通道同步采样结构体&#xff…

作者头像 李华
网站建设 2026/4/23 13:04:19

Whisper.cpp语音识别实战指南:从入门到精通

Whisper.cpp语音识别实战指南:从入门到精通 【免费下载链接】whisper.cpp 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/whisper.cpp 环境准备与项目部署 系统要求检查 在开始使用whisper.cpp之前,请确保您的系统满足以下基本要求…

作者头像 李华
网站建设 2026/4/23 12:24:50

nvm终极优化指南:释放磁盘空间的高效技巧

问题发现:你的开发环境正在悄悄变慢? 【免费下载链接】nvm 项目地址: https://gitcode.com/gh_mirrors/nvm/nvm 最近有没有感觉终端响应越来越迟钝?项目启动时间莫名延长?磁盘空间告急提示频繁弹出?&#x1f6…

作者头像 李华
网站建设 2026/4/22 23:05:54

如何选择最佳物理引擎?5大主流引擎完整对比指南

如何选择最佳物理引擎?5大主流引擎完整对比指南 【免费下载链接】PhysX NVIDIA PhysX SDK 项目地址: https://gitcode.com/GitHub_Trending/phy/PhysX 还在为游戏开发选择物理引擎而烦恼?作为游戏开发中最核心的技术组件之一,物理引擎…

作者头像 李华
网站建设 2026/4/23 12:25:14

手部关键点检测技术实战:从零构建智能手势交互系统

手部关键点检测技术实战:从零构建智能手势交互系统 【免费下载链接】tfjs-models Pretrained models for TensorFlow.js 项目地址: https://gitcode.com/gh_mirrors/tf/tfjs-models 在当今人机交互技术飞速发展的时代,手部关键点检测正成为构建下…

作者头像 李华