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.
| Zweig | Typ | Status | Für wen |
|---|---|---|---|
| MySQL 8.0 | Alt | Seit April 2026 am Lebensende | Wechseln Sie auf 8.4 oder 9.7 |
| MySQL 8.4 | LTS | Gepflegt | Die sicherste Wahl, von Werkzeugen am besten unterstützt |
| MySQL 9.7 | LTS | Erschienen am 21. April 2026 | Neue 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.
Wählen Sie auf der Download-Seite die Version 8.4 LTS und Microsoft Windows und laden Sie den 64-Bit-MSI Installer herunter.
Starten Sie das MSI und wählen Sie die Installation Typical. Der Server wird in
C:\Program Files\MySQL\MySQL Server 8.4installiert.Lassen Sie am Ende das Öffnen von MySQL Configurator angehakt. Der Server startet erst, wenn er eingerichtet ist.
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.Geben Sie unter Accounts and Roles dem Konto
rootein langes, komplexes Passwort und legen Sie es in einem Passwortmanager ab.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.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 VPS | innodb_buffer_pool_size | max_connections | innodb_redo_log_capacity |
|---|---|---|---|
| 2 GB | 1G | 75 | 256M |
| 4 GB | 2,5G | 150 | 512M |
| 8 GB | 5G | 300 | 1G |
| 16 GB | 11G | 500 | 2G |
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_sizenochquery_cache_typehinzu, 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*oder0.0.0.0zurü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.
Windows Server 2025 inklusive Lizenz, Remotedesktop-Zugang und Verwaltung im Kundenbereich.
Angebote ansehen →