linux自动备份mysql需用mysqldump导出+crontab定时+备份管理;脚本含免密配置、压缩、7天清理;cron设凌晨2点执行;建议加错误检测、日志及验证还原。

在 Linux 中编写自动备份 MySQL 数据库的脚本,核心是用 mysqldump 导出数据 + crontab 定时执行 + 合理管理备份文件。下面分步说明关键操作和实用写法。
1. 编写基础备份脚本(含压缩与保留策略)
创建一个可执行脚本(如 /root/backup_mysql.sh),内容如下:
注意:需提前配置 MySQL 免密登录(推荐用 ~/.my.cnf),避免脚本中硬编码密码
- 在
/root/.my.cnf中写入:
[client] host = localhost user = backup_user password = your_secure_password
- 脚本内容示例(支持单库/多库/全库备份):
#!/bin/bash
# 备份配置
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="your_database" # 改为要备份的库名,或用 --all-databases
KEEP_DAYS=7
<h1>创建备份目录</h1><p>mkdir -p $BACKUP_DIR</p><h1>执行备份(加 --single-transaction 避免锁表,适合 InnoDB)</h1><p>mysqldump --single-transaction --routines --events $DB_NAME | gzip > $BACKUP_DIR/${DB<em>NAME}</em>$DATE.sql.gz</p><h1>清理 7 天前的备份</h1><p>find $BACKUP_DIR -name "*.sql.gz" -mtime +$KEEP_DAYS -delete</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill7940" title="Zynq Linux Hardware Debug"><img
src="https://img.php.cn/upload/skill/000/000/081/179177762288958.jpg" alt="Zynq Linux Hardware Debug" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill7940" title="Zynq Linux Hardware Debug" class="overflowclass">Zynq Linux Hardware Debug</a>
<p class="overflowclass">Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。</p>
</div>
<a rel="nofollow" href="/xiazai/skill7940" title="Zynq Linux Hardware Debug" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- 赋予执行权限:
chmod +x /root/backup_mysql.sh
2. 设置定时任务(用 crontab 每天凌晨执行)
运行 crontab -e,添加一行:
0 2 * * * /root/backup_mysql.sh >/dev/null 2>&1
这表示每天凌晨 2 点执行备份。建议避开业务高峰,且重定向日志避免邮件堆积。
提示:可用 tail -f /var/log/syslog | grep CRON 查看 cron 是否正常触发
3. 增强可靠性:加入错误检测和简单通知
在脚本中补充退出状态判断和日志记录:
- 在
mysqldump后加判断:
if [ $? -ne 0 ]; then
echo "[$(date)] MySQL dump failed for $DB_NAME" >> /var/log/backup.log
exit 1
else
echo "[$(date)] Backup completed: ${DB_NAME}_$DATE.sql.gz" >> /var/log/backup.log
fi
- 如需邮件通知,可加
mail -s "MySQL Backup OK" admin@example.com (需已配置 mailutils/postfix)
4. 可选优化:远程备份或分卷压缩
若磁盘空间紧张或需异地容灾,可扩展脚本:
- 备份后同步到远程服务器:
rsync -az $BACKUP_DIR/ user@remote:/backup/mysql/ - 对超大库启用分卷(按表或大小):
mysqldump --tables $DB_NAME table1 table2 | gzip > ... - 用
pv显示进度(调试用):mysqldump ... | pv | gzip > ...
不复杂但容易忽略:务必定期验证备份文件能否解压、导入(zcat xxx.sql.gz | head -20 看开头是否为 SQL),并抽样还原测试。










