#!/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:-}" 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