diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..5e30b3b --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# PostgreSQL Configuration +PGSQL_HOST=localhost +PGSQL_PORT=5432 +PGSQL_DBNAME= +PGSQL_USER= +PGSQL_PASSWORD= + +# MariaDB Configuration +MARIADB_HOST=localhost +MARIADB_PORT=3306 +MARIADB_DBNAME= +MARIADB_USER= +MARIADB_PASSWORD= + +# Other Configurations +TABLE_ENGINE=InnoDB +BATCH_SIZE=100 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f5cb468 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.log +*.sql +*.sql.gz +.env \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ab55dbf --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 PixoVoid.net + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9789bfe --- /dev/null +++ b/README.md @@ -0,0 +1,81 @@ +# PostgreSQL to MariaDB Migration Script + +This PHP script helps migrate data from a PostgreSQL database to a MariaDB database. It handles the creation of tables in MariaDB based on PostgreSQL schemas and efficiently transfers data using batch processing to optimize performance. + +## ⚠️ Warning + +**This script is currently under development. Use at your own risk.** + +The author **assumes no liability for any damages or data loss** caused by the use of this script. Before running this migration, make sure to create proper backups of your databases. + +**Please read this entire README.md carefully before proceeding with the migration.** + +## 🛠️ Requirements + +- PHP 8.3 or higher +- PostgreSQL and MariaDB databases +- Database credentials with sufficient access +- A `.env` file to store configuration (see example below) + +## 📝 Features + +- Migrates PostgreSQL tables to MariaDB. +- Automatically converts data types from PostgreSQL to MariaDB. +- Uses batch processing to improve performance during data transfer. +- Supports configurable table engines (e.g., InnoDB). +- Logs progress and errors to a migration log file (`migration_log.txt`). + +## 🔧 Installation & Setup + +1. **Clone the repository:** + + ```bash + git clone https://github.com/PixoVoid-net/pgsql-mariadb-migrate + cd pgsql-mariadb-migrate + ``` + +2. **Configure environment variables:** + + Create a `.env` file in the root directory with the following content, adjusting for your environment: + + ```plaintext + # PostgreSQL Configuration + PGSQL_HOST=your_pgsql_host + PGSQL_PORT=5432 + PGSQL_DBNAME=your_pgsql_dbname + PGSQL_USER=your_pgsql_user + PGSQL_PASSWORD=your_pgsql_password + + # MariaDB Configuration + MARIADB_HOST=your_mariadb_host + MARIADB_PORT=3306 + MARIADB_DBNAME=your_mariadb_dbname + MARIADB_USER=your_mariadb_user + MARIADB_PASSWORD=your_mariadb_password + + # Optional: Table Engine (e.g., InnoDB, MyISAM) + TABLE_ENGINE=InnoDB + ``` + +3. **Run the migration script:** + + Execute the following command to start the migration process: + + ```bash + php migration.php + ``` + + The script will display a warning message about usage at your own risk, and you will need to confirm by pressing Enter to proceed. + +## 🏗️ How it Works + +- **Step 1:** The script connects to both PostgreSQL and MariaDB using the credentials provided in the `.env` file. +- **Step 2:** It checks for all available tables in the PostgreSQL database. +- **Step 3:** For each table, it creates an equivalent table in MariaDB with the appropriate data types. +- **Step 4:** The script transfers the data from PostgreSQL to MariaDB in batches for efficiency. +- **Step 5:** Logs are generated for each operation, including success and failure messages. + +## 📜 License + +This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details. + diff --git a/migrate.php b/migrate.php new file mode 100644 index 0000000..5d7cfeb --- /dev/null +++ b/migrate.php @@ -0,0 +1,309 @@ +#!/usr/bin/php + 'INT', + 'integer' => 'INT', + 'bigint' => 'BIGINT', + 'boolean' => 'TINYINT(1)', + 'character varying' => 'VARCHAR(255)', + 'text' => 'TEXT', + 'timestamp without time zone' => 'DATETIME', + 'date' => 'DATE', + 'numeric' => 'DECIMAL(20,6)', +]; + +const BATCH_SIZE = 100; // Batch-Größe für Inserts +const DEFAULT_ENGINE = 'InnoDB'; +const CHARSET = 'utf8mb4'; + +// Farben für die Konsolenausgabe +const COLORS = [ + 'green' => "\033[32m", + 'red' => "\033[31m", + 'yellow' => "\033[33m", + 'reset' => "\033[0m", +]; + +/** + * Log a message to the log file. + */ +function logMessage(string $message, string $level = 'INFO'): void +{ + file_put_contents(LOG_FILE, date('Y-m-d H:i:s') . " - [$level] $message" . PHP_EOL, FILE_APPEND); +} + +/** + * Load environment variables from a .env file. + */ +function loadEnv(string $filePath): void +{ + if (!file_exists($filePath)) { + logMessage('Missing .env file.', 'ERROR'); + exit('ERROR: Missing .env file.'); + } + + $lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); + foreach ($lines as $line) { + $line = trim($line); + if ($line === '' || $line[0] === '#') { + continue; + } + [$key, $value] = explode('=', $line, 2); + putenv("$key=$value"); + } +} + +/** + * Output a message with color. + */ +function colorizeOutput(string $message, string $color): void +{ + echo COLORS[$color] . $message . COLORS['reset'] . "\n"; +} + +/** + * Create a PDO connection. + */ +function createPDOConnection(string $dsn, string $user, string $password): PDO +{ + try { + return new PDO($dsn, $user, $password, [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4', // For MariaDB + PDO::ATTR_PERSISTENT => true, + ]); + } catch (PDOException $e) { + logMessage('Database connection failed: ' . $e->getMessage(), 'ERROR'); + colorizeOutput('ERROR: Unable to connect to one of the databases.', 'red'); + exit("ERROR: Unable to connect to one of the databases.\n"); + } +} + +/** + * Main execution function. + */ +function main(): void +{ + loadEnv(__DIR__ . '/.env'); + + $pgsqlConfig = [ + 'dsn' => sprintf( + 'pgsql:host=%s;port=%s;dbname=%s', + getenv('PGSQL_HOST') ?: 'localhost', + getenv('PGSQL_PORT') ?: '5432', + getenv('PGSQL_DBNAME') ?: 'your_dbname' + ), + 'user' => getenv('PGSQL_USER') ?: 'your_user', + 'password' => getenv('PGSQL_PASSWORD') ?: 'your_password', + ]; + + $mariadbConfig = [ + 'dsn' => sprintf( + 'mysql:host=%s;port=%s;dbname=%s', + getenv('MARIADB_HOST') ?: 'localhost', + getenv('MARIADB_PORT') ?: '3306', + getenv('MARIADB_DBNAME') ?: 'your_dbname' + ), + 'user' => getenv('MARIADB_USER') ?: 'your_user', + 'password' => getenv('MARIADB_PASSWORD') ?: 'your_password', + ]; + + $pgsql = createPDOConnection($pgsqlConfig['dsn'], $pgsqlConfig['user'], $pgsqlConfig['password']); + $mariadb = createPDOConnection($mariadbConfig['dsn'], $mariadbConfig['user'], $mariadbConfig['password']); + + colorizeOutput("### Starting Database Migration ###", 'yellow'); + migrateDatabase($pgsql, $mariadb, getenv('TABLE_ENGINE') ?: DEFAULT_ENGINE); + colorizeOutput("\nMigration completed successfully!", 'green'); +} + +/** + * Migrate tables and data from PostgreSQL to MariaDB. + */ +function migrateDatabase(PDO $pgsql, PDO $mariadb, string $tableEngine): void +{ + $tables = $pgsql->query( + "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'" + )->fetchAll(PDO::FETCH_COLUMN); + + if (!$tables) { + logMessage('No tables found in the PostgreSQL database.', 'WARNING'); + colorizeOutput('No tables found in the PostgreSQL database.', 'yellow'); + return; + } + + $totalTables = count($tables); + foreach ($tables as $index => $tableName) { + echo sprintf("[%d/%d] Migrating table: %s\n", $index + 1, $totalTables, $tableName); + + $pgsqlColumns = fetchTableColumns($pgsql, $tableName); + if (!$pgsqlColumns) { + logMessage("No columns found for table `$tableName`. Skipping.", 'WARNING'); + echo " No columns found for table `$tableName`. Skipping.\n"; + continue; + } + + createMariaDBTable($mariadb, $tableName, $pgsqlColumns, $tableEngine); + transferTableData($pgsql, $mariadb, $tableName, $pgsqlColumns); + } +} + +/** + * Fetch columns from a PostgreSQL table. + */ +function fetchTableColumns(PDO $pdo, string $tableName): array +{ + $stmt = $pdo->prepare( + 'SELECT column_name, data_type, is_nullable, column_default, ordinal_position, + CASE + WHEN column_default LIKE \'nextval(%::regclass)\' THEN 1 + ELSE 0 + END as is_auto_increment + FROM information_schema.columns + WHERE table_name = :table_name' + ); + $stmt->execute(['table_name' => $tableName]); + + return $stmt->fetchAll(PDO::FETCH_ASSOC); +} + +/** + * Create a MariaDB table based on PostgreSQL schema. + */ +function createMariaDBTable(PDO $mariadb, string $tableName, array $columns, string $tableEngine): void +{ + $columnsSql = []; + $primaryKey = null; + + foreach ($columns as $col) { + $type = PGSQL_TO_MARIADB_TYPES[$col['data_type']] ?? 'TEXT'; + $nullable = $col['is_nullable'] === 'YES' ? 'NULL' : 'NOT NULL'; + $autoIncrement = ($col['is_auto_increment'] == 1) ? 'AUTO_INCREMENT' : ''; + + if ($autoIncrement && !$primaryKey) { + $primaryKey = $col['column_name']; + $columnsSql[] = sprintf('`%s` %s %s %s PRIMARY KEY', $col['column_name'], $type, $nullable, $autoIncrement); + } else { + $columnsSql[] = sprintf('`%s` %s %s %s', $col['column_name'], $type, $nullable, $autoIncrement); + } + } + + if (!$primaryKey) { + $primaryKey = $columns[0]['column_name']; + } + + $sql = sprintf( + 'CREATE TABLE IF NOT EXISTS `%s` (%s) ENGINE=%s DEFAULT CHARSET=%s', + $tableName, + implode(', ', $columnsSql), + $tableEngine, + CHARSET + ); + + try { + $mariadb->exec($sql); + logMessage("Created table `$tableName`.", 'INFO'); + } catch (PDOException $e) { + logMessage("Error creating table `$tableName`: " . $e->getMessage(), 'ERROR'); + echo "Error creating table `$tableName`: " . $e->getMessage() . "\n"; + } +} + +/** + * Sanitize row data before inserting it into MariaDB. + */ +function sanitizeRow(array &$row, array $columns): void +{ + foreach ($columns as $col) { + $colName = $col['column_name']; + $dataType = $col['data_type']; + $isNullable = $col['is_nullable'] === 'YES'; + + // Handle empty strings and NULL values + if (!isset($row[$colName]) || $row[$colName] === '') { + if (!$isNullable) { + // Default values for NOT NULL columns + if (in_array($dataType, ['integer', 'bigint', 'smallint', 'numeric'], true)) { + $row[$colName] = 0; // Default for numeric types + } elseif ($dataType === 'boolean') { + $row[$colName] = 0; // Default for boolean types + } else { + $row[$colName] = ''; // Default for text types + } + } else { + $row[$colName] = null; // Allow NULL for nullable columns + } + } + + // Boolean sanitization: map values to 0/1 + if ($dataType === 'boolean') { + $row[$colName] = filter_var($row[$colName], FILTER_VALIDATE_BOOLEAN) ? 1 : 0; + } + } +} + +/** + * Transfer data from PostgreSQL to MariaDB using batch inserts for performance. + */ +function transferTableData(PDO $pgsql, PDO $mariadb, string $tableName, array $columns): void +{ + $columnNames = array_column($columns, 'column_name'); + $columnPlaceholders = implode(',', array_fill(0, count($columnNames), '?')); + $columnsSql = implode('`,`', $columnNames); // MariaDB format with backticks + + // Für PostgreSQL benötigen wir doppelte Anführungszeichen für Spaltennamen + $pgsqlColumnsSql = implode('","', $columnNames); // PostgreSQL format with double quotes + + $selectStmt = $pgsql->prepare("SELECT \"$pgsqlColumnsSql\" FROM \"$tableName\""); + + $selectStmt->execute(); + + $batch = []; + while ($row = $selectStmt->fetch(PDO::FETCH_ASSOC)) { + sanitizeRow($row, $columns); + $batch[] = array_values($row); + + if (count($batch) >= BATCH_SIZE) { + $insertStmt = $mariadb->prepare( + "INSERT INTO `$tableName` (`$columnsSql`) VALUES ($columnPlaceholders)" + ); + foreach ($batch as $data) { + $insertStmt->execute($data); + } + $batch = []; // Reset batch + } + } + + // Insert remaining rows if any + if ($batch) { + $insertStmt = $mariadb->prepare( + "INSERT INTO `$tableName` (`$columnsSql`) VALUES ($columnPlaceholders)" + ); + foreach ($batch as $data) { + $insertStmt->execute($data); + } + } + + logMessage("Data transferred for table `$tableName`.", 'INFO'); +} + +main(); diff --git a/migration_log.txt b/migration_log.txt new file mode 100644 index 0000000..d7333ca --- /dev/null +++ b/migration_log.txt @@ -0,0 +1,211 @@ +2024-12-03 12:05:30 - [INFO] Created table `stu_alliance_boards`. +2024-12-03 12:05:30 - [INFO] Data transferred for table `stu_alliance_boards`. +2024-12-03 12:05:30 - [INFO] Created table `stu_basic_trade`. +2024-12-03 12:05:30 - [INFO] Data transferred for table `stu_basic_trade`. +2024-12-03 12:05:30 - [INFO] Created table `stu_alliances_relations`. +2024-12-03 12:05:30 - [INFO] Data transferred for table `stu_alliances_relations`. +2024-12-03 12:05:31 - [INFO] Created table `stu_astro_entry`. +2024-12-03 12:05:31 - [INFO] Data transferred for table `stu_astro_entry`. +2024-12-03 12:05:31 - [INFO] Created table `stu_blocked_user`. +2024-12-03 12:05:31 - [INFO] Data transferred for table `stu_blocked_user`. +2024-12-03 12:05:31 - [INFO] Created table `stu_buildings`. +2024-12-03 12:05:33 - [INFO] Data transferred for table `stu_buildings`. +2024-12-03 12:05:33 - [INFO] Created table `stu_alliance_topics`. +2024-12-03 12:05:33 - [INFO] Data transferred for table `stu_alliance_topics`. +2024-12-03 12:05:33 - [INFO] Created table `stu_alliances_jobs`. +2024-12-03 12:05:33 - [INFO] Data transferred for table `stu_alliances_jobs`. +2024-12-03 12:05:33 - [INFO] Created table `stu_buildings_commodity`. +2024-12-03 12:05:37 - [INFO] Data transferred for table `stu_buildings_commodity`. +2024-12-03 12:05:37 - [INFO] Created table `stu_award`. +2024-12-03 12:05:37 - [INFO] Data transferred for table `stu_award`. +2024-12-03 12:05:37 - [INFO] Created table `stu_anomaly_type`. +2024-12-03 12:05:37 - [INFO] Data transferred for table `stu_anomaly_type`. +2024-12-03 12:05:37 - [INFO] Created table `stu_anomaly`. +2024-12-03 12:05:37 - [INFO] Data transferred for table `stu_anomaly`. +2024-12-03 12:05:37 - [INFO] Created table `stu_buildings_cost`. +2024-12-03 12:05:44 - [INFO] Data transferred for table `stu_buildings_cost`. +2024-12-03 12:05:44 - [INFO] Created table `stu_buildings_field_alternative`. +2024-12-03 12:05:57 - [INFO] Data transferred for table `stu_buildings_field_alternative`. +2024-12-03 12:05:57 - [INFO] Created table `stu_buildings_functions`. +2024-12-03 12:05:57 - [INFO] Data transferred for table `stu_buildings_functions`. +2024-12-03 12:05:57 - [INFO] Created table `stu_auction_bid`. +2024-12-03 12:05:57 - [INFO] Data transferred for table `stu_auction_bid`. +2024-12-03 12:05:57 - [INFO] Created table `stu_buildplans_hangar`. +2024-12-03 12:05:57 - [INFO] Data transferred for table `stu_buildplans_hangar`. +2024-12-03 12:05:57 - [INFO] Created table `stu_buildings_upgrades_cost`. +2024-12-03 12:05:58 - [INFO] Data transferred for table `stu_buildings_upgrades_cost`. +2024-12-03 12:05:58 - [INFO] Created table `stu_buildplans`. +2024-12-03 12:05:59 - [INFO] Data transferred for table `stu_buildplans`. +2024-12-03 12:05:59 - [INFO] Created table `stu_buildplans_modules`. +2024-12-03 12:06:00 - [INFO] Data transferred for table `stu_buildplans_modules`. +2024-12-03 12:06:00 - [INFO] Created table `stu_buoy`. +2024-12-03 12:06:00 - [INFO] Data transferred for table `stu_buoy`. +2024-12-03 12:06:00 - [INFO] Created table `stu_colonies_fielddata`. +2024-12-03 12:06:00 - [INFO] Data transferred for table `stu_colonies_fielddata`. +2024-12-03 12:06:00 - [INFO] Created table `stu_colonies_classes`. +2024-12-03 12:06:00 - [INFO] Data transferred for table `stu_colonies_classes`. +2024-12-03 12:06:00 - [INFO] Created table `stu_colony_fieldtype`. +2024-12-03 12:06:01 - [INFO] Data transferred for table `stu_colony_fieldtype`. +2024-12-03 12:06:01 - [INFO] Created table `stu_colonies_terraforming`. +2024-12-03 12:06:01 - [INFO] Data transferred for table `stu_colonies_terraforming`. +2024-12-03 12:06:01 - [INFO] Created table `stu_crew_assign`. +2024-12-03 12:06:01 - [INFO] Data transferred for table `stu_crew_assign`. +2024-12-03 12:06:01 - [INFO] Created table `stu_commodity`. +2024-12-03 12:06:01 - [INFO] Data transferred for table `stu_commodity`. +2024-12-03 12:06:01 - [INFO] Created table `stu_crew`. +2024-12-03 12:06:01 - [INFO] Data transferred for table `stu_crew`. +2024-12-03 12:06:01 - [INFO] Created table `stu_colony_scan`. +2024-12-03 12:06:01 - [INFO] Data transferred for table `stu_colony_scan`. +2024-12-03 12:06:02 - [INFO] Created table `stu_contactlist`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_contactlist`. +2024-12-03 12:06:02 - [INFO] Created table `stu_construction_progress`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_construction_progress`. +2024-12-03 12:06:02 - [INFO] Created table `stu_colony_sandbox`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_colony_sandbox`. +2024-12-03 12:06:02 - [INFO] Created table `stu_colony_deposit_mining`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_colony_deposit_mining`. +2024-12-03 12:06:02 - [INFO] Created table `stu_colonies_shipqueue`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_colonies_shipqueue`. +2024-12-03 12:06:02 - [INFO] Created table `stu_colony_class_deposit`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_colony_class_deposit`. +2024-12-03 12:06:02 - [INFO] Created table `stu_colonies_shiprepair`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_colonies_shiprepair`. +2024-12-03 12:06:02 - [INFO] Created table `stu_database_user`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_database_user`. +2024-12-03 12:06:02 - [INFO] Created table `stu_deals`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_deals`. +2024-12-03 12:06:02 - [INFO] Created table `stu_crew_race`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_crew_race`. +2024-12-03 12:06:02 - [INFO] Created table `stu_game_config`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_game_config`. +2024-12-03 12:06:02 - [INFO] Created table `stu_fleets`. +2024-12-03 12:06:02 - [INFO] Data transferred for table `stu_fleets`. +2024-12-03 12:06:02 - [INFO] Created table `stu_field_build`. +2024-12-03 12:06:31 - [INFO] Data transferred for table `stu_field_build`. +2024-12-03 12:06:31 - [INFO] Created table `stu_database_entrys`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_database_entrys`. +2024-12-03 12:06:32 - [INFO] Created table `stu_database_categories`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_database_categories`. +2024-12-03 12:06:32 - [INFO] Created table `stu_database_types`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_database_types`. +2024-12-03 12:06:32 - [INFO] Created table `stu_flight_sig`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_flight_sig`. +2024-12-03 12:06:32 - [INFO] Created table `stu_crew_training`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_crew_training`. +2024-12-03 12:06:32 - [INFO] Created table `stu_dockingrights`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_dockingrights`. +2024-12-03 12:06:32 - [INFO] Created table `stu_game_request`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_game_request`. +2024-12-03 12:06:32 - [INFO] Created table `stu_history`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_history`. +2024-12-03 12:06:32 - [INFO] Created table `stu_ignorelist`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_ignorelist`. +2024-12-03 12:06:32 - [INFO] Created table `stu_game_turns`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_game_turns`. +2024-12-03 12:06:32 - [INFO] Created table `stu_lottery_ticket`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_lottery_ticket`. +2024-12-03 12:06:32 - [INFO] Created table `stu_kn_plot_application`. +2024-12-03 12:06:32 - [INFO] Data transferred for table `stu_kn_plot_application`. +2024-12-03 12:06:32 - [INFO] Created table `stu_modules`. +2024-12-03 12:06:33 - [INFO] Data transferred for table `stu_modules`. +2024-12-03 12:06:33 - [INFO] Created table `stu_layer`. +2024-12-03 12:06:33 - [INFO] Data transferred for table `stu_layer`. +2024-12-03 12:06:33 - [INFO] Created table `stu_map_regions_settlement`. +2024-12-03 12:06:33 - [INFO] Data transferred for table `stu_map_regions_settlement`. +2024-12-03 12:06:33 - [INFO] Created table `stu_map_ftypes`. +2024-12-03 12:06:55 - [INFO] Data transferred for table `stu_map_ftypes`. +2024-12-03 12:06:55 - [INFO] Created table `stu_map_regions`. +2024-12-03 12:06:55 - [INFO] Data transferred for table `stu_map_regions`. +2024-12-03 12:06:55 - [INFO] Created table `stu_map_bordertypes`. +2024-12-03 12:06:55 - [INFO] Data transferred for table `stu_map_bordertypes`. +2024-12-03 12:06:55 - [INFO] Created table `stu_kn`. +2024-12-03 12:06:55 - [INFO] Data transferred for table `stu_kn`. +2024-12-03 12:06:55 - [INFO] Created table `stu_kn_archiv`. +2024-12-03 12:06:57 - [INFO] Data transferred for table `stu_kn_archiv`. +2024-12-03 12:06:57 - [INFO] Created table `stu_mass_center_type`. +2024-12-03 12:06:57 - [INFO] Data transferred for table `stu_mass_center_type`. +2024-12-03 12:06:57 - [INFO] Created table `stu_modules_buildingfunction`. +2024-12-03 12:06:57 - [INFO] Data transferred for table `stu_modules_buildingfunction`. +2024-12-03 12:06:57 - [INFO] Created table `stu_modules_cost`. +2024-12-03 12:06:59 - [INFO] Data transferred for table `stu_modules_cost`. +2024-12-03 12:06:59 - [INFO] Created table `stu_kn_characters`. +2024-12-03 12:06:59 - [INFO] Data transferred for table `stu_kn_characters`. +2024-12-03 12:06:59 - [INFO] Created table `stu_modules_queue`. +2024-12-03 12:06:59 - [INFO] Data transferred for table `stu_modules_queue`. +2024-12-03 12:06:59 - [INFO] Created table `stu_kn_comments`. +2024-12-03 12:06:59 - [INFO] Data transferred for table `stu_kn_comments`. +2024-12-03 12:06:59 - [INFO] Created table `stu_names`. +2024-12-03 12:07:02 - [INFO] Data transferred for table `stu_names`. +2024-12-03 12:07:02 - [INFO] Created table `stu_news`. +2024-12-03 12:07:02 - [INFO] Data transferred for table `stu_news`. +2024-12-03 12:07:02 - [INFO] Created table `stu_plots_members`. +2024-12-03 12:07:02 - [INFO] Data transferred for table `stu_plots_members`. +2024-12-03 12:07:02 - [INFO] Created table `stu_npc_log`. +2024-12-03 12:07:02 - [INFO] Data transferred for table `stu_npc_log`. +2024-12-03 12:07:02 - [INFO] Created table `stu_opened_advent_door`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_opened_advent_door`. +2024-12-03 12:07:05 - [INFO] Created table `stu_partnersite`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_partnersite`. +2024-12-03 12:07:05 - [INFO] Created table `stu_planets_commodity`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_planets_commodity`. +2024-12-03 12:07:05 - [INFO] Created table `stu_pm_cats`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_pm_cats`. +2024-12-03 12:07:05 - [INFO] Created table `stu_planet_type_research`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_planet_type_research`. +2024-12-03 12:07:05 - [INFO] Created table `stu_plots`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_plots`. +2024-12-03 12:07:05 - [INFO] Created table `stu_plots_archiv`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_plots_archiv`. +2024-12-03 12:07:05 - [INFO] Created table `stu_notes`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_notes`. +2024-12-03 12:07:05 - [INFO] Created table `stu_pirate_wrath`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_pirate_wrath`. +2024-12-03 12:07:05 - [INFO] Created table `stu_pirate_setup_buildplan`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_pirate_setup_buildplan`. +2024-12-03 12:07:05 - [INFO] Created table `stu_pirate_setup`. +2024-12-03 12:07:05 - [INFO] Data transferred for table `stu_pirate_setup`. +2024-12-03 12:07:05 - [INFO] Created table `stu_modules_specials`. +2024-12-03 12:07:06 - [INFO] Data transferred for table `stu_modules_specials`. +2024-12-03 12:07:06 - [INFO] Created table `stu_plots_members_archiv`. +2024-12-03 12:07:06 - [INFO] Data transferred for table `stu_plots_members_archiv`. +2024-12-03 12:07:06 - [INFO] Created table `stu_prestige_log`. +2024-12-03 12:07:06 - [INFO] Data transferred for table `stu_prestige_log`. +2024-12-03 12:07:06 - [INFO] Created table `stu_session_strings`. +2024-12-03 12:07:06 - [INFO] Data transferred for table `stu_session_strings`. +2024-12-03 12:07:06 - [INFO] Created table `stu_rumps_buildingfunction`. +2024-12-03 12:07:06 - [INFO] Data transferred for table `stu_rumps_buildingfunction`. +2024-12-03 12:07:06 - [INFO] Created table `stu_rumps_colonize_building`. +2024-12-03 12:07:06 - [INFO] Data transferred for table `stu_rumps_colonize_building`. +2024-12-03 12:07:06 - [INFO] Created table `stu_rumps_module_level`. +2024-12-03 12:07:06 - [INFO] Data transferred for table `stu_rumps_module_level`. +2024-12-03 12:07:06 - [INFO] Created table `stu_rumps_module_special`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_rumps_module_special`. +2024-12-03 12:07:07 - [INFO] Created table `stu_rump_costs`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_rump_costs`. +2024-12-03 12:07:07 - [INFO] Created table `stu_rumps`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_rumps`. +2024-12-03 12:07:07 - [INFO] Created table `stu_rumps_user`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_rumps_user`. +2024-12-03 12:07:07 - [INFO] Created table `stu_repair_task`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_repair_task`. +2024-12-03 12:07:07 - [INFO] Created table `stu_rumps_categories`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_rumps_categories`. +2024-12-03 12:07:07 - [INFO] Created table `stu_rumps_roles`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_rumps_roles`. +2024-12-03 12:07:07 - [INFO] Created table `stu_rumps_specials`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_rumps_specials`. +2024-12-03 12:07:07 - [INFO] Created table `stu_pms`. +2024-12-03 12:07:07 - [INFO] Data transferred for table `stu_pms`. +2024-12-03 12:07:07 - [INFO] Created table `stu_research`. +2024-12-03 12:07:09 - [INFO] Data transferred for table `stu_research`. +2024-12-03 12:07:09 - [INFO] Created table `stu_progress_module`. +2024-12-03 12:07:09 - [INFO] Data transferred for table `stu_progress_module`. +2024-12-03 12:07:09 - [INFO] Created table `stu_research_dependencies`. +2024-12-03 12:07:12 - [INFO] Data transferred for table `stu_research_dependencies`. +2024-12-03 12:07:12 - [INFO] Created table `stu_researched`. +2024-12-03 12:07:12 - [INFO] Data transferred for table `stu_researched`. +2024-12-03 12:07:12 - [INFO] Created table `stu_rumps_cat_role_crew`. +2024-12-03 12:07:12 - [INFO] Data transferred for table `stu_rumps_cat_role_crew`. +2024-12-03 12:07:12 - [INFO] Created table `stu_ship_system`. +2024-12-03 12:07:12 - [INFO] Data transferred for table `stu_ship_system`. +2024-12-03 12:07:12 - [INFO] Created table `stu_sys_map`.