Files
stechuhr3/backend/MYSQL_SETUP.md
Torsten Schulz (local) e95bb4cb76 Initial commit: TimeClock v3 - Node.js/Vue.js Zeiterfassung
Features:
- Backend: Node.js/Express mit MySQL/MariaDB
- Frontend: Vue.js 3 mit Composition API
- UTC-Zeithandling für korrekte Zeiterfassung
- Timewish-basierte Überstundenberechnung
- Wochenübersicht mit Urlaubs-/Krankheits-/Feiertagshandling
- Bereinigtes Arbeitsende (Generell/Woche)
- Überstunden-Offset für historische Daten
- Fixed Layout mit scrollbarem Content
- Kompakte UI mit grünem Theme
2025-10-17 14:11:28 +02:00

4.4 KiB

MySQL Datenbank Setup für TimeClock

1. MySQL Installation prüfen

# 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)

# 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

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

# MySQL als root einloggen
mysql -u root -p

Dann in der MySQL-Konsole:

-- 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:

# SQL-Dump importieren (falls vorhanden)
mysql -u timeclock_user -p stechuhr2 < database-schema.sql

Oder mit dem automatischen Migrations-Script:

cd /home/torsten/Programs/TimeClock/backend
node scripts/create-tables.js

5. .env Datei konfigurieren

cd /home/torsten/Programs/TimeClock/backend
nano .env

Setzen Sie folgende Werte:

DB_HOST=localhost
DB_PORT=3306
DB_USER=timeclock_user
DB_PASSWORD=IhrSicheresPasswort123!
DB_NAME=stechuhr2

6. Verbindung testen

# Mit neuen Credentials verbinden
mysql -u timeclock_user -p stechuhr2

# In MySQL-Konsole:
SHOW TABLES;
EXIT;

7. Server starten

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"

# Berechtigungen prüfen
mysql -u root -p
SHOW GRANTS FOR 'timeclock_user'@'localhost';
-- Falls leer: Berechtigungen neu vergeben (siehe Schritt 3)

"Unknown database stechuhr2"

mysql -u root -p
CREATE DATABASE stechuhr2;

"Can't connect to MySQL server"

# MySQL-Status prüfen
sudo systemctl status mysql

# Starten falls gestoppt
sudo systemctl start mysql

Port 3306 bereits belegt

# 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:

# MySQL als root ohne Passwort
mysql -u root

CREATE DATABASE stechuhr2;
EXIT;

Dann in .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:

# Prüfen Sie die Credentials
mysql -u IHR_USER -p stechuhr2

# Tabellen anzeigen
SHOW TABLES;

Dann in .env:

DB_USER=IHR_EXISTIERENDER_USER
DB_PASSWORD=IHR_EXISTIERENDES_PASSWORT
DB_NAME=stechuhr2

Benutzer erstellen (Template)

-- 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

# 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