MySQL von der Kommandozeile aus administrieren

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)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.