백업 테이블 운영
This commit is contained in:
67
scripts/dump_and_import.sh
Normal file
67
scripts/dump_and_import.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
LOG_DIR="${USER_PROGRAM_IMPORT_LOG_DIR:-/app/log}"
|
||||
UPDATE_DIR="${USER_PROGRAM_UPDATE_DIR:-/app/update_data}"
|
||||
SCHEMA="${USER_PROGRAM_INFO_SCHEMA:-public}"
|
||||
CSV_DIR="${USER_PROGRAM_INFO_CSV_DIR:-/app/initial_data}"
|
||||
|
||||
MYSQL_HOST="${USER_PROGRAM_INFO_HOST:?USER_PROGRAM_INFO_HOST is required}"
|
||||
MYSQL_PORT="${USER_PROGRAM_INFO_PORT:-3306}"
|
||||
MYSQL_USER="${USER_PROGRAM_INFO_USERNAME:?USER_PROGRAM_INFO_USERNAME is required}"
|
||||
MYSQL_PASS="${USER_PROGRAM_INFO_PASSWORD:?USER_PROGRAM_INFO_PASSWORD is required}"
|
||||
MYSQL_DB="${USER_PROGRAM_INFO_DB:-user_program_info}"
|
||||
MYSQL_TABLE="${USER_PROGRAM_INFO_TABLE:-user_program_info}"
|
||||
|
||||
mkdir -p "${LOG_DIR}" "${UPDATE_DIR}"
|
||||
|
||||
# Target date: yesterday in KST unless USER_PROGRAM_TARGET_DATE=YYYY-MM-DD is provided.
|
||||
TARGET_DATE="${USER_PROGRAM_TARGET_DATE:-$(TZ=Asia/Seoul date -d 'yesterday' +%Y-%m-%d)}"
|
||||
TARGET_DATE_COMPACT="${TARGET_DATE//-/}"
|
||||
OUT_FILE="${UPDATE_DIR}/user_program_info_${TARGET_DATE_COMPACT}.csv"
|
||||
TMP_FILE="${OUT_FILE}.tmp"
|
||||
|
||||
QUERY=$(cat <<SQL
|
||||
SET time_zone = '+00:00';
|
||||
SELECT
|
||||
id,
|
||||
product_name,
|
||||
login_id,
|
||||
user_employee_id,
|
||||
login_version,
|
||||
login_public_ip,
|
||||
login_local_ip,
|
||||
user_company,
|
||||
user_department,
|
||||
user_position,
|
||||
user_login_time,
|
||||
created_at,
|
||||
user_family_flag
|
||||
FROM ${MYSQL_TABLE}
|
||||
WHERE DATE(CONVERT_TZ(created_at, '+00:00', '+09:00')) = '${TARGET_DATE}';
|
||||
SQL
|
||||
)
|
||||
|
||||
echo "[scheduler] dumping data for ${TARGET_DATE} to ${OUT_FILE}"
|
||||
|
||||
mysql --host="${MYSQL_HOST}" --port="${MYSQL_PORT}" --user="${MYSQL_USER}" --password="${MYSQL_PASS}" \
|
||||
--database="${MYSQL_DB}" --batch --raw --silent --skip-column-names -e "${QUERY}" \
|
||||
| python - <<'PY'
|
||||
import csv, sys, os
|
||||
out_path = os.environ["TMP_FILE"]
|
||||
writer = csv.writer(open(out_path, "w", newline=""))
|
||||
writer.writerow([
|
||||
"id","product_name","login_id","user_employee_id","login_version",
|
||||
"login_public_ip","login_local_ip","user_company","user_department",
|
||||
"user_position","user_login_time","created_at","user_family_flag",
|
||||
])
|
||||
for line in sys.stdin:
|
||||
row = line.rstrip("\n").split("\t")
|
||||
writer.writerow(row)
|
||||
PY
|
||||
|
||||
mv "${TMP_FILE}" "${OUT_FILE}"
|
||||
|
||||
echo "[scheduler] running import for ${OUT_FILE}"
|
||||
DATABASE_URL="${DATABASE_URL:?DATABASE_URL is required}" USER_PROGRAM_UPDATE_DIR="${UPDATE_DIR}" USER_PROGRAM_IMPORT_LOG_DIR="${LOG_DIR}" \
|
||||
user-program-import
|
||||
Reference in New Issue
Block a user