Wenn Sie MySQL-Datenbanken auf Ihrem System bearbeiten wollen, dann benötigen Sie notwendigerweise einen MySQL-Datenbankserver. MySQL ist ein bekanntes und verbreitetes Datenbanksystem für Client-Server-Architekturen.
So können Sie feststellen, welche MySQL-Pakete bereits auf Ihrem System installiert sind. So könnte eine Ausgabe aussehen:
hans@mint20:~$ dpkg --list | grep mysql ii gambas3-gb-db-mysql 3.17.3+git202207211120... amd64 MySQL driver for the Gambas database ii gambas3-gb-mysql 3.17.3+git202207211120... amd64 Gambas MySQL component ii libmysqlclient21:amd64 8.0.30-0ubuntu0.20.04.2 amd64 MySQL database client library ii mysql-common 5.8+1.0.5ubuntu2 all MySQL database common files, e.g. /etc/mysql/my.cnf
Der MySQL-Server kann über die Anwendungsverwaltung installiert werden oder Sie geben in einem Terminal folgende Zeilen ein:
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install mysql-server
Gut zu wissen: Während der Installation wird automatisch auch der MySQL-Konsolen-Client `mysql` mit installiert, obwohl dieser bei Linux Mint im Software-Manager als „nicht installiert“ angezeigt wird.
Beachten Sie, dass der MySQL-Server zum Abschluss der Installation bereits gestartet wurde, was Sie mit dem folgenden Befehl in einer Konsole überprüfen können:
$ systemctl status mysql | grep 'Status' Status: "Server is operational"
Während der Installation des MySQL-Datenbankservers (Version 8) wird automatisch ein Konto für den MySQL-Administrator root@localhost angelegt – aber kein MySQL-Administrator-Passwort erfragt.
Im folgenden Abschnitt wird dem Administrator-Konto ein Passwort hinzugefügt und die Authentifizierungsmethode geändert, damit sich ein Datenbank-Benutzer auch mit dem MySQL-Client in einer Konsole beim MySQL-Server anmelden darf.
Starten Sie in einer Konsole den MySQL-Client `mysql`. Geben Sie den folgenden Befehl ein und anschließend Ihr System-Passwort:
$ sudo mysql
Sie müssen jetzt für den MySQL-Administrator root@localhost das Passwort festlegen und das Authentifizierungs-Plugin von MySQL vom Standard-Plugin auth_socket (mindestens) auf das Plugin mysql_native_password umstellen:
$ mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<root-password>'; $ mysql> FLUSH PRIVILEGES; -- Berechtigungstabellen neu laden und Änderungen übernehmen
Das traditionelle Plugin mysql_native_password zur Authentifizierung ist zwar nicht sehr sicher, da es nur einen Hash des Passworts verwendet, ist dafür aber mit älteren DB-Treibern kompatibel. Alternativ wechseln Sie später auf ein anderes Plugin, die Sie unter dem Link: https://dev.mysql.com/doc/refman/8.0/en/authentication-plugins.html erkunden können.
Prüfen Sie nun, ob auf das Authentifizierungs-Plugin mysql_native_password umgestellt wurde:
$ mysql> SELECT user, host, plugin FROM mysql.user WHERE user='root'; +------+-----------+-----------------------+ | user | host | plugin | +------+-----------+-----------------------+ | root | localhost | mysql_native_password | +------+-----------+-----------------------+ 1 row in set (0,00 sec) mysql> quit Bye $
Sie können sich nun mit Ihrem DB-Konto (root@localhost, <root-password>) mit dem MySQL-Client-Programm mysql lokal am MySQL-Server anmelden, was mit $ sudo mysql nicht mehr möglich ist!
Die folgenden fünf Befehle zum Verbinden von MySQL-Client und MySQL-Server sind gleichwertig:
$ mysql -u root -p ' Standard-Host ist `localhost` und Standard-Port `3306` $ mysql -h localhost --user=root root -p $ mysql -h localhost --port=3306 -u root -p $ mysql --host=<hostname> --port=3306 -u root -p $ mysql --host=<hostname> --port=3306 --user=root --password
So können Sie sich zum Beispiel die Version des installierten MySQL-Datenbankservers anzeigen lassen:
$ mysql -h localhost -u root -p mysql> SELECT VERSION(); +-------------------------+ | VERSION() | +-------------------------+ | 8.0.30-0ubuntu0.20.04.2 | +-------------------------+ 1 row in set (0,00 sec) mysql> quit Bye $
Zur Absicherung der MySQL-Server-Installation wird das installierte Sicherheitsskript aufgerufen:
$ sudo mysql_secure_installation
Ansonsten sollten Sie bei allen weiteren Nachfragen im Dialog 'y' eingegeben, um sichere Standardeinstellungen des MySQL-Servers festzulegen.
Eine umfangreiche Dokumentation zum MySQL-Datenbankserver finden Sie unter:
LINK1: https://dev.mysql.com/doc/refman/8.0/en/
Die letzten Einträge der aktuellen Fehler-Log-Datei des MySQL-Datenbankserver können Sie sich mit dem ersten Befehl in einer Konsole ansehen; den kompletten Inhalt mit dem zweiten Befehl:
$ tail -f /var/log/mysql/error.log $ xed /var/log/mysql/error.log
Achtung! Der MySQL-Datenbankserver wird bei jedem Systemstart automatisch gestartet (Standard). Das können Sie mit diesen beiden Befehlen ändern:
$ sudo systemctl disable mysql -- MySQL aus der Autostart-Liste entfernen $ sudo systemctl enable mysql -- MySQL der Autostart-Liste wieder hinzufügen
Wenn der MySQL-Datenbankserver beim Systemstart nicht gestattet wird, dann können Sie ihn selbst starten.
Die folgenden Aufrufe in einem Terminal steuern den MySQL-Datenbankserver mit den in der Liste aufgeführten Parametern:
$ sudo systemctl parameter mysql {start|stop|restart|reload|force-reload|status} oder $ sudo service mysql parameter {start|stop|restart|reload|force-reload|status}
Beispiele:
$ sudo systemctl start mysql $ sudo service mysql stop $ systemctl status mysql '-- Aufruf ohne erhöhte Berechtigungen nur bei der Statusabfrage
Der MySQL-Server ist so (vor-)konfiguriert, dass sich der DB-Administrator nur lokal am MySQL-Server anmelden darf. Diese Einschränkung wird auch durch ein geändertes Binding nicht aufgehoben, denn es wird durch den Kontotyp – hier root@localhost – festgelegt!
Damit sich weitere DB-Benutzer von einem beliebigen Host zum MySQL-Server verbinden dürfen, muss
user_name@localhost Zugriff nur von localhost, user_name@192.168.0.3 Zugriff nur von 192.168.0.3, user_name@192.168.0.% Zugriff aus dem IP-Bereich 192.168.0.1 bis 192.168.0.254, user_name@% Zugriff von jedem Host.
So stellen Sie fest, an welchen IP-Adressen der MySQL-Server lauscht oder gebunden ist:
$ sudo netstat -tupan | grep mysql [sudo] Passwort für hans: Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name ---------------------------------------------------------------------------------------------------------- tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN 8678/mysqld tcp 0 0 127.0.0.1:37926 127.0.0.1:3306 VERBUNDEN 9478/mysql tcp6 0 0 :::3306 :::* LISTEN 8678/mysqld tcp6 0 0 127.0.0.1:3306 127.0.0.1:37926 VERBUNDEN 8678/mysqld $
Diese oberen Ausgaben korrespondieren mit der Ausgabe des folgenden Befehls im MySQL-Client:
$ mysql -h localhost -u root -p mysql> SHOW variables WHERE variable_name LIKE 'bind%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | bind_address | * | +---------------+-------+ 1 row in set (0,00 sec) mysql>
Detaillierte Informationen zum Binding finden Sie unter https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_bind_address.
Die Übung – ausgeführt in einer Konsole mit dem MySQL-Monitor `psql` (Client) – besteht darin, dass Sie wichtige Befehle noch einmal wiederholen und dabei
$ systemctl status mysql $ sudo systemctl start mysql -- Option $ sudo service mysql force-reload $ mysql -h localhost --port=3306 -u root -p mysql> SHOW DATABASES; -- Achten Sie hier auf das Semikolon mysql> HELP -- Jede folgende Zeile einzeln abarbeiten mysql> HELP CREATE DATABASE mysql> quit Bye
Wenn Sie eine bestimmte Hilfe aufrufen – wie 'HELP CREATE DATABASE' – dann wird Ihnen auch hinter 'URL:' ein passender Link wie https://dev.mysql.com/doc/refman/8.0/en/create-database.html angezeigt, den Sie im Kontext-Menü mit der rechten Maustaste sofort interaktiv öffnen können!
Für den Fall einer De-Installation des Datenbank-Servers ist es immer eine gute Idee, wenn Sie von den bisher verwendeten Datenbanken eine komplette Sicherung von Struktur und Daten anlegen oder von ausgewählten Datenbanken:
$ mysqldump --comments --dump-date --no-tablespaces --user root --password --all-databases > all-databases.sql $ mysqldump --comments --dump-date --no-tablespaces --user root --password --databases DB1Name DB2Name > db1db2.sql
Wenn Sie sich von MySQL – hier in der Version 8 – trennen wollen, dann de-installieren Sie bitte nur den MySQL-Server und den MySQL-Client; entweder über die Synaptic-Paketverwaltung oder in einer Konsole mit folgendem Befehl:
$ sudo apt-get remove --purge mysql-client mysql-client-8.0 mysql-client-core-8.0 mysql-server mysql-server-8.0 mysql-server-core-8.0
Anschließend können Sie die folgenden Verzeichnisse löschen:
$ sudo rm -rf /var/lib/mysql* /var/log/mysql
Hinweis
└── mysql ├── conf.d │ ├── mysql.cnf │ └── mysqldump.cnf ├── my.cnf -> /etc/alternatives/my.cnf └── my.cnf.fallback
Diese Ordner und Verzeichnisse existieren in der Regel schon, bevor MySQL installiert wurde und sollten daher nicht gelöscht werden!