#!/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=(在容器内执行 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 " >&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}"