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 -pmysql -u <user> -p <database> — Verbindet sich direkt mit einer bestimmten Datenbank.
mysql -u admin -p myapp_dbmysql -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 -pmysql -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.sockDatenbank- 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\GCREATE 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.sqlmysqldump -u <user> -p --all-databases > <file> — Exportiert alle Datenbanken.
mysqldump -u root -p --all-databases > all-dbs.sqlmysqldump -u <user> -p <database> <table> > <file> — Exportiert eine einzelne Tabelle.
mysqldump -u root -p myapp_db users > users.sqlmysql -u <user> -p <database> < <file> — Importiert eine SQL-Datei in eine Datenbank.
mysql -u root -p myapp_db < backup.sqlmysqldump -u <user> -p --single-transaction <database> > <file> — Exportiert mit konsistentem Snapshot (InnoDB, ohne Sperre).
mysqldump -u root -p --single-transaction myapp_db > backup.sqlStatus & Ü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.gzzcat <file>.gz | mysql -u <user> -p <database> — Importiert einen gzip-komprimierten SQL-Dump.
zcat backup.sql.gz | mysql -u root -p myapp_dbKILL <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.
Weiterführende Links
- MySQL-Referenzhandbuch – offizielle Dokumentation zu Client und Server (englisch)
- MariaDB Knowledge Base – offizielle MariaDB-Dokumentation (englisch)
- MySQL bei Wikipedia – Hintergrund, Geschichte und Einordnung