wake-up-neo.net

sh-Skript zum Ausführen von MySQL-Skripten mit Eingabe von pass

Ich möchte ein mysql-Skript ausführen, bei dem der Benutzer aufgefordert wird, das Kennwort dynamisch über die Befehlszeile einzugeben, wenn möglich mit der Meldung Enter your $root password. Es funktioniert jedoch nicht wie erwartet. Soweit habe ich

mysql -u root -p CREATE DATABASE IF NOT EXISTS Test

außerdem, wenn die Datenbank erstellt wird, wie man sich von MySQL abmeldet und zu den Bash-Befehlen zurückkehrt.

3
Jocky Doe

Nach dem docs

mysql -u root -p --execute="SELECT User, Host FROM mysql.user"

fordert zur Eingabe eines Kennworts auf, führt den angegebenen Befehl aus und kehrt zur Shell zurück (keine Abmeldung erforderlich).

Wenn Sie stattdessen eine eigene Eingabeaufforderung wünschen, müssen Sie diese skripten:

#!/usr/bin/env bash

echo "Enter pwd"
read pwd
mysql -u root -p$pwd --execute="SELECT User, Host FROM mysql.user"

Bitte beachten Sie, dass zwischen -p und $pwd kein Leerzeichen stehen darf, da mysql dann $pwd als Name der Datenbank betrachtet.

Ich würde das nicht empfehlen, da das Passwort dann im Terminal im Klartext angezeigt wird, während mysql -p stattdessen Sternchen anzeigt.

7
PerlDuck

Das Skripting von MySQL-Abfragen kann auf verschiedene Arten erfolgen. PerlDucks Antwort berührt bereits den Parameter -e oder --execute. Eine andere Möglichkeit wäre, den Befehl source von MySQL selbst zu verwenden, um ein SQL-Skript auszuführen:

$ mysql -u root -p -e 'source foo.sql'
Enter password:
+------+-------------+
| a    | b           |
+------+-------------+
|    1 | hello world |
+------+-------------+
$ cat foo.sql
use foo_db;
SELECT * FROM foo_tb;

Eine andere Möglichkeit besteht darin, das Skript in mysql 's stdin umzuleiten:

$ Sudo mysql -u root -p < foo.sql
Enter password:
a   b
1   hello world

Beachten Sie jeweils den Unterschied in der Formatierung. Natürlich können Sie auch here-doc oder herestring verwenden, um dieselben Ergebnisse zu erzielen, obwohl die Verwendung einer Textdatei die Ausführung langwieriger Abfragen ermöglicht, während here-docs und here-strings für mäßig kurze Anweisungen nützlicher sind.

1