# MySQL Datenbank Setup für TimeClock ## 1. MySQL Installation prüfen ```bash # MySQL Version prüfen mysql --version # Falls nicht installiert (openSUSE): sudo zypper install mysql mysql-server # MySQL-Server starten sudo systemctl start mysql sudo systemctl enable mysql ``` ## 2. MySQL Root-Passwort setzen (falls nötig) ```bash # MySQL Secure Installation ausführen sudo mysql_secure_installation # Folgende Fragen beantworten: # - Set root password? [Y/n] Y # - Remove anonymous users? [Y/n] Y # - Disallow root login remotely? [Y/n] Y # - Remove test database? [Y/n] Y # - Reload privilege tables? [Y/n] Y ``` ## 3. Datenbank und Benutzer erstellen ### Option A: Automatisches Setup-Script ```bash cd /home/torsten/Programs/TimeClock/backend chmod +x setup-mysql.sh ./setup-mysql.sh ``` Das Script fragt nach: - MySQL Root-Passwort - Neuem Datenbank-Benutzer (Standard: timeclock_user) - Neuem Benutzer-Passwort ### Option B: Manuelles Setup ```bash # MySQL als root einloggen mysql -u root -p ``` Dann in der MySQL-Konsole: ```sql -- 1. Datenbank erstellen CREATE DATABASE IF NOT EXISTS stechuhr2 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 2. Benutzer erstellen (Passwort anpassen!) CREATE USER IF NOT EXISTS 'timeclock_user'@'localhost' IDENTIFIED BY 'IhrSicheresPasswort123!'; -- 3. Berechtigungen vergeben GRANT ALL PRIVILEGES ON stechuhr2.* TO 'timeclock_user'@'localhost'; -- 4. Privilegien neu laden FLUSH PRIVILEGES; -- 5. Prüfen SHOW DATABASES; SELECT User, Host FROM mysql.user WHERE User='timeclock_user'; -- 6. Verlassen EXIT; ``` ## 4. Tabellen erstellen Die Tabellen existieren bereits in Ihrer DB. Falls Sie sie neu erstellen möchten: ```bash # SQL-Dump importieren (falls vorhanden) mysql -u timeclock_user -p stechuhr2 < database-schema.sql ``` Oder mit dem automatischen Migrations-Script: ```bash cd /home/torsten/Programs/TimeClock/backend node scripts/create-tables.js ``` ## 5. .env Datei konfigurieren ```bash cd /home/torsten/Programs/TimeClock/backend nano .env ``` Setzen Sie folgende Werte: ```env DB_HOST=localhost DB_PORT=3306 DB_USER=timeclock_user DB_PASSWORD=IhrSicheresPasswort123! DB_NAME=stechuhr2 ``` ## 6. Verbindung testen ```bash # Mit neuen Credentials verbinden mysql -u timeclock_user -p stechuhr2 # In MySQL-Konsole: SHOW TABLES; EXIT; ``` ## 7. Server starten ```bash cd /home/torsten/Programs/TimeClock npm run dev ``` **Erwartete Ausgabe:** ``` ✅ Sequelize: MySQL-Datenbankverbindung hergestellt ✅ Sequelize: Models initialisiert 🕐 TimeClock Server läuft auf Port 3010 ``` ## Troubleshooting ### "Access denied for user" ```bash # Berechtigungen prüfen mysql -u root -p ``` ```sql SHOW GRANTS FOR 'timeclock_user'@'localhost'; -- Falls leer: Berechtigungen neu vergeben (siehe Schritt 3) ``` ### "Unknown database stechuhr2" ```bash mysql -u root -p ``` ```sql CREATE DATABASE stechuhr2; ``` ### "Can't connect to MySQL server" ```bash # MySQL-Status prüfen sudo systemctl status mysql # Starten falls gestoppt sudo systemctl start mysql ``` ### Port 3306 bereits belegt ```bash # Prüfen was auf Port 3306 läuft sudo ss -tlnp | grep 3306 # MySQL-Port ändern (in /etc/my.cnf) [mysqld] port=3307 ``` ## Schnell-Setup für Entwicklung Falls Sie nur schnell testen möchten: ```bash # MySQL als root ohne Passwort mysql -u root CREATE DATABASE stechuhr2; EXIT; ``` Dann in `.env`: ```env DB_USER=root DB_PASSWORD= DB_NAME=stechuhr2 ``` ⚠️ **Nicht für Produktion verwenden!** ## Existierende stechuhr2 DB verwenden Falls Sie bereits eine `stechuhr2` Datenbank haben: ```bash # Prüfen Sie die Credentials mysql -u IHR_USER -p stechuhr2 # Tabellen anzeigen SHOW TABLES; ``` Dann in `.env`: ```env DB_USER=IHR_EXISTIERENDER_USER DB_PASSWORD=IHR_EXISTIERENDES_PASSWORT DB_NAME=stechuhr2 ``` ## Benutzer erstellen (Template) ```sql -- Benutzer mit vollem Zugriff CREATE USER 'timeclock_user'@'localhost' IDENTIFIED BY 'Passwort123'; GRANT ALL PRIVILEGES ON stechuhr2.* TO 'timeclock_user'@'localhost'; FLUSH PRIVILEGES; -- Nur Lese-Zugriff (optional) CREATE USER 'timeclock_readonly'@'localhost' IDENTIFIED BY 'Passwort123'; GRANT SELECT ON stechuhr2.* TO 'timeclock_readonly'@'localhost'; FLUSH PRIVILEGES; ``` ## Backup erstellen ```bash # Vor Änderungen immer Backup! mysqldump -u timeclock_user -p stechuhr2 > backup_$(date +%Y%m%d_%H%M%S).sql # Restore mysql -u timeclock_user -p stechuhr2 < backup_20251015_143000.sql ```