# mysql — Der MySQL-/MariaDB-Kommandozeilen-Client

> Praxis-Guide zum mysql-Client: Verbindung, Abfragen, Import/Export, Benutzer- und Server-Verwaltung für MySQL und MariaDB im Terminal.

Source: https://www.jpkc.com/db/cheatsheets/build-languages/mysql/

<!-- PROSE:intro -->
`mysql` ist der klassische Kommandozeilen-Client für MySQL und das kompatible MariaDB – mit ihm verbindest du dich zum Datenbankserver und setzt SQL-Abfragen interaktiv in einer Eingabeaufforderung ab. Genauso gut läuft er nicht-interaktiv: Mit `-e '<query>'` führst du einzelne Befehle aus oder schickst per Pipe und Umleitung (`<`, `|`) ganze SQL-Dateien und Dumps hinein – ideal für Skripte, Backups und Cronjobs. Dieser Guide zeigt dir die wichtigsten Handgriffe vom Verbindungsaufbau über Datenbank- und Benutzerverwaltung bis zu Import, Export und Server-Überwachung.
<!-- PROSE:intro:end -->

## Verbindung

`mysql -u <user> -p` — Verbindet sich mit Benutzername und Passwort-Abfrage.

```bash
mysql -u root -p
```

`mysql -u <user> -p <database>` — Verbindet sich direkt mit einer bestimmten Datenbank.

```bash
mysql -u admin -p myapp_db
```

`mysql -h <host> -P <port> -u <user> -p` — Verbindet sich mit einem entfernten Server auf einem bestimmten Port.

```bash
mysql -h db.example.com -P 3306 -u admin -p
```

`mysql -u <user> -p -e '<query>'` — Führt eine Abfrage aus und beendet sich.

```bash
mysql -u root -p -e 'SHOW DATABASES;'
```

`mysql -u <user> -p --socket=<path>` — Verbindet sich über einen Unix-Socket.

```bash
mysql -u root -p --socket=/var/run/mysqld/mysqld.sock
```

## Datenbank- und Tabellen-Operationen

`SHOW DATABASES;` — Listet alle Datenbanken auf.

```bash
SHOW DATABASES;
```

`USE <database>;` — Wechselt in eine Datenbank.

```bash
USE myapp_db;
```

`SHOW TABLES;` — Listet alle Tabellen der aktuellen Datenbank auf.

```bash
SHOW TABLES;
```

`DESCRIBE <table>;` — Zeigt die Tabellenstruktur (Spalten, Typen, Schlüssel).

```bash
DESCRIBE users;
```

`SHOW CREATE TABLE <table>;` — Zeigt die CREATE-TABLE-Anweisung an.

```bash
SHOW CREATE TABLE users\G
```

`CREATE DATABASE <name> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;` — Legt eine Datenbank mit UTF-8-Unterstützung an.

```bash
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

`DROP DATABASE <name>;` — Löscht eine Datenbank (unwiderruflich).

```bash
DROP DATABASE old_db;
```

## Benutzerverwaltung

`CREATE USER '<user>'@'<host>' IDENTIFIED BY '<password>';` — Legt einen neuen Benutzer an.

```bash
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'secretpass';
```

`GRANT ALL PRIVILEGES ON <db>.* TO '<user>'@'<host>';` — Erteilt alle Rechte auf einer Datenbank.

```bash
GRANT ALL PRIVILEGES ON myapp_db.* TO 'appuser'@'localhost';
```

`GRANT SELECT, INSERT, UPDATE ON <db>.* TO '<user>'@'<host>';` — Erteilt bestimmte Rechte.

```bash
GRANT SELECT, INSERT, UPDATE ON myapp_db.* TO 'readonly'@'%';
```

`FLUSH PRIVILEGES;` — Lädt die Rechte-Tabellen neu.

```bash
FLUSH PRIVILEGES;
```

`SHOW GRANTS FOR '<user>'@'<host>';` — Zeigt die Rechte eines Benutzers an.

```bash
SHOW GRANTS FOR 'appuser'@'localhost';
```

`DROP USER '<user>'@'<host>';` — Löscht einen Benutzer.

```bash
DROP USER 'olduser'@'localhost';
```

## Import & Export

`mysqldump -u <user> -p <database> > <file>` — Exportiert eine Datenbank in eine SQL-Datei.

```bash
mysqldump -u root -p myapp_db > backup.sql
```

`mysqldump -u <user> -p --all-databases > <file>` — Exportiert alle Datenbanken.

```bash
mysqldump -u root -p --all-databases > all-dbs.sql
```

`mysqldump -u <user> -p <database> <table> > <file>` — Exportiert eine einzelne Tabelle.

```bash
mysqldump -u root -p myapp_db users > users.sql
```

`mysql -u <user> -p <database> < <file>` — Importiert eine SQL-Datei in eine Datenbank.

```bash
mysql -u root -p myapp_db < backup.sql
```

`mysqldump -u <user> -p --single-transaction <database> > <file>` — Exportiert mit konsistentem Snapshot (InnoDB, ohne Sperre).

```bash
mysqldump -u root -p --single-transaction myapp_db > backup.sql
```

## Status & Überwachung

`SHOW PROCESSLIST;` — Zeigt laufende Abfragen und Verbindungen an.

```bash
SHOW PROCESSLIST;
```

`SHOW STATUS;` — Zeigt Server-Statusvariablen an.

```bash
SHOW GLOBAL STATUS LIKE 'Threads%';
```

`SHOW VARIABLES LIKE '<pattern>';` — Zeigt Server-Konfigurationsvariablen an.

```bash
SHOW VARIABLES LIKE 'max_connections';
```

`SHOW TABLE STATUS;` — Zeigt Informationen zu Tabellen an (Engine, Zeilen, Größe).

```bash
SHOW TABLE STATUS FROM myapp_db;
```

`SELECT version();` — Zeigt die MySQL-/MariaDB-Version an.

```bash
SELECT version();
```

## Häufige Muster

`mysql -u <user> -p -N -B -e '<query>'` — Führt eine Abfrage ohne Kopfzeilen und tabgetrennt aus (für Skripte).

```bash
mysql -u root -p -N -B -e 'SELECT id, name FROM myapp_db.users'
```

`mysqldump ... | gzip > <file>.gz` — Exportiert und komprimiert in einem Schritt.

```bash
mysqldump -u root -p myapp_db | gzip > backup-$(date +%F).sql.gz
```

`zcat <file>.gz | mysql -u <user> -p <database>` — Importiert einen gzip-komprimierten SQL-Dump.

```bash
zcat backup.sql.gz | mysql -u root -p myapp_db
```

`KILL <process_id>;` — Beendet eine laufende Abfrage über ihre Prozess-ID.

```bash
KILL 1234;
```

<!-- PROSE:outro -->
## Fazit

Der `mysql`-Client ist seit Jahren das Schweizer Taschenmesser für MySQL und MariaDB: interaktiv für schnelle Abfragen, im Skript für Backups und Migrationen. Achte beim Passwort auf Sicherheit – `-p<passwort>` direkt auf der Kommandozeile landet in der Shell-History und ist in der Prozessliste sichtbar. Gib das Passwort stattdessen interaktiv über die `-p`-Abfrage ein oder hinterlege es in einer `~/.my.cnf` mit `chmod 600`; das gilt genauso für `mysqldump`-Aufrufe in Cronjobs. Und bedenke: `DROP DATABASE`, `DROP TABLE`, `TRUNCATE` sowie ein `DELETE` ohne `WHERE` sind unwiderruflich – ein aktuelles Backup ist dein bestes Sicherheitsnetz.

## Weiterführende Links

- [MySQL-Referenzhandbuch](https://dev.mysql.com/doc/) – offizielle Dokumentation zu Client und Server (englisch)
- [MariaDB Knowledge Base](https://mariadb.com/kb/en/) – offizielle MariaDB-Dokumentation (englisch)
- [MySQL bei Wikipedia](https://de.wikipedia.org/wiki/MySQL) – Hintergrund, Geschichte und Einordnung
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [artisan](https://www.jpkc.com/db/cheatsheets/build-languages/artisan/) – Laravels CLI für Migrationen, Tinker und Wartung
- [cargo](https://www.jpkc.com/db/cheatsheets/build-languages/cargo/) – Build- und Paketmanager für Rust
- [composer](https://www.jpkc.com/db/cheatsheets/build-languages/composer/) – Abhängigkeitsverwaltung für PHP-Projekte

