Lösung 1:
Sowohl für MySQL als auch für PostgreSQL können Sie Ihren Benutzer und Ihr Passwort in der lokalen Konfigurationsdatei angeben. .my.cnf für MySQL und .pgpass für PostgreSQL. Diese Dateien sollten sich in Ihrem Home-Verzeichnis befinden (d. h. ~/.my.cnf).
.my.cnf:
[mysql]
user=user
password=password
.pgpass:
host:port:database:user:password
Sie können hier einen Platzhaltereintrag haben, der ******* durch ein beliebiges Feld ersetzt.
PS:GEBEN SIE NIEMALS EIN PASSWORT AUF DER KOMMANDOZEILE AN! Mit ps lässt sich das gut sichtbar machen wenn Ihr System nicht so konfiguriert ist, dass Prozesse, die anderen Benutzern gehören, nicht angezeigt werden.
@thinice:Wenn Sie diese Dateien wirklich sicher erstellen möchten, sollten Sie Folgendes tun:
umask 077
touch .my.new.config
umask 022 # or whatever was your default
Auf diese Weise würde die Datei von Anfang an mit sicheren Berechtigungen erstellt und kein Lauscher hätte eine Chance, Ihr Passwort zu stehlen.
PostgreSQL weigert sich ohnehin, die Datei mit Berechtigungen über 0600 zu verwenden.
Lösung 2:
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password
Wie führe ich eine Kommandozeile mit einem sicheren Passwort aus??benutze den Konfigurationseditor!!!
Ab mysql 5.6.6 können Sie das Passwort in einer Konfigurationsdatei speichern und dann cli-Befehle wie diesen ausführen ....
mysql --login-path=storedPasswordKey ....
--login-path ersetzt Variablen... Host, Benutzer UND Passwort. Ausgezeichnet richtig!
Lösung 3:
Setzen Sie das Passwort nicht in Anführungszeichen, da die Anführungszeichen sonst als Teil des Passworts betrachtet werden.
Lösung 4:
MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"
DBNAME="DB_NAME"
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1
STATUS=$?
if [ $STATUS -eq 0 ];
then
echo -e "Database '$DBNAME' is created"
elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null);
then
echo -e "Database '$DBNAME' already exists"
else
echo -e "Failed to create database '$DBNAME'"
fi
rm -r /tmp/error1
Dies wird den Zweck erfüllen. Danke