下面是一个通用的 MySQL 数据库备份 Bash 脚本:

你可以将这个脚本保存为 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}"


说明

  1. 变量配置:
    • 修改 DB_NAMEDB_USERDB_PASSBACKUP_DIRBACKUP_PREFIX 为你的实际数据。
  2. 备份文件命名:
    • 例:your_backup.mon.tgzyour_backup.tue.tgz …… 一周七个文件循环覆盖。
  3. 执行方式:
    • 可配合 crontab 定时执行,例如每天凌晨3点备份,可用:
      0 3 * * * /path/to/mysql_backup.sh
  4. 安全建议:
    • 脚本中明文密码有泄漏风险,实际生产环境建议使用 ~/.my.cnf 配置免密,或者用 mysqldump--defaults-extra-file 参数。