MySQL Verwaltung · 5 min read · Jan 29, 2026
Verwalten mehrerer MySQL-Server von einer phpMyAdmin-Installation aus (unter Verwendung von SSL-Verschlüsselung)
Verwalten mehrerer MySQL-Server von einer phpMyAdmin-Installation aus (unter Verwendung von SSL-Verschlüsselung)
Version 1.0
Autor: Falko Timme
Folge mir auf Twitter
Dieses Tutorial erklärt, wie Sie mehrere MySQL-Server von einer phpMyAdmin-Installation aus verwalten können. Aus Sicherheitsgründen erfolgt die Kommunikation zwischen phpMyAdmin und jedem entfernten MySQL-Server über SSL-Verschlüsselung (dies ist für einen lokalen MySQL-Server nicht erforderlich, da die Kommunikation zwischen phpMyAdmin und MySQL den Server nicht verlässt). phpMyAdmin ist ein kostenloses Software-Tool, das in PHP geschrieben wurde und zur Verwaltung von MySQL über das World Wide Web gedacht ist. phpMyAdmin unterstützt eine Vielzahl von Operationen mit MySQL.
Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!
1 Vorbemerkung
In diesem Tutorial zeige ich, wie man zwei MySQL-Server verwaltet - einen lokalen (local.example.com mit der IP-Adresse 192.168.0.100 - dies ist der Server, auf dem phpMyAdmin installiert ist) und einen entfernten Server (remote.example.com mit der IP-Adresse 192.168.0.101) - von einer phpMyAdmin-Instanz aus. Ich gehe davon aus, dass phpMyAdmin bereits installiert ist (entweder manuell oder über den Paketmanager Ihrer Distribution) und funktioniert (d.h. Sie sollten bereits in der Lage sein, den lokalen MySQL-Server über phpMyAdmin zu verwalten) - ich werde die Installation von phpMyAdmin hier nicht behandeln.
Dieses Tutorial basiert auf Debian Wheezy/Ubuntu 12.04. Für andere Distributionen müssen Sie möglicherweise einige Pfade anpassen, aber das Prinzip bleibt dasselbe.
2 Aktivieren der SSL-Unterstützung auf dem entfernten MySQL-Server
remote.example.com:
Melden Sie sich bei MySQL an…
mysql -u root -p… und führen Sie den folgenden Befehl in der MySQL-Shell aus:
show variables like '%ssl%';Wenn die Ausgabe wie folgt aussieht (beide have_openssl und have_ssl zeigen DISABLED)…
mysql> show variables like ’%ssl%’;
+—————+———-+
| Variable_name | Value |
+—————+———-+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+—————+———-+
7 rows in set (0.00 sec)
mysql>
… bedeutet dies, dass MySQL mit SSL-Unterstützung kompiliert wurde, aber derzeit nicht aktiviert ist. Um es zu aktivieren, verlassen Sie zuerst die MySQL-Shell…
quit;… und öffnen Sie /etc/mysql/my.cnf:
vi /etc/mysql/my.cnfScrollen Sie nach unten zum Abschnitt * Sicherheitsmerkmale (innerhalb des [mysqld]-Abschnitts) und fügen Sie eine Zeile mit dem Wort ssl hinzu:
| | [...] # * Sicherheitsmerkmale # # Lesen Sie auch das Handbuch, wenn Sie chroot verwenden möchten! # chroot = /var/lib/mysql/ # # Zur Erstellung von SSL-Zertifikaten empfehle ich die OpenSSL-GUI "tinyca". ssl # ssl-ca=/etc/mysql/cacert.pem # ssl-cert=/etc/mysql/server-cert.pem # ssl-key=/etc/mysql/server-key.pem [...] | |
Starten Sie MySQL neu…
/etc/init.d/mysql restart… und überprüfen Sie erneut, ob SSL jetzt aktiviert ist:
mysql -u root -pshow variables like '%ssl%';Die Ausgabe sollte wie folgt aussehen, was bedeutet, dass SSL jetzt aktiviert ist:
mysql> show variables like ’%ssl%’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | |
| ssl_capath | |
| ssl_cert | |
| ssl_cipher | |
| ssl_key | |
+—————+——-+
7 rows in set (0.00 sec)
mysql>
Geben Sie ein…
quit;… um die MySQL-Shell zu verlassen.
Stellen Sie sicher, dass OpenSSL installiert ist:
apt-get install opensslÜberprüfen Sie jetzt Ihre OpenSSL-Version:
root@remote:~# openssl version
OpenSSL 1.0.1c 10. Mai 2012
root@remote:~#
Wenn Sie - wie ich - OpenSSL Version 1.0.1c haben, verursachen die von OpenSSL generierten Zertifikate Fehler wie
Sep 18 17:02:15 remote mysqld: SSL-Fehler: Konnte den privaten Schlüssel von ‘/etc/mysql/newcerts/server-key.pem’ nicht abrufen
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warnung] SSL konnte nicht eingerichtet werden
Sep 18 17:02:15 remote mysqld: 120918 17:02:15 [Warnung] SSL-Fehler: Konnte den privaten Schlüssel nicht abrufen
(im /var/log/syslog auf remote.example.com) und
root@local:/etc/mysql/newcerts# mysql –ssl-ca=/etc/mysql/newcerts/ca-cert.pem –ssl-cert=/etc/mysql/newcerts/client-cert.pem –ssl-key=/etc/mysql/newcerts/client-key.pem -h remote.example.com -u root -p
Passwort eingeben:
FEHLER 2026 (HY000): SSL-Verbindungsfehler: Protokollversionskonflikt
root@local:/etc/mysql/newcerts#
(auf local.example.com, wenn Sie versuchen, eine verschlüsselte Verbindung zu remote.example.com herzustellen), zumindest mit MySQL 5.5; siehe:
Um dieses Problem zu lösen, bauen wir einfach unser eigenes OpenSSL (dies ist nicht erforderlich, wenn Ihre OpenSSL-Version älter als 1.0.1 ist):
cd /tmp
wget http://www.openssl.org/source/openssl-0.9.8x.tar.gz
tar xvfz openssl-0.9.8x.tar.gz
cd openssl-0.9.8x
./config –prefix=/usr/local/openssl-0.9.8
make
make install
Danach finden Sie Ihr neues OpenSSL-Binärprogramm in /usr/local/openssl-0.9.8/bin/openssl.
Jetzt erstellen wir die CA-, Server- und Client-Zertifikate, die wir für die SSL-Verbindungen benötigen. Ich erstelle diese Zertifikate im Verzeichnis /etc/mysql/newcerts, das ich zuerst erstellen muss:
mkdir /etc/mysql/newcerts && cd /etc/mysql/newcertsErstellen Sie das CA-Zertifikat (ich verwende hier /usr/local/openssl-0.9.8/bin/openssl; wenn die OpenSSL-Version Ihres Systems älter als 1.0.1 ist, können Sie einfach openssl verwenden):
/usr/local/openssl-0.9.8/bin/openssl genrsa 2048 > ca-key.pem/usr/local/openssl-0.9.8/bin/openssl req -new -x509 -nodes -days 1000 -key ca-key.pem > ca-cert.pemErstellen Sie das Serverzertifikat:
/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout server-key.pem > server-req.pem/usr/local/openssl-0.9.8/bin/openssl x509 -req -in server-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pemErstellen Sie das Client-Zertifikat:
/usr/local/openssl-0.9.8/bin/openssl req -newkey rsa:2048 -days 1000 -nodes -keyout client-key.pem > client-req.pem/usr/local/openssl-0.9.8/bin/openssl x509 -req -in client-req.pem -days 1000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pemDie Ausgabe von…
ls -l… sollte jetzt wie folgt aussehen:
root@remote:/etc/mysql/newcerts# ls -l
total 32
-rw-r–r– 1 root root 1346 Sep 18 17:52 ca-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:52 ca-key.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 client-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 client-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 client-req.pem
-rw-r–r– 1 root root 1099 Sep 18 17:53 server-cert.pem
-rw-r–r– 1 root root 1679 Sep 18 17:53 server-key.pem
-rw-r–r– 1 root root 956 Sep 18 17:53 server-req.pem
root@remote:/etc/mysql/newcerts#
Wir müssen jetzt ca-cert.pem, client-cert.pem und client-key.pem auf den lokalen MySQL-Server (auf local.example.com) übertragen; bevor wir dies tun, erstellen wir das Verzeichnis /etc/mysql/newcerts auf local.example.com:
local.example.com:
mkdir /etc/mysql/newcertsZurück auf
remote.example.com
können wir die drei Dateien nach
local.example.com
wie folgt übertragen:
remote.example.com:
scp /etc/mysql/newcerts/ca-cert.pem [email protected]:/etc/mysql/newcerts scp /etc/mysql/newcerts/client-cert.pem [email protected]:/etc/mysql/newcerts scp /etc/mysql/newcerts/client-key.pem [email protected]:/etc/mysql/newcertsÖffnen Sie als Nächstes /etc/mysql/my.cnf…
vi /etc/mysql/my.cnf… und ändern Sie den Abschnitt * Sicherheitsmerkmale; kommentieren Sie die Zeilen ssl-ca, ssl-cert und ssl-key aus und fügen Sie die richtigen Werte ein:
| | [...] # * Sicherheitsmerkmale # # Lesen Sie auch das Handbuch, wenn Sie chroot verwenden möchten! # chroot = /var/lib/mysql/ # # Zur Erstellung von SSL-Zertifikaten empfehle ich die OpenSSL-GUI "tinyca". ssl ssl-ca=/etc/mysql/newcerts/ca-cert.pem ssl-cert=/etc/mysql/newcerts/server-cert.pem ssl-key=/etc/mysql/newcerts/server-key.pem [...] | |
Starten Sie MySQL neu:
/etc/init.d/mysql restartMelden Sie sich jetzt erneut bei MySQL an…
mysql -u root -p… und überprüfen Sie, ob SSL aktiviert ist und die richtigen Zertifikate geladen wurden:
show variables like '%ssl%';mysql> show variables like ’%ssl%’;
+—————+————————————-+
| Variable_name | Value |
+—————+————————————-+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /etc/mysql/newcerts/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /etc/mysql/newcerts/server-cert.pem |
| ssl_cipher | |
| ssl_key | /etc/mysql/newcerts/server-key.pem |
+—————+————————————-+
7 rows in set (0.00 sec)
mysql>
Verlassen Sie die MySQL-Shell nicht. Wir werden jetzt einen MySQL-Root-Benutzer erstellen, der von local.example.com zu remote.example.com verbinden darf und SSL verwenden muss:
CREATE USER ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’192.168.0.100’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT USAGE ON *.* TO 'root'@'192.168.0.100' REQUIRE SSL;CREATE USER ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’;
GRANT ALL PRIVILEGES ON . TO ‘root’@’local.example.com’ IDENTIFIED BY ‘mysqlrootpassword’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT USAGE ON *.* TO 'root'@'local.example.com' REQUIRE SSL;FLUSH PRIVILEGES;Jetzt können Sie die MySQL-Shell verlassen:
quit;Das war’s - wir haben jetzt einen MySQL-Root-Benutzer, der von local.example.com zu remote.example.com verbinden darf, aber SSL-Verschlüsselung verwenden muss.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.