Solución 1:
Tanto para MySQL como para PostgreSQL puede especificar su usuario y contraseña en el archivo de configuración local. .my.cnf para MySQL y .pgpass para PostgreSQL. Estos archivos deben estar en su directorio de inicio (es decir, ~/.my.cnf).
.mi.cnf:
[mysql]
user=user
password=password
.pgpass:
host:port:database:user:password
Puede tener una entrada comodín aquí, sustituyendo cualquier campo por *******.
PD:¡NUNCA ESPECIFIQUE UNA CONTRASEÑA EN LA LÍNEA DE COMANDOS! Esto se puede ver perfectamente con ps si su sistema no está configurado para no mostrar procesos que pertenecen a otros usuarios.
@thinice:si desea crear esos archivos realmente seguros, debe hacer:
umask 077
touch .my.new.config
umask 022 # or whatever was your default
De esta manera, el archivo se crearía con permisos seguros desde el principio y ningún intruso tendría la posibilidad de obtener su contraseña.
PostgreSQL se negará a usar el archivo con permisos superiores a 0600 de todos modos.
Solución 2:
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password
¿Cómo ejecuto una línea de comando con una contraseña segura? ¡Use el editor de configuración!
A partir de mysql 5.6.6, puede almacenar la contraseña en un archivo de configuración y luego ejecutar comandos cli como este....
mysql --login-path=storedPasswordKey ....
--login-path reemplaza las variables... host, usuario Y contraseña. ¡excelente, correcto!
Solución 3:
No ponga comillas alrededor de la contraseña porque si lo hace, las comillas se considerarán parte de la contraseña.
Solución 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
Esto hará el truco. Gracias