MySQL / MariaDB Datenbankverwaltung: Installation, Nutzer, Backups
MySQL/MariaDB auf Linux VDS installieren, Nutzer und Datenbanken anlegen, Dump/Import, Performance-Tuning und sicherer Fernzugriff.
WordPress, E-Commerce, Enterprise-Apps — alle laufen über eine Datenbank. MySQL und sein Fork MariaDB sind die weltweit meistgenutzten relationalen Datenbanken. Diese Anleitung deckt Installation, Nutzer-/DB-Verwaltung, Backups und häufige Performance-Probleme auf einem Linux-VDS ab.
MySQL vs MariaDB — welches?
- MySQL: gehört Oracle, kommerziell + Community
- MariaDB: Open-Source-Fork von MySQL, ~95% kompatibel, in einigen Bereichen schneller
Für die meisten Projekte austauschbar — was installiert ist, reicht. WordPress unterstützt beides. Für Neuinstallation empfehlen wir MariaDB.
1. Installation
# Ubuntu/Debian
sudo apt update
sudo apt install mariadb-server -y
# AlmaLinux/RHEL
sudo dnf install mariadb-server -y
sudo systemctl enable --now mariadb
Status:
sudo systemctl status mariadb
2. Sicherheit (immer erster Schritt)
sudo mysql_secure_installation
- Set root password: starkes
- Remove anonymous users: Yes
- Disallow root login remotely: Yes
- Remove test database: Yes
- Reload privilege tables: Yes
3. Verbinden
sudo mysql -u root -p
Beenden: EXIT; oder Ctrl+D
4. Datenbank erstellen
CREATE DATABASE blog_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
utf8mb4 unterstützt Emoji + Nicht-Latin-Zeichen. Altes utf8 ist 3-Byte und bricht bei Emoji.
5. Nutzer + Rechte
CREATE USER 'blog_user'@'localhost' IDENTIFIED BY 'STARKES_PASSWORT';
GRANT ALL PRIVILEGES ON blog_db.* TO 'blog_user'@'localhost';
GRANT SELECT ON blog_db.* TO 'reader'@'localhost';
CREATE USER 'app_user'@'192.168.1.50' IDENTIFIED BY 'PASSWORT';
GRANT ALL ON app_db.* TO 'app_user'@'192.168.1.50';
FLUSH PRIVILEGES;
@'localhost' nur lokal, @'%' von überall (unsicher — nur mit spezifischer IP).
6. Rechte anzeigen / entziehen
SHOW GRANTS FOR 'blog_user'@'localhost';
REVOKE INSERT, UPDATE ON blog_db.* FROM 'blog_user'@'localhost';
DROP USER 'alt_user'@'localhost';
7. Backup (mysqldump)
Einzelne DB
mysqldump -u root -p blog_db > blog_db.sql
Komprimiert:
mysqldump -u root -p blog_db | gzip > blog_db_$(date +%Y%m%d).sql.gz
Alle DBs
mysqldump -u root -p --all-databases | gzip > all_dbs.sql.gz
Produktion: Lock-frei
mysqldump -u root -p --single-transaction --routines --triggers blog_db > blog_db.sql
--single-transaction für konsistentes Backup ohne Lock (InnoDB-Tabellen).
Cron-Automatisierung:
0 3 * * * mysqldump -u root -p'PASSWORT' blog_db | gzip > /backup/blog_$(date +\%Y\%m\%d).sql.gz
Cron-Beitrag, 3-2-1-Backup-Beitrag.
8. Restore
mysql -u root -p blog_db < blog_db.sql
zcat blog_db.sql.gz | mysql -u root -p blog_db
DB existiert nicht → erst CREATE.
9. Fernzugriff
Default: nur localhost. Für Remote:
/etc/mysql/mariadb.conf.d/50-server.cnf:
bind-address = 0.0.0.0
sudo systemctl restart mariadb
CREATE USER 'remote_user'@'YOUR_IP' IDENTIFIED BY 'STARKES_PASSWORT';
GRANT ALL ON db_name.* TO 'remote_user'@'YOUR_IP';
FLUSH PRIVILEGES;
In UFW 3306 nur für spezifische IP öffnen:
sudo ufw allow from YOUR_IP to any port 3306
⚠️ Niemals bind-address = 0.0.0.0 + GRANT % + UFW offen — öffentliches MySQL = Brute-Force-Ziel.
10. Performance-Tuning
/etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
innodb_buffer_pool_size = 2G
query_cache_size = 64M
query_cache_type = 1
max_connections = 200
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 3
sudo systemctl restart mariadb
11. Nützliche Befehle
SELECT table_schema "Database",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) "Size (MB)"
FROM information_schema.tables GROUP BY table_schema;
SHOW PROCESSLIST;
SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;
REPAIR TABLE tabellen_name;
OPTIMIZE TABLE tabellen_name;
12. phpMyAdmin (GUI)
sudo apt install phpmyadmin -y
Apache-Config oder manuell /etc/apache2/conf-available/phpmyadmin.conf. Browser http://vds-ip/phpmyadmin.
⚠️ In Produktion phpMyAdmin nicht öffentlich — IP per .htaccess einschränken oder Cloudflare Access.
Häufige Fehler
- “Access denied for user”: falsches Passwort oder User
@'host'passt nicht - “Too many connections”:
max_connectionserhöhen, idle Connections killen - “Disk full”: Logs zu groß →
/var/log/mysql/aufräumen - “InnoDB: Operating system error number 28”: Festplatte voll → Linux Disk-Erweiterung
- “Can’t connect to MySQL server”: Dienst aus →
sudo systemctl status mariadb - Langsame Queries: Slow-Log,
EXPLAIN SELECT ..., INDEX setzen
Fazit
MySQL/MariaDB ist Kern-Infrastruktur — egal ob WordPress oder eigene Software. Installation in 5 Minuten; produktionsreif mit regelmäßigen Backups + Sicherheit + Tuning.
KavesNET VDS mit NVMe-SSD ist ideal für MySQL — Disk-I/O ist die Lebensader von DBs.
Verwandt: WordPress manuell installieren · Server-Backups
Ähnliche Beiträge
Das könnte Sie auch interessieren.
Die 3-2-1-Backup-Regel: So verlieren Sie Server-Daten nie wieder
Die 3-2-1-Backup-Regel ist der Goldstandard für Server-Backup-Strategien. Wir erläutern Regel, Automation und KavesNETs Backup-Infrastruktur.
Weiterlesen
Site von Plesk zu Plesk migrieren: Migrator-Anleitung
Sites, Mail, DB und DNS in einem Schritt mit Plesk Migrator umziehen. Setup, Testmigration und Cutover.
Weiterlesen
FileZilla: Dateimigration zwischen zwei VDS
Site vom alten zum neuen VDS migrieren: FileZilla über FTP/SFTP, Geschwindigkeitstipps, Berechtigungen und Fehlerbehandlung.
Weiterlesen