新增MySQL备份恢复脚本并完成演练

This commit is contained in:
hello-dd-code
2026-02-28 16:39:53 +08:00
parent 5666dc61a0
commit 016c47ba75
4 changed files with 180 additions and 0 deletions
+58
View File
@@ -0,0 +1,58 @@
#!/usr/bin/env bash
set -euo pipefail
# 用法:
# CONFIRM_RESTORE=1 ./scripts/ops/restore_mysql.sh /path/to/backup.sql.gz
#
# 支持两种模式:
# 1) 本机 mysql 客户端
# 2) MYSQL_CONTAINER=<container_name>(在容器内执行 mysql
if [[ "${CONFIRM_RESTORE:-0}" != "1" ]]; then
echo "restore blocked: set CONFIRM_RESTORE=1 to continue" >&2
exit 1
fi
if [[ $# -lt 1 ]]; then
echo "usage: $0 <backup.sql|backup.sql.gz>" >&2
exit 1
fi
backup_file="$1"
if [[ ! -f "${backup_file}" ]]; then
echo "backup file not found: ${backup_file}" >&2
exit 1
fi
MYSQL_HOST="${MYSQL_HOST:-127.0.0.1}"
MYSQL_PORT="${MYSQL_PORT:-3306}"
MYSQL_USER="${MYSQL_USER:-root}"
MYSQL_PASSWORD="${MYSQL_PASSWORD:-}"
MYSQL_DATABASE="${MYSQL_DATABASE:-wx_service}"
MYSQL_CONTAINER="${MYSQL_CONTAINER:-}"
run_mysql() {
if [[ -n "${MYSQL_CONTAINER}" ]]; then
if [[ -n "${MYSQL_PASSWORD}" ]]; then
docker exec -i "${MYSQL_CONTAINER}" mysql -h127.0.0.1 -P"${MYSQL_PORT}" -u"${MYSQL_USER}" "-p${MYSQL_PASSWORD}" "${MYSQL_DATABASE}"
else
docker exec -i "${MYSQL_CONTAINER}" mysql -h127.0.0.1 -P"${MYSQL_PORT}" -u"${MYSQL_USER}" "${MYSQL_DATABASE}"
fi
return
fi
if [[ -n "${MYSQL_PASSWORD}" ]]; then
mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"${MYSQL_USER}" "-p${MYSQL_PASSWORD}" "${MYSQL_DATABASE}"
else
mysql -h"${MYSQL_HOST}" -P"${MYSQL_PORT}" -u"${MYSQL_USER}" "${MYSQL_DATABASE}"
fi
}
if [[ "${backup_file}" == *.gz ]]; then
zcat "${backup_file}" | run_mysql
else
cat "${backup_file}" | run_mysql
fi
echo "restore completed: ${backup_file}"