Ubuntu 下 SQLAdmin 自动备份实现指南
一 前置准备
二 方式一 使用 sqladmin 命令配合 Cron 定时执行
#!/usr/bin/env bash
set -Eeuo pipefail
# 配置
CONF="/etc/sqladmin/sqladmin.conf" # 推荐:在配置文件中存放连接信息
OUT_DIR="/var/backups/sqladmin"
DATE=$(date +"%Y%m%d%H%M%S")
LOGFILE="$OUT_DIR/backup.log"
# 目录与日志初始化
mkdir -p "$OUT_DIR"
exec >>"$LOGFILE" 2>&1
echo "=== Backup started at $(date) ==="
# 若配置文件存在则使用;否则退回到命令行参数(不推荐明文密码)
if [[ -f "$CONF" ]]; then
sqladmin --config "$CONF" backup --output "$OUT_DIR/backup_$DATE.sql"
else
echo "WARN: $CONF not found, fallback to CLI args (INSECURE)."
sqladmin backup \
--host "$DB_HOST" --port "$DB_PORT" \
--user "$DB_USER" --password "$DB_PASS" \
--database "$DB_NAME" \
--output "$OUT_DIR/backup_$DATE.sql"
fi
if [[ $? -eq 0 ]]; then
echo "Backup succeeded: $OUT_DIR/backup_$DATE.sql"
else
echo "Backup FAILED"
# 可在此处加入告警:例如 mail、企业微信、钉钉机器人等
fi
echo "=== Backup finished at $(date) ==="
三 方式二 使用 mysqldump 作为替代或补充
#!/usr/bin/env bash
set -Eeuo pipefail
OUT_DIR="/var/backups/mysql"
DATE=$(date +"%Y%m%d%H%M%S")
LOGFILE="$OUT_DIR/backup.log"
DB_USER="backup_user"
DB_PASS="StrongPass!23"
DB_NAME="mydb"
mkdir -p "$OUT_DIR"
exec >>"$LOGFILE" 2>&1
echo "=== Backup started at $(date) ==="
mysqldump -h localhost -P 3306 -u "$DB_USER" -p"$DB_PASS" --single-transaction --routines --triggers --default-character-set=utf8mb4 "$DB_NAME" \
| gzip > "$OUT_DIR/${DB_NAME}_${DATE}.sql.gz"
if [[ $? -eq 0 ]]; then
echo "Backup succeeded: $OUT_DIR/${DB_NAME}_${DATE}.sql.gz"
else
echo "Backup FAILED"
fi
echo "=== Backup finished at $(date) ==="
四 备份策略与运维要点