Files
WKVS/setup/database/init-db.php
T

92 lines
2.5 KiB
PHP

<?php
/**
* Master Database Setup & Initialization Script
* Runs user generation and SQL schema import automatically on Docker Compose initialization.
*/
echo "========================================\n";
echo " WKVS Database Automated Initializer \n";
echo "========================================\n\n";
$setupDir = __DIR__;
$baseDir = dirname(__DIR__, 2);
// 1. Run User Generation & Grant setup
echo "[1/3] Erstelle/Synchronisiere Datenbank-Benutzer...\n";
require_once $setupDir . '/generate-users.php';
$userResult = sync_and_create_db_users();
if (!$userResult['success']) {
echo "❌ Fehler bei Benutzererstellung: " . $userResult['message'] . "\n";
exit(1);
}
echo "✓ " . $userResult['message'] . "\n\n";
// 2. Generate SQL structure file with table prefix
echo "[2/3] Generiere SQL-Struktur & Tabellen-Prefix...\n";
require $setupDir . '/generate-sql.php';
echo "\n[3/3] Importiere Tabellen-Struktur in die Datenbank...\n";
$generatedSqlFile = $setupDir . '/sql-database.sql';
if (!file_exists($generatedSqlFile)) {
echo "❌ Fehler: '$generatedSqlFile' wurde nicht gefunden.\n";
exit(1);
}
// Connect to MariaDB to import SQL schema
$dbEnvFile = $baseDir . '/config/.env.db';
$dbEnv = parse_env_file_simple($dbEnvFile);
$rootPass = $dbEnv['MYSQL_ROOT_PASSWORD'] ?? '';
$dbName = $dbEnv['MYSQL_DATABASE'] ?? 'devdb_';
$dbHost = getenv('DB_HOST') ?: ($dbEnv['DB_HOST'] ?? 'mariadb');
$dbPort = (int)($dbEnv['DB_PORT'] ?? 3306);
$mysqli = null;
foreach ([$dbHost, 'mariadb', '127.0.0.1', 'localhost'] as $tryHost) {
try {
$conn = @new mysqli($tryHost, 'root', $rootPass, $dbName, $dbPort);
if (!$conn->connect_error) {
$mysqli = $conn;
break;
}
} catch (Throwable $e) {
continue;
}
}
if (!$mysqli) {
echo "❌ Fehler: Konnte keine Verbindung als 'root' zu MariaDB herstellen.\n";
exit(1);
}
$sqlContent = file_get_contents($generatedSqlFile);
if ($mysqli->multi_query($sqlContent)) {
do {
if ($res = $mysqli->store_result()) {
$res->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
if ($mysqli->errno) {
echo "❌ SQL Import-Fehler: " . $mysqli->error . "\n";
exit(1);
}
echo "✓ Datenbank-Struktur erfolgreich importiert!\n\n";
} else {
echo "❌ SQL Import-Fehler: " . $mysqli->error . "\n";
exit(1);
}
$mysqli->close();
echo "========================================\n";
echo "✅ Datenbank-Initialisierung abgeschlossen!\n";
echo "========================================\n";