小林揉着布满红血丝的眼睛吐槽说再这么干三个月就要提桶跑路兼转行当程序员写“偷懒的代码”,这话逗笑我了——其实写点入门级的服务器运维自动化脚本,根本不需要太复杂的Python或者Go,我当年熬了那次备份库漏网差点造成数据丢失(后来靠阿里云快照救回来,扣了当月绩效30%当教训)的通宵之后,第三天就对着Linux自带的Bash教程写了个能用的基础脚本,直接把周末占的私人时间抢回来了。
说实话,新手入门不用一开始就想着搞Ansible、SaltStack这种复杂的集群自动化工具,先拿Bash写几个高频重复且不需要交互或交互极少的脚本练手,才是最稳妥、能最快尝到“减少重复工作”甜头的方式。
先拿刚才提到的MySQL单库定时备份脚本来举第一个例子吧,先别嫌简单,这个脚本我改了三版用到现在,在我们中小团队20多台非核心的单库/分库服务器上都在用,稳定得很。先看我整理的第三版脚本:
#!/bin/bash
作者:老周(6年运维踩坑达人)
用途:阿里云MySQL单库本地+OSS增量备份(哦不,新手版先本地定时全量+过期删除)
时间:2026年X月X日(脚本里有自动获取时间的变量)
首先定义几个变量,后面改起来方便
MYSQL_USER="backup_user"
MYSQL_PASS="你的备份用户安全密码"
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
要备份的数据库名,多个库用空格隔开
BACKUP_DBS="shop_db user_db order_db"
本地备份目录,记得提前用mkdir -p创建
BACKUP_DIR="/data/mysql_backups"
过期天数,新手可以设7天或14天
EXPIRE_DAYS=7
获取当前时间,格式是YYYY-MM-DD-HH-MM,方便区分
DATE=$(date +%Y-%m-%d-%H-%M)
先检查备份目录是否存在,不存在就创建
if [ ! -d "$BACKUP_DIR" ]; then
mkdir -p "$BACKUP_DIR"
echo "备份目录不存在,已创建" >> "$BACKUP_DIR/backup_log_$(date +%Y-%m).log"
fi
循环备份每个数据库
for db in $BACKUP_DBS; do

# 这里加个single-transaction参数,防止备份InnoDB表的时候锁表
mysqldump -u$MYSQL_USER -p$MYSQL_PASS -h$MYSQL_HOST -P$MYSQL_PORT single-transaction quick lock-tables=false $db | gzip > "$BACKUP_DIR/${db}_${DATE}.sql.gz"
# 检查备份是否成功,成功失败都写日志
if [ $? -eq 0 ]; then
echo "[$DATE] 数据库 $db 备份成功" >> "$BACKUP_DIR/backup_log_$(date +%Y-%m).log"
else
echo "[$DATE] 数据库 $db 备份失败,请检查!" >> "$BACKUP_DIR/backup_log_$(date +%Y-%m).log"
# 生产环境下这里可以加个钉钉或者企业微信的告警,新手可以先跳过
fi
done
删除过期的备份文件
find "$BACKUP_DIR" -name ".sql.gz" -mtime +$EXPIRE_DAYS -delete
echo "[$DATE] 已删除 $EXPIRE_DAYS 天前的过期备份文件" >> "$BACKUP_DIR/backup_log_$(date +%Y-%m).log"
这里一定要敲黑板两个新手专属避坑提醒:第一个是不要把MySQL root用户的密码直接写在脚本里,我刚入行第一次写脚本就犯了这个错,后来被老板抓着骂了一顿,赶紧单独建了一个只有SELECT和LOCK TABLES(后来查资料知道加single-transaction可以不用LOCK TABLES InnoDB表)权限的backup_user,密码也改得复杂了些;第二个是脚本里的所有路径和变量都用双引号括起来,不然如果备份目录或者数据库名里有空格(虽然生产环境下我个人 不要用有空格的命名,但万一接手的是老项目遗留的呢?),脚本就会报错。
脚本写好之后,怎么让它每天凌晨1点自动运行呢?这时候就要用到Linux自带的crontab定时任务了,先给脚本加个执行权限:chmod +x /data/scripts/mysql_backup.sh(脚本最好单独放在一个专门的目录,比如/data/scripts,方便管理),然后输入crontab -e编辑定时任务,在最后一行加上0 1 /data/scripts/mysql_backup.sh >> /dev/null 2>&1,保存退出就可以了。
除了MySQL备份,还有一个高频重复的20台以内小集群服务器磁盘CPU内存巡检脚本也很适合新手练手,这里就不贴完整代码了,只讲几个核心的命令组合:比如用df -h | grep /data快速检查/data分区的剩余磁盘,用top -bn1 | head -n 10快速获取当前的CPU内存峰值,用scp或者sftp(新手用scp更简单)把巡检结果统一传到一台管理机上,再用crontab定时每天早上8点50分运行,赶上周会前10分钟就能拿到完整的台账。
最后再啰嗦一句,写自动化脚本不是为了“炫技”,而是为了把自己从重复的体力劳动中解放出来,去做更有价值的故障排查、架构优化工作。新手一开始可以不用追求脚本的完美性,能用、稳定就行,后面慢慢再改、再加功能,比如加个告警机制、加个增量备份的逻辑、甚至用Python重写一下。
你们在刚入行的时候有没有遇到过让你崩溃的重复工作?欢迎在评论区分享你的故事或者你的第一个入门级自动化脚本!

评论列表 (0条):
加载更多评论 Loading...