59 lines
1.6 KiB
Bash
Executable File
59 lines
1.6 KiB
Bash
Executable File
#!/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}"
|
||
|