Files
17sep01/sureops/init-db.sh
T
2026-09-17 07:14:32 +00:00

146 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
set -e
# ========================================
# MySQL Configuration
# ========================================
MYSQL_USER="root"
MYSQL_PASS="Root@1234"
# DB_NAME is passed in from entrypoint.sh (per-project, unique).
# Fallback below only used if script is run standalone.
DB_NAME="${DB_NAME:-<PRJ_DB_NAME>}"
SQL_DIR="${SQL_DIR:-/opt/database}"
echo "========================================"
echo " Database Initialization"
echo "========================================"
echo "Database : ${DB_NAME}"
echo "SQL Dir : ${SQL_DIR}"
echo "========================================"
# ========================================
# Create Database
# ========================================
echo "Creating database if not exists..."
mysql \
-u"${MYSQL_USER}" \
-p"${MYSQL_PASS}" \
-e "CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\`;"
echo "Database ready."
# ========================================
# Check Existing Tables
# ========================================
echo "Checking database initialization..."
TABLE_COUNT=$(
mysql \
-u"${MYSQL_USER}" \
-p"${MYSQL_PASS}" \
-N -s \
-e "SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema='${DB_NAME}';"
)
echo "Existing tables: ${TABLE_COUNT}"
# ========================================
# Initialize Database
# ========================================
if [ "${TABLE_COUNT}" -eq 0 ]; then
echo "Fresh database detected."
echo "Searching SQL files in ${SQL_DIR}..."
# ------------------------------------
# Import SQL files in FIXED order:
# schema.sql (structure) MUST run before
# data.sql (inserts), otherwise inserts
# fail with "table doesn't exist".
# ------------------------------------
if [ -d "${SQL_DIR}" ]; then
ORDERED_FILES=("schema.sql" "data.sql")
IMPORTED_ANY=false
for FILE_NAME in "${ORDERED_FILES[@]}"; do
SQL_FILE="${SQL_DIR}/${FILE_NAME}"
if [ -f "${SQL_FILE}" ]; then
echo "----------------------------------------"
echo "Importing: ${SQL_FILE}"
echo "----------------------------------------"
mysql \
-u"${MYSQL_USER}" \
-p"${MYSQL_PASS}" \
"${DB_NAME}" < "${SQL_FILE}"
echo "Imported successfully: ${SQL_FILE}"
IMPORTED_ANY=true
else
echo "Not found, skipping: ${SQL_FILE}"
fi
done
# Import any other .sql files not in the fixed list
OTHER_FILES=$(find "${SQL_DIR}" -maxdepth 1 -type f -name "*.sql" \
! -name "schema.sql" ! -name "data.sql" | sort)
for SQL_FILE in ${OTHER_FILES}; do
echo "----------------------------------------"
echo "Importing (extra): ${SQL_FILE}"
echo "----------------------------------------"
mysql \
-u"${MYSQL_USER}" \
-p"${MYSQL_PASS}" \
"${DB_NAME}" < "${SQL_FILE}"
echo "Imported successfully: ${SQL_FILE}"
IMPORTED_ANY=true
done
if [ "${IMPORTED_ANY}" = false ]; then
echo "No SQL files found."
fi
else
echo "WARNING: SQL directory does not exist:"
echo "${SQL_DIR}"
fi
echo "========================================"
echo " Database initialization completed."
echo "========================================"
else
echo "========================================"
echo " Database already initialized."
echo " Skipping SQL import."
echo "========================================"
fi