Ubuntu 上 SQLAdmin 自动备份配置指南
一 准备与前提
二 方案一 使用 SQLAdmin 命令行配合 Cron 定时执行
#!/usr/bin/env bash
set -Eeuo pipefail
# 配置区
DB="your_database_name"
OUT_DIR="/var/backups/sqladmin"
LOG_FILE="/var/log/sqladmin_backup.log"
DATE=$(date +"%Y%m%d%H%M%S")
OUT_FILE="$OUT_DIR/${DB}_${DATE}.sql"
# 初始化
mkdir -p "$OUT_DIR"
exec >>"$LOG_FILE" 2>&1
echo "[$(date)] [INFO] 开始备份: $DB -> $OUT_FILE"
# 执行备份(如使用 sqladmin 子命令;若工具名不同,请替换为实际命令)
if sqladmin backup --database "$DB" --output "$OUT_FILE"; then
echo "[$(date)] [INFO] 备份成功: $OUT_FILE"
else
echo "[$(date)] [ERROR] 备份失败: $DB"
exit 1
fi
sudo chmod +x /usr/local/bin/backup_sqladmin.sh
sudo /usr/local/bin/backup_sqladmin.sh
tail -n 20 "$LOG_FILE"
# 当前用户
crontab -e
# 或指定用户
sudo crontab -u username -e
# 在打开的编辑器中加入(注意 % 需要转义为 \%)
0 2 * * * /usr/local/bin/backup_sqladmin.sh
三 方案二 无 SQLAdmin 命令时直接用 mysqldump 备份
#!/usr/bin/env bash
set -Eeuo pipefail
DB_USER="your_user"
DB_PASS="your_password"
DB_HOST="localhost"
DB_NAME="your_database_name"
OUT_DIR="/var/backups/mysql"
LOG_FILE="/var/log/mysql_backup.log"
DATE=$(date +"%Y%m%d%H%M%S")
OUT_FILE="$OUT_DIR/${DB_NAME}_${DATE}.sql.gz"
mkdir -p "$OUT_DIR"
exec >>"$LOG_FILE" 2>&1
echo "[$(date)] [INFO] 开始备份: $DB_NAME -> $OUT_FILE"
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers --default-character-set=utf8mb4 "$DB_NAME" \
| gzip > "$OUT_FILE"
if [ $? -eq 0 ] && [ -s "$OUT_FILE" ]; then
echo "[$(date)] [INFO] 备份成功: $OUT_FILE"
else
echo "[$(date)] [ERROR] 备份失败: $DB_NAME"
rm -f "$OUT_FILE"
exit 1
fi
sudo chmod +x /usr/local/bin/backup_mysql.sh
sudo /usr/local/bin/backup_mysql.sh
0 2 * * * /usr/local/bin/backup_mysql.sh
四 备份策略与运维要点
# 在备份脚本末尾追加
RETENTION_DAYS=7
find "$OUT_DIR" -type f -name "*.sql*" -mtime +$RETENTION_DAYS -delete
FAIL_MSG="[$(date)] [ALERT] 备份失败: $DB_NAME"
echo "$FAIL_MSG" >> "$LOG_FILE"
echo "$FAIL_MSG" | mail -s "SQLAdmin 备份告警" admin@example.com