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.

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.

Verbindung

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

mysql -u root -p

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

mysql -u admin -p myapp_db

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

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

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

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

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

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

Datenbank- und Tabellen-Operationen

SHOW DATABASES; — Listet alle Datenbanken auf.

SHOW DATABASES;

USE <database>; — Wechselt in eine Datenbank.

USE myapp_db;

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

SHOW TABLES;

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

DESCRIBE users;

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

SHOW CREATE TABLE users\G

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

CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

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

DROP DATABASE old_db;

Benutzerverwaltung

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

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

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

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

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

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

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

FLUSH PRIVILEGES;

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

SHOW GRANTS FOR 'appuser'@'localhost';

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

DROP USER 'olduser'@'localhost';

Import & Export

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

mysqldump -u root -p myapp_db > backup.sql

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

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

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

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

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

mysql -u root -p myapp_db < backup.sql

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

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

Status & Überwachung

SHOW PROCESSLIST; — Zeigt laufende Abfragen und Verbindungen an.

SHOW PROCESSLIST;

SHOW STATUS; — Zeigt Server-Statusvariablen an.

SHOW GLOBAL STATUS LIKE 'Threads%';

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

SHOW VARIABLES LIKE 'max_connections';

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

SHOW TABLE STATUS FROM myapp_db;

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

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).

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

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

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.

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

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

KILL 1234;

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.

Verwandte Kommandos

  • artisan – Laravels CLI für Migrationen, Tinker und Wartung
  • cargo – Build- und Paketmanager für Rust
  • composer – Abhängigkeitsverwaltung für PHP-Projekte