146 lines
3.7 KiB
Bash
Executable File
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 |