下面是一个通用的 MySQL 数据库备份 Bash 脚本:
mysqldump
备份整个库。.tgz
文件。xxx.mon.tgz
,mon
为当前星期几的英文缩写(mon
至sun
),每周自动循环。你可以将这个脚本保存为 mysql_backup.sh
并赋予可执行权限(chmod +x mysql_backup.sh
)。
#!/bin/bash
# === 配置区(请根据实际情况修改) ===
DB_NAME="your_db_name"
DB_USER="your_username"
DB_PASS="your_password"
BACKUP_DIR="/path/to/your/backup/dir"
BACKUP_PREFIX="your_backup" # 如 mydbbackup,最终文件名为 mydbbackup.mon.tgz
# === 自动生成 ===
# 获取星期几的英文缩写(小写)
WEEKDAY=$(date +%a | tr '[:upper:]' '[:lower:]')
# 备份文件名
BACKUP_FILE="${BACKUP_PREFIX}.${WEEKDAY}.tgz"
# 临时 SQL 文件
TMP_SQL="${BACKUP_DIR}/${BACKUP_PREFIX}.${WEEKDAY}.sql"
# === 备份流程 ===
mkdir -p "${BACKUP_DIR}"
# 导出数据库
mysqldump -u"${DB_USER}" -p"${DB_PASS}" "${DB_NAME}" > "${TMP_SQL}"
# 检查导出是否成功
if [ $? -ne 0 ]; then
echo "mysqldump failed! Backup aborted."
rm -f "${TMP_SQL}"
exit 1
fi
# 压缩 SQL 文件
tar czf "${BACKUP_DIR}/${BACKUP_FILE}" -C "${BACKUP_DIR}" "$(basename "${TMP_SQL}")"
# 删除临时 SQL 文件
rm -f "${TMP_SQL}"
# 完成提示
echo "Backup successful: ${BACKUP_DIR}/${BACKUP_FILE}"
DB_NAME
、DB_USER
、DB_PASS
、BACKUP_DIR
、BACKUP_PREFIX
为你的实际数据。your_backup.mon.tgz
、your_backup.tue.tgz
…… 一周七个文件循环覆盖。crontab
定时执行,例如每天凌晨3点备份,可用:0 3 * * * /path/to/mysql_backup.sh
~/.my.cnf
配置免密,或者用 mysqldump
的 --defaults-extra-file
参数。