通过命令行连接到MySQL而不需要root密码

我正在为一些任务构build一个Bash脚本。 其中一个任务就是在相同的bash脚本中创build一个MySQL数据库。 我现在正在做的是创build两个variables:一个用于存储用户名,另一个用于存储密码。 这是我的脚本的相关部分:

MYSQL_USER=root MYSQL_PASS=mypass_goes_here touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql rm -rf /tmp/script.sql 

但总是得到一个错误,说没有密码的用户root访问被拒绝,我做错了什么? 我需要为PostgreSQL做同样的事情。

对于MySQL和PostgreSQL,您都可以在本地configuration文件中指定您的用户名和密码。 .my.cnf用于MySQL,.pgpass用于PostgreSQL。 这些文件应该在你的主目录(即〜/ .my.cnf)。

.my.cnf:

 [mysql] user=user password=password 

.pgpass:

 host:port:database:user:password 

你可以在这里有一个通配符条目,用任何字段代替*******。

PS: 不要在命令行上指定密码! 如果您的系统未configuration为不显示属于其他用户的进程,则可以使用ps完美显示。

@thinice:如果你想创build这些文件真的很安全,你应该这样做:

 umask 077 touch .my.new.config umask 022 # or whatever was your default 

通过这种方式,文件将从一开始就以安全的权限创build,窃听者不会有机会泄露您的密码。

无论如何,PostgreSQL将拒绝使用权限高于0600的文件。

 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 

这将做的伎俩谢谢

 MYSQL_USER="root" MYSQL_PASS="mypass_goes_here" touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql mysql --user=$MYSQL_USER --password=$MYSQL_PASS < /tmp/script.sql rm -rf /tmp/script.sql 

确保你如何写你的通行证,它不会逃脱

–defaults-extra-file =是一件好事(tm)(c)

不要把密码引起来,因为如果你这样做的话引用被认为是密码的一部分。

 mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password 

如何使用安全密码执行命令行? 使用configuration编辑器!

从MySQL 5.6.6开始,您可以将密码存储在configuration文件中,然后执行cli命令,如下所示。

 mysql --login-path=storedPasswordKey .... 

–login-pathreplacevariables…主机,用户和密码。 优秀的权利!