Dieser Beitrag führt dich durch die wichtigsten Befehle, um eine MySQL-Datenbank von der Kommandozeile aus zu administrieren. Zunächst muss dazu die MySQL Command Promt geöffnet werden:
mysql -u root -p
Datenbank anlegen
CREATE DATABASE database_name;
Das Ergebnis sollte so aussehen
Query OK, 1 row affected (0.00 sec)
Folgende Ausgabe erscheint, wenn die Datenbank bereits existiert:
ERROR 1007 (HY000): Can't create database 'database_name'; database exists
Um zu vermeiden, dass die Datenbank bereits existiert, kann man den Befehl wie folgt anpassen:
CREATE DATABASE IF NOT EXISTS database_name;
Wenn die Datenbank bereits existiert sieht die Ausgabe dann so aus:
Query OK, 1 row affected, 1 warning (0.00 sec)
1 warning ist der Hinweis, dass die Datenbank bereits bestand und keine neue Datenbank angelegt wurde.
Alle Datenbanken anzeigen
SHOW DATABASES;
Die Ausgabe sollte wie folgt aussehen:
+--------------------+
| Database |
+--------------------+
| information_schema |
| database_name |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Folgende Datenbanken sind Standard-MySQL-Datenbanken und sollten nicht angefasst werden:
- information_schema
- mysql
- performance_schema
- sys
Datenbank löschen
DROP DATABASE database_name;
Das Ergebnis sollte wie folgt aussehen:
Query OK, 0 rows affected (0.00 sec)
Folgende Meldung erscheint, sofern die angegebene Datenbank nicht existiert:
ERROR 1008 (HY000): Can't drop database 'database_name'; database doesn't exist
Dies kann vermieden werden, wenn der Befehl um ein IF EXISTS
ergänzt wird:
DROP DATABASE IF EXISTS database_name;
MySQL-User anlegen
CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';
Dieser Befehl setzt den Hostname auf localhost
. Das bedeutet, der Nutzer kann sich nur von localhost (also dem Server selbst) mit der Datenbank verbinden. Wenn du stattdessen eine bestimmte IP angeben möchtest, von der sich der User verbinden darf, dann musst du diese – statt localhost
– angeben. Eine weitere Möglichkeit ist auch %
als Wildcard anzugeben – dann darf sich der User von überall mit der Datenbank verbinden (Achtung – unsicher!).
Um zu vermeiden, dass ein User angelegt werden soll, der bereits existiert, hilft auch hier wieder ein IF NOT EXISTS
:
CREATE USER IF NOT EXISTS 'database_user'@'localhost' IDENTIFIED BY 'user_password';
Das Ergebnis sollte wie folgt aussehen:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Der 1 warning Hinweis zeigt an, dass der User bereits existierte
MySQL-Version abfragen
mysql --version
User-Kennwort ändern
Sofern MySQL 5.7.6 oder neuer oder MariaDB 10.1.20 oder neuer im Einsatz ist, kannst du über folgenden Befehl ein User-Kennwort ändern:
ALTER USER 'database_user'@'localhost' IDENTIFIED BY 'new_password';
Hast du eine ältere Version im Einsatz, musst du stattdessen folgenden Befehl nutzen:
SET PASSWORD FOR 'database_user'@'localhost' = PASSWORD('new_password');
Das Ergebnis sollte wie folgt aussehen:
Query OK, 0 rows affected (0.00 sec)
Alle MySQL-Benutzer anzeigen
SELECT user, host FROM mysql.user;
Das Ergebnis sollte wie folgt aussehen:
+------------------+-----------+
| user | host |
+------------------+-----------+
| database_user | % |
| database_user | localhost |
| debian-sys-maint | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)
MySQL-Benutzer löschen
Folgender Befehl löscht einen MySQL-Benutzer:
DROP USER 'database_user@'localhost';
Versucht man einen nicht existierenden User zu löschen, erscheint folgende Meldung:
ERROR 1396 (HY000): Operation DROP USER failed for 'database_user'@'localhost'
Wie auch zuvor hilft hier ein IF EXISTS
:
DROP USER IF EXISTS 'database_user'@'localhost';
Das Ergebnis sieht dann wie folgt aus:
Query OK, 0 rows affected, 1 warning (0.00 sec)
Der 1 warning Hinweis zeigt an, dass der User nicht existierte.
Einem User Berechtigungen zuweisen
Um einem User alle Berechtigungen für eine spezielle Datenbank zuzuweisen, folgenden Befehl nutzen:
GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';
Um stattdessen alle Berechtigungen für alle Datenbanken zuzuweisen, folgenden Befehl nutzen
GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';
Um einem User alle Berechtigungen für eine spezielle Tabelle in einer speziellen Datenbank zuzuweisen, folgenden Befehl nutzen:
GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';
Um nur gewisse Rechte für eine spezielle Datenbank zu vergeben, folgenden Befehl nutzen:
GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';
Berechtigungen entziehen
Um einem User alle Berechtigungen für eine spezielle Datenbank zu entziehen, folgenden Befehl nutzen:
REVOKE ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';
Berechtigungen anzeigen
Um die Berechtigungen für einen User anzeigen zu lassen, folgenden Befehl nutzen:
SHOW GRANTS FOR 'database_user'@'localhost';
Das Ergebnis sollte in etwa so aussehen:
+---------------------------------------------------------------------------+
| Grants for database_user@localhost
| +---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'database_user'@'localhost' |
| GRANT ALL PRIVILEGES ON `database_name`.* TO 'database_user'@'localhost'
| +---------------------------------------------------------------------------+
2 rows in set (0.00 sec)