Files
wx_service/scripts/ops/restore_mysql.sh
T
2026-02-28 16:39:53 +08:00

59 lines
1.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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}"