WindowsVeröffentlicht am 26. Mai 20269 Min. Lesezeit

MySQL auf einem Windows Server VPS installieren

Um MySQL Server auf einem Windows Server VPS zu installieren, stellt Oracle ein MSI-Paket bereit, das den Server und MySQL Configurator, das Einrichtungswerkzeug, installiert. Diese Anleitung folgt dieser offiziellen Methode, über die Oberfläche oder die Befehlszeile, und öffnet dann den Fernzugriff, stimmt die Leistung ab, sichert MySQL ab und richtet Backups ein. MySQL Installer, den ältere Tutorials nennen, endet mit dem Zweig 8.0.

Die MySQL-Version wählen

Oracle veröffentlicht LTS-Versionen, die lange gepflegt werden, und Innovation-Versionen, die sich schnell ändern. Auf einem Server nehmen Sie eine LTS-Version.

ZweigTypStatusFür wen
MySQL 8.0AltSeit April 2026 am LebensendeWechseln Sie auf 8.4 oder 9.7
MySQL 8.4LTSGepflegtDie sicherste Wahl, von Werkzeugen am besten unterstützt
MySQL 9.7LTSErschienen am 21. April 2026Neue Projekte, die den jüngsten Zweig wollen

Diese Anleitung nimmt MySQL 8.4 LTS als Beispiel. Installieren Sie den neuesten Patch des Zweigs, den die Download-Seite von MySQL nennt. Für 9.7 ist das Vorgehen gleich, mit 9.7 statt 8.4 in den Pfaden.


Den VPS vorbereiten

  • Windows Server 2025, oder 2019 und 2022 bei einem älteren Server.

  • Mindestens 2 GB Arbeitsspeicher, 4 GB für den echten Einsatz.

  • Ein Administratorzugang per Remotedesktop.

  • Das Microsoft Visual C++ Redistributable x64, das MySQL 8.4 verlangt. Installieren Sie es von der Website von Microsoft, falls es fehlt.

Prüfen Sie, ob Port 3306 frei ist. Zeigt der Befehl nichts an, nutzt ihn kein Programm.

netstat -ano | findstr :3306

MySQL mit dem MSI und MySQL Configurator installieren

Die Bezeichnungen von MySQL Configurator sind englisch.

  1. Wählen Sie auf der Download-Seite die Version 8.4 LTS und Microsoft Windows und laden Sie den 64-Bit-MSI Installer herunter.

  2. Starten Sie das MSI und wählen Sie die Installation Typical. Der Server wird in C:\Program Files\MySQL\MySQL Server 8.4 installiert.

  3. Lassen Sie am Ende das Öffnen von MySQL Configurator angehakt. Der Server startet erst, wenn er eingerichtet ist.

  4. Wählen Sie unter Type and Networking den Typ Dedicated, wenn MySQL allein auf dem VPS läuft, oder Server, wenn er sich den VPS mit IIS oder einer Anwendung teilt. Behalten Sie TCP/IP auf Port 3306. Entfernen Sie den Haken bei Open Windows Firewall port for network access, wenn sich kein externer Rechner verbinden soll.

  5. Geben Sie unter Accounts and Roles dem Konto root ein langes, komplexes Passwort und legen Sie es in einem Passwortmanager ab.

  6. Behalten Sie unter Windows Service die Option Configure MySQL server as a Windows service und nennen Sie den Dienst MySQL84, den Namen, den diese Anleitung weiter verwendet. Behalten Sie Start the MySQL Server at System Startup.

  7. Behalten Sie die Standardrechte unter Server File Permissions und klicken Sie dann unter Apply Configuration auf Execute.

MySQL 8.4 nutzt die Authentifizierung caching_sha2_password. Das alte mysql_native_password ist standardmäßig deaktiviert. Braucht ein alter Client es, fügen Sie mysql_native_password=ON in my.ini hinzu.

Prüfen Sie dann den Dienst und melden Sie sich als root an.

Get-Service MySQL84
cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
.\mysql.exe -u root -p

Am Prompt mysql> zeigt der folgende Befehl die installierte Version.

SELECT VERSION();

MySQL über die Befehlszeile installieren

Zum Automatisieren verketten Sie das MSI im stillen Modus mit MySQL Configurator im Konsolenmodus. Ersetzen Sie 8.4.x durch den neuesten Patch der Download-Seite und das root-Passwort durch Ihr eigenes.

# Genaue Version von dev.mysql.com/downloads/mysql/ übernehmen
$version = "8.4.x"
$msi = "C:\Temp\mysql-$version-winx64.msi"
New-Item -ItemType Directory -Force -Path "C:\Temp" | Out-Null
Invoke-WebRequest -Uri "https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-$version-winx64.msi" -OutFile $msi -UseBasicParsing
# Stille Installation von Server und MySQL Configurator
Start-Process msiexec.exe -ArgumentList "/i", $msi, "/qn", "/lv", "C:\Temp\mysql_install.log" -Wait
# Einrichtung: root-Passwort, Port und Windows-Dienst
$bin = "C:\Program Files\MySQL\MySQL Server 8.4\bin"
& "$bin\mysql_configurator.exe" --console --action=configure --password="Ch@ngeMe-Now!" --port=3306 --windows-service-name=MySQL84
# Prüfung
Get-Service MySQL84
& "$bin\mysql.exe" -u root -p -e "SELECT VERSION();"

MySQL Configurator liegt im Ordner bin, neben mysqld.exe. Lehnt er die Option --console ab, ist seine Version zu alt. Starten Sie ihn dann ohne Option und folgen Sie dem grafischen Assistenten.


Den Fernzugriff öffnen

Damit sich ein anderer Server oder ein Werkzeug wie MySQL Workbench verbinden kann, brauchen Sie einen offenen Port, einen Server, der im Netzwerk lauscht, und ein Konto mit Fernzugriff.

Port 3306 öffnen

Haben Sie die Firewall-Option in MySQL Configurator abgewählt, legen Sie die Regel selbst an. Beschränken Sie sie möglichst auf die Adresse des Clients.

# Port 3306 für alle offen
New-NetFirewallRule `
    -DisplayName "MySQL 3306" `
    -Direction Inbound `
    -Protocol TCP `
    -LocalPort 3306 `
    -Action Allow `
    -Profile Any
# Port 3306 nur für eine Adresse (empfohlen)
New-NetFirewallRule -DisplayName "MySQL 3306 - Allowed IP" -Direction Inbound -Protocol TCP -LocalPort 3306 -RemoteAddress "203.0.113.10" -Action Allow
# Regel prüfen
Get-NetFirewallRule -DisplayName "MySQL 3306*"

Die Anleitung Port in der Windows Firewall freigeben erklärt diese Regeln. Zwischen zwei Ihrer VPS vermeidet das private Netzwerk für VPS den Umweg über das Internet.

Ein Konto für den Fernzugriff anlegen

Geben Sie root nie Fernzugriff. Legen Sie ein eigenes Konto an, beschränkt auf die Adresse des Clients und auf eine Datenbank.

-- Konto für eine Adresse
CREATE USER 'appuser'@'203.0.113.10' IDENTIFIED BY 'Ch@ngeMe-Now!';
-- Variante für alle Adressen (weniger sicher)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'Ch@ngeMe-Now!';
-- Rechte auf eine einzige Datenbank
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'203.0.113.10';

Prüfen Sie auch, ob MySQL im Netzwerk lauscht. Der Befehl SHOW VARIABLES LIKE 'bind_address'; sollte * oder 0.0.0.0 zurückgeben. Sonst fügen Sie dies in my.ini hinzu und starten den Dienst neu.

[mysqld]
bind-address = 0.0.0.0

Fernverbindungen verschlüsseln

MySQL 8.4 erstellt seine TLS-Zertifikate beim ersten Start. Die Variablen ssl_ca, ssl_cert und ssl_key zeigen auf ihre Dateien. Verlangen Sie dann TLS für das Fernzugriffskonto und verbinden Sie den Client mit --ssl-mode=REQUIRED.

SHOW VARIABLES LIKE '%ssl%';
ALTER USER 'appuser'@'203.0.113.10' REQUIRE SSL;
mysql -u appuser -p -h 203.0.113.50 --ssl-mode=REQUIRED

Die Leistung abstimmen

Die Konfiguration liegt in C:\ProgramData\MySQL\MySQL Server 8.4\my.ini. Passen Sie diese Einstellungen an den Arbeitsspeicher des VPS an.

[mysqld]
# InnoDB-Cache, die wichtigste Einstellung
innodb_buffer_pool_size = 2G
# Höchstzahl gleichzeitiger Verbindungen
max_connections = 150
# Kapazität des InnoDB-Redo-Logs
innodb_redo_log_capacity = 512M
# InnoDB-E/A-Threads (Anzahl der Kerne)
innodb_read_io_threads = 4
innodb_write_io_threads = 4
Arbeitsspeicher des VPSinnodb_buffer_pool_sizemax_connectionsinnodb_redo_log_capacity
2 GB1G75256M
4 GB2,5G150512M
8 GB5G3001G
16 GB11G5002G

Diese Werte gehen von einem VPS aus, der vor allem MySQL dient. Auf einem VPS, auf dem auch IIS oder eine Anwendung läuft, verkleinern Sie den InnoDB-Cache. Starten Sie den Dienst danach neu.

Restart-Service MySQL84

Fügen Sie weder query_cache_size noch query_cache_type hinzu, die ältere Tutorials noch nennen. Der Abfrage-Cache wurde in MySQL 8.0 entfernt, und diese Zeilen verhindern den Start des Servers.


MySQL absichern

Beginnen Sie mit dem mitgelieferten Werkzeug zur Absicherung. Es bietet die Passwortrichtlinie an, löscht anonyme Konten, sperrt die Fernanmeldung von root und entfernt die Datenbank test. Antworten Sie auf jede Frage mit Y.

cd "C:\Program Files\MySQL\MySQL Server 8.4\bin"
.\mysql_secure_installation.exe

Dieselben Prüfungen gehen auch von Hand. Löschen Sie mit DROP USER jedes anonyme oder entfernte root-Konto, das die erste Abfrage anzeigt.

-- Anonyme Konten und root mit Fernzugriff
SELECT User, Host FROM mysql.user WHERE User = '' OR (User = 'root' AND Host NOT IN ('localhost', '127.0.0.1', '::1'));
-- Beispiele zum Löschen
DROP USER IF EXISTS ''@'localhost';
DROP USER IF EXISTS 'root'@'%';
-- Testdatenbank
DROP DATABASE IF EXISTS test;

Aktivieren Sie die Passwortrichtlinie, in MySQL 8.4 eine Komponente.

INSTALL COMPONENT 'file://component_validate_password';
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;

Geben Sie jeder Anwendung nur die nötigen Rechte auf ihre Datenbank, nie ALL PRIVILEGES ON *.*.

-- Gutes Beispiel
GRANT SELECT, INSERT, UPDATE ON appdb.* TO 'appuser'@'localhost';
-- Vermeiden
-- GRANT ALL PRIVILEGES ON *.* TO 'appuser'@'%';

Um Spuren zu behalten, fügen Sie die Protokolle in my.ini hinzu. Das allgemeine Protokoll erfasst jede Abfrage und wächst schnell. Aktivieren Sie es nur für eine Fehlersuche.

[mysqld]
general_log = 1
general_log_file = "C:/ProgramData/MySQL/MySQL Server 8.4/Data/mysql_general.log"
log_error = "C:/ProgramData/MySQL/MySQL Server 8.4/Data/mysql_error.log"

Verlangen Sie TLS für alle Fernzugriffskonten, wie oben gezeigt. Installieren Sie schließlich die Patches des Zweigs, sobald sie erscheinen, und verfolgen Sie die Sicherheitshinweise von MySQL.


Die Datenbanken sichern

Damit das Passwort nicht im Skript steht, legen Sie es in einer Optionsdatei ab, die nur Administratoren lesen dürfen. Erstellen Sie C:\Scripts\mysql-backup.cnf mit diesem Inhalt.

[client]
user=root
password=Ch@ngeMe-Now!
icacls "C:\Scripts\mysql-backup.cnf" /inheritance:r /grant:r "Administrators:F" "SYSTEM:F"

Speichern Sie dann dieses Skript unter C:\Scripts\mysql_backup.ps1. Es sichert jede Datenbank in eine datierte Datei und löscht Dateien, die älter als 7 Tage sind.

# MySQL-Sicherung mit Rotation, zum Planen
$mysqlBin  = "C:\Program Files\MySQL\MySQL Server 8.4\bin"
$cnf       = "C:\Scripts\mysql-backup.cnf"
$backupDir = "C:\Backups\MySQL"
$retention = 7
New-Item -ItemType Directory -Force -Path $backupDir | Out-Null
$timestamp = Get-Date -Format "yyyy-MM-dd_HH-mm"
# Alle Datenbanken außer den Systemdatenbanken
$databases = & "$mysqlBin\mysql.exe" --defaults-extra-file="$cnf" -e "SHOW DATABASES;" --batch --skip-column-names |
    Where-Object { $_ -notin @('information_schema','performance_schema','sys','mysql') }
foreach ($db in $databases) {
    $dbFile = "$backupDir\${db}_$timestamp.sql"
    & "$mysqlBin\mysqldump.exe" --defaults-extra-file="$cnf" `
        --single-transaction `
        --routines `
        --triggers `
        --databases $db `
        --result-file=$dbFile
    if ($LASTEXITCODE -eq 0) { Write-Host "Backup OK: $db" } else { Write-Host "Backup ERROR: $db" }
}
# Rotation
Get-ChildItem -Path $backupDir -Filter "*.sql" |
    Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$retention) } |
    Remove-Item -Force

Planen Sie es jede Nacht um 2 Uhr unter dem Konto SYSTEM, damit es ohne offene Sitzung läuft.

$action  = New-ScheduledTaskAction `
    -Execute "PowerShell.exe" `
    -Argument "-NonInteractive -ExecutionPolicy Bypass -File C:\Scripts\mysql_backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
$settings = New-ScheduledTaskSettingsSet `
    -ExecutionTimeLimit (New-TimeSpan -Hours 1) `
    -RestartCount 3 `
    -RestartInterval (New-TimeSpan -Minutes 5)
Register-ScheduledTask `
    -TaskName "MySQL Backup Daily" `
    -Action $action `
    -Trigger $trigger `
    -Settings $settings `
    -User "SYSTEM" `
    -RunLevel Highest `
    -Force

Diese Dateien bleiben auf dem VPS. Um eine Kopie anderswo zu behalten, folgen Sie der Anleitung Backup eines Windows Server VPS erstellen. Für eine PHP-Website unter IIS verbindet der Artikel PHP/MySQL-Websites auf einem Windows-VPS hosten beides.


Häufige Fehler beheben

Der MySQL-Dienst startet nicht

Lesen Sie das Ende des Fehlerprotokolls im Datenordner. Häufige Ursachen sind ein schon belegter Port 3306, fehlende Rechte auf den Ordner Data und eine ungültige Zeile in my.ini, etwa query_cache_size.

Get-ChildItem "C:\ProgramData\MySQL\MySQL Server 8.4\Data\*.err" | Get-Content -Tail 50

Access denied for user 'root' oder vergessenes Passwort

Starten Sie MySQL ohne Rechteprüfung, gerade lange genug, um das Passwort zu ändern. --skip-networking sperrt währenddessen jede Netzwerkverbindung.

# Dienst anhalten
Stop-Service MySQL84
# MySQL ohne Rechteprüfung starten, mit seiner Konfigurationsdatei
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.4\my.ini" --skip-grant-tables --skip-networking
# In einem anderen PowerShell-Fenster ohne Passwort anmelden
& "C:\Program Files\MySQL\MySQL Server 8.4\bin\mysql.exe" -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Ch@ngeMe-Now!';
EXIT;
# Diesen mysqld beenden, dann den Dienst normal starten
Stop-Process -Name mysqld -Force
Start-Service MySQL84

Port 3306 ist schon belegt

# Prozess, der Port 3306 belegt
netstat -ano | findstr :3306
# Prozessname anhand der PID
Get-Process -Id 1234

Ersetzen Sie 1234 durch die gefundene PID. Beenden Sie dieses Programm oder ändern Sie den Port von MySQL in my.ini (port=3307) und in der Firewall-Regel.

Keine Verbindung aus der Ferne

  • Die Firewall-Regel existiert: Get-NetFirewallRule -DisplayName "MySQL 3306*".

  • MySQL lauscht im Netzwerk: SHOW VARIABLES LIKE 'bind_address'; gibt * oder 0.0.0.0 zurück.

  • Das Konto ist für die Adresse des Clients zugelassen: SELECT User, Host FROM mysql.user;.

  • Das Netzwerk des Clients lässt Port 3306 nach außen.

Fehler „The table is full“

Meist ist die Festplatte voll oder eine temporäre Tabelle hat ihre Grenze erreicht. Prüfen Sie den freien Platz auf C: und die Größe jeder Datenbank.

-- Größe jeder Datenbank
SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024,1) AS "Size (MB)"
FROM information_schema.tables
GROUP BY table_schema;
-- InnoDB-Datendatei und ihre mögliche Grenze
SHOW VARIABLES LIKE 'innodb_data_file_path';

Brauchen Sie Hilfe?

Eröffnen Sie ein Ticket über Tickets › Ticket öffnen oder über die Kachel Support kontaktieren unten auf der VPS-Seite. Wählen Sie im Feld Betreffender Dienst den VPS aus, das spart dem Team Zeit. Sie können Ihre Frage auch auf dem Discord von OuiHeberg stellen.

War dieser Artikel hilfreich?

350 Aufrufe
Diesen Artikel teilen
VPS Windows
Sie brauchen einen Windows-VPS?

Windows Server 2025 inklusive Lizenz, Remotedesktop-Zugang und Verwaltung im Kundenbereich.

Angebote ansehen →

Verwandte Artikel