
环境说明
操作系统:AlmaLinux 8.x 数据库:MySQL 部署在 Docker 容器中 目录结构:假定把脚本统一放在 ~/scripts
二、准备工作:创建脚本存放目录
登录到你的主服务器(master)
ssh dba@master.example.com
创建专属目录
mkdir-p ~/scripts
cd ~/scripts-p
:不存在就创建; cd
:进入目录。 确认目录权限
ls-ld ~/scripts
输出应类似:
drwxr-xr-x 2 dba dba 4096May2510:00/home/dba/scripts
三、Shell 脚本示例:MySQL 备份脚本
目标:每天凌晨 2 点自动备份主库并保留最近 7 天的备份。
脚本名称:backup_mysql.sh
#!/bin/bash
#
# backup_mysql.sh —— 自动备份 MySQL 主库
# 环境:AlmaLinux + Docker
# 说明:依赖 docker、gzip、mysqldump
#
# —— 一、基本变量定义 ——
# 容器名称或 ID
CONTAINER_NAME="mysql-master"
# 备份存放目录
BACKUP_DIR="/home/dba/scripts/backups"
# 保留天数
RETENTION_DAYS=7
# 时间戳
DATE=$(date +"%F_%H%M")
# —— 二、命令检查 ——
forcmdindocker mysqldump gzip;do
command-v$cmd>/dev/null 2>&1
if[$?-ne0];then
echo "错误:未检测到命令 $cmd,请安装后重试!"
exit1
fi
done
# —— 三、创建备份目录 ——
mkdir -p "$BACKUP_DIR"
if[$?-ne0];then
echo "错误:创建目录 $BACKUP_DIR 失败!"
exit 1
fi
# —— 四、执行备份 ——
BACKUP_FILE="$BACKUP_DIR/mysql_backup_${DATE}.sql.gz"
echo "[$(date +"%F %T")] 开始备份:$BACKUP_FILE"
dockerexec$CONTAINER_NAME\
mysqldump -uroot -p'your_password' --all-databases \
|gzip>"$BACKUP_FILE"
if[$?-eq0];then
echo"[$(date +"%F %T")] 备份完成!"
else
echo"[$(date +"%F %T")] 备份失败!"
exit1
fi
# —— 五、清理过期备份 ——
echo"[$(date +"%F %T")] 开始清理 $RETENTION_DAYS 天前的备份"
find"$BACKUP_DIR"-type f -name"mysql_backup_*.sql.gz"\
-mtime +$RETENTION_DAYS-print-delete
echo"[$(date +"%F %T")] 清理完成!"
注意
command -v cmd
:检查命令是否安装;
docker exec
:进入容器执行;
find … -mtime +N
:查找 N 天前的文件;如果你看到
bash: command: 未找到命令
,说明系统中没有安装对应命令:# 例如安装 docker
sudo dnf install-ydocker
# 或者安装 gzip
sudo dnf install-ygzip
四、配置 crontab:让脚本自动跑起来
打开 crontab 编辑器
crontab-e
第一次会让你选择编辑器,推荐 vim
或nano
。添加定时任务在文件末尾新增一行:
02***/home/dba/scripts/backup_mysql.sh>>/home/dba/scripts/backup.log2>&1
含义:
0 2 * * *
:每天 02:00 执行 >> backup.log 2>&1
:将标准输出和错误输出都追加到 backup.log
保存并退出
vim
: ESC
→:wq
→ 回车nano
: Ctrl+O
→ 回车 →Ctrl+X
查看 crontab 是否生效
crontab-l
会列出刚才添加的任务。
五、常见错误排查
bash: backup_mysql.sh: 未找到命令 | chmod +x backup_mysql.sh - 路径写错,检查全路径 |
docker: 未找到命令 | sudo dnf install docker - 需注销后重登 |
mysqldump: command not found | yum install -y mysql |
permission denied | chmod -R 755 ~/scripts |
找不到脚本 |
六、“官方”示意图支持
官方文档示意:crontab 字段含义来源:Linux 手册

七、进阶玩法 & 注意事项
邮件通知:在脚本末尾加
mail -s"MySQL 备份报告 $(date +'%F')" you@example.com < backup.log
主从同步检查:可以写一个脚本
check_replication.sh
,通过SHOW SLAVE STATUS
判断延迟。集中化日志管理:把
backup.log
发送到日志服务器或 ELK。安全:不要把数据库密码写在脚本里,推荐使用
.my.cnf
或docker secret
。
八、小结
- 脚本编写
:变量、命令检查、错误退出、日志记录 - 定时执行
:crontab 配置、日志重定向 - 排查技巧
: command -v
、全路径、权限 - 环境依赖
:AlmaLinux + Docker + GNU 工具
只要照着示例改一改、跑一跑,你的数据库自动备份就稳稳当当了!
如果你还有问题,欢迎在后台留言!(脚本为服务器复制可能有空格问题)
END
如果看到这里,说明你喜欢这篇文章,请推荐、转发、点赞。同时 标星(置顶)本博主可以第一时间接受到博文推送。私信说出你想要的资源给你安排!!!
👆长按上方二维码 2 秒
说出你想要的资源
我知道你 “在看”
评论 (0)