64 lines
2.1 KiB
Bash
64 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# shellcheck source=lib.sh
|
|
. "${SCRIPT_DIR}/lib.sh"
|
|
|
|
qipai_backup_status() {
|
|
local policy_template runbook
|
|
policy_template="${SCRIPT_DIR}/../../deploy/backup/backup-policy.template.json"
|
|
runbook="${SCRIPT_DIR}/../../deploy/backup/backup-restore-runbook.md"
|
|
|
|
qipai_info "backup root: ${APP_ROOT}/backups"
|
|
qipai_info "mysql backup dir: ${APP_ROOT}/backups/mysql"
|
|
qipai_info "emqx backup dir: ${APP_ROOT}/backups/emqx"
|
|
qipai_info "files backup dir: ${APP_ROOT}/backups/files"
|
|
qipai_info "policy template: ${policy_template}"
|
|
qipai_info "runbook: ${runbook}"
|
|
|
|
[ -f "$policy_template" ] && qipai_pass "backup policy template exists" || qipai_warn "backup policy template not found"
|
|
[ -f "$runbook" ] && qipai_pass "backup/restore runbook exists" || qipai_warn "backup/restore runbook not found"
|
|
|
|
qipai_command_status mysqldump
|
|
qipai_command_status mysql
|
|
qipai_command_status tar
|
|
qipai_command_status gzip
|
|
|
|
if command -v emqx >/dev/null 2>&1; then
|
|
qipai_pass "emqx export command available"
|
|
else
|
|
qipai_warn "emqx command not found; EMQX export unavailable"
|
|
fi
|
|
|
|
for dir in "${APP_ROOT}/backups/mysql" "${APP_ROOT}/backups/emqx" "${APP_ROOT}/backups/files" "${APP_ROOT}/backups/manual"; do
|
|
[ -d "$dir" ] && qipai_pass "backup directory exists: $dir" || qipai_warn "backup directory not found: $dir"
|
|
done
|
|
}
|
|
|
|
qipai_backup() {
|
|
qipai_require_root_for_write
|
|
local backup_dir manifest
|
|
backup_dir="${APP_ROOT}/backups/manual/$(date +%Y%m%d%H%M%S)"
|
|
mkdir -p "$backup_dir"
|
|
manifest="${backup_dir}/backup.json"
|
|
cat >"$manifest" <<EOF
|
|
{
|
|
"generatedAt": "$(qipai_timestamp)",
|
|
"type": "M00_MANIFEST_ONLY",
|
|
"policyTemplate": "deploy/backup/backup-policy.template.json",
|
|
"mysql": "SKIPPED_NO_CONFIG",
|
|
"emqx": "SKIPPED_NO_CONFIG",
|
|
"uploads": "SKIPPED_NO_UPLOAD_DIR",
|
|
"note": "Real backup commands will be enabled after production configuration is present."
|
|
}
|
|
EOF
|
|
qipai_pass "backup manifest written: $manifest"
|
|
}
|
|
|
|
if [ "${1:-}" = "--run" ]; then
|
|
qipai_backup
|
|
elif [ "${1:-}" = "--status" ]; then
|
|
qipai_backup_status
|
|
fi
|