MySQL Datenbankserver
In vielen Linux Distributionen sind MySQL Pakete schon in den Quellen enthalten. Es ist jedoch auch möglich, die aktuellen Orginalpakete von mysql.com herunterzuladen und zu installieren. Dabei sollte man sich dann auf jeden Fall um die Updates kümmern.
Die MySQL Datenbank gibt es in einer freien Community und einer kostenpflichtigen Enterprise Variante. Entwickelt wurde das Datenbanksystem von MySQLAB und wurde im Jahr 2008 von Sun übernommen. MySQL gehört seit der Übernahme von Sun 2010 jetzt Oracle.
MySQL Kommandos sollten wegen der besseren Lesbarkeit groß geschrieben werden und enden immer mit einem Semilikon(;).
Installation
Benötigte Pakete der verschiedenen Distributionen.
Möchte man datenbankbasierte Webanwendungen mit MySQL und PHP benutzen, sollte noch folgendes Paket installiert werden.
- Debian ⇒ php5-mysql
MySQL Dienst starten / stoppen
Der MySQL Daemon muß je nach Distribution, über init oder systemd (manuell) gestartet werden. Bei Debian wird der MySQL Daemon nach der Installation und einem Neustart des Systems standardmäßig mit gestartet.
MySQL via init-V System steuern
Folgende Beispiele zeigen den Start und Stop Befehl des MySQL Servers über die init Prozessverwaltung, wie Sie z.B. von Debian bis zur Version 7 (Wheezy) oder BSD Systemen eingesetzt wird.
root@home:~# /etc/init.d/mysql start Starting MySQL database server: mysqld. Checking for corrupt, not cleanly closed and upgrade needing tables..
root@home:~# /etc/init.d/mysql stop Stopping MySQL database server: mysqld.
MySQL via systemd System steuern
Das steuern des MySQL Servers funktioniert mit den Befehlen:
[root@home ~]# service mysqld start MySQL starten: [ OK ]
[root@home ~]# service mysqld status mysqld (PID 2457) wird ausgeführt...
[root@home ~]# service mysqld stop MySQL beenden: [ OK ]
Systemd wird z.B. bei RedHat und bei Debian seit Version 8 (Jessie) verwendet.
Konfigurationsdateien
Die Konfigurationsdateien von MySQL befinden sich je nach Distribution oder Installation in den folgenden Dateien:
Die Konfigurationsdatei ist dabei in Abschnitte gegliedert, z.B.:
- [client] ⇒ Konfiguration für alle MySQL Clients.
- [mysqld] ⇒ Konfiguration des MySQL-Servers.
port:
Der Port, auf dem der MySQL-Server lauscht. Standardmäßig ist das der Port 3306.
old_passwords:
Die Einstellung old_passwords=1 speichert interne Passwörter wie in MySQL Version < 4 und dient der abwärts Kompatibilität für ältere MySQL Anwendungen, stellt jedoch ein erhebliches Sicherheitsrisiko dar. Nach Möglichkeit sollte diese Zeile auf old_passwords=0 gesetzt oder ganz auskommentiert werden.
bind-address:
Zeigt von welchen Netzwerkverbindungen ein Zugriff zum MySQL-Server möglich ist. Wird der MySQL-Server nur von lokalen Programmen wie z.B. PHP genutzt, sollte bind-address = 127.0.0.1 eingestellt werden, dadurch kann der MySQL-Server nur Verbindungen zum lokalen Rechner aufnehmen.
skip-networking:
Diese Einstellung verhindert jeden Netzwerkzugang zum MySQL-Server, selbst Verbindungen durch den lokalen Rechner. Eine Verbindung ist nur noch für lokale Programme möglich, die über eine Socket Datei mit dem MySQL-Server kommunizieren (PHP oder C Programme). Programme die über TCP/IP (z.B. Java Programme) können den MySQL-Server nicht nutzen.
datadir:
Das Verzeichnis indem MySQL die Datenbanken speichert. Standardmäßig im Verzeichnis „/var/lib/mysql“. Dies kann man auch ändern, es sollte dabei beachtet werden, dass der MySQL-Server im neuen Verzeichnis auch schreiben darf (700, Besitzer und Gruppe mysql).
.. /var/lib/mysql/ r, /var/lib/mysql/** rwk, ..
MySql Benutzerverwaltung
Die Verwaltung von Nutzernamen und Passwörter von MySQL und Linux sind vollkommen voneinander getrennt. Auch in MySQL existiert der Benutzer root und sollte abgesichert werden.
Da für Nutzer des lokalen Rechners zwei Kommunikationswege, über eine Socket Datei oder das TCP/IP Protokoll, zur Verfügung stehen kann ein „root“ Passwort einmal für „localhost(Socket Datei)“ und „rechnername.domain(TCP/IP)“ vergeben werden.
Passwort setzen für localhost(Socket Datei):
[root@home ~]# mysqladmin -u root password '****'
Passwort setzen für rechnername(TCP/IP):
[root@home ~]# mysqladmin -u root -h rechnername password '****'
Sollte in der „my.cnf“ Datei der Netzwerkzugriff deaktiviert sein (bind-address=127.0.0.1 oder skip-networking), ist es nicht mehr möglich, mit „mysqladmin“ das Passwort zu verändern.
Wird dabei die Fehlermeldung „Host xxx is not allowed to connect to this MySQL server“ angezeigt, gibt es einen Konflikt zwischen der in der MySQL internen Zugriffsdatenbank(Rechnername wird ohne Domain gespeichert) und der Zugriffsprüfung, da hier der Rechnername mit Domain verwendet wird. Dies hängt auch von der Netzwerkkonfiguration des Nameservers oder der „/etc/hosts“ Datei ab.
Um dieses zu lösen muß der „rechnername“ in „rechnername.domain“ geändert werden.
[root@home ~]# mysql -u root -p Enter password: *** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 ...
mysql> SELECT user, host, password FROM mysql.user; +------+-----------------+------------------+ | user | host | password | +------+-----------------+------------------+ | root | localhost | 5d64f420187b1bb1 | | root | rechnername | | +------+-----------------+------------------+
mysql> UPDATE mysql.user SET host="rechnername.domain" WHERE host="rechnername"; Query OK, 1 rows affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT user, host, password FROM mysql.user; +------+------------------------+------------------+ | user | host | password | +------+------------------------+------------------+ | root | localhost | 5d64f420187b1bb1 | | root | rechnername.domain | | +------+------------------------+------------------+
mysql> FLUSH PRIVILEGES; mysql> exit
Anschließend das Kommando wiederholen.
[root@home ~]# mysqladmin -u root -h rechnername.domain password '****'
Anonyme MySql Benutzer
Es kann je nach Distribution auch vorkommen, dass es anonyme MySQL Nutzer gibt. Dies bedeutet, jeder kann sich mit einem beliebigen Nutzernamen am MySQL-Server anmelden, hat jedoch sehr wenig Rechte.
Zu erkennen sind anonyme Nutzer, indem die Spalte user leer ist.
mysql> SELECT user, host, password FROM mysql.user; +------+--------------------+------------------+ | user | host | password | +------+--------------------+------------------+ | root | localhost | 5d64f420187b1bb1 | | root | rechnername.domain | 5d64f420187b1bb1 | | | localhost | | | | rechnername.domain | | +------+--------------------+------------------+
Diese anonymen Nutzer stellen ein Sicherheitsrisiko dar und sollten gelöscht werden.
mysql> DELETE FROM mysql.user WHERE user=''; Query OK, 2 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
mysql> SELECT user, host, password FROM mysql.user; +------+--------------------+------------------+ | user | host | password | +------+--------------------+------------------+ | root | localhost | 5d64f420187b1bb1 | | root | rechnername.domain | 5d64f420187b1bb1 | +------+--------------------+------------------+
Cloud