使用命令行连接到2个MySQL实例,无需密码交互。

问题描述 投票:0回答:1

我想在没有密码交互的情况下连接到mysql数据库(我需要在一个批处理脚本中使用它)。我正在使用这个脚本,但在开始连接之前,我必须插入密码。

mysql -u username@databasename -p "Password" -h hostnamedatabase -P 3344 

我已经尝试了其他的方法,但我没有成功。

mysql -u username@databasename -pPassword -h hostnamedatabase -P 3344 

有没有一种方法可以不用输入密码直接输入?

mysql ssh
1个回答
0
投票

新答案

OP是在远程服务器的命令行上(使用SSH)。从那里。mysql 需要使用无密码 - 可以说 - 在 INSTANCE1 和 INSTANCE2 上创建用户。

这也是可行的。你可以使用 --defaults-group-suffix 开关。

~.my.cnf

让我们从在你的主目录中创建一个名为.my.cnf的文件开始(也就是~.my.cnf)。把这个放在里面。

[client1]
user=INSTANCE1-USERNAME
password=INSTANCE1-PASSWORD
database=INSTANCE1-DATABASE (this could be mysql)
host=INSTANCE1-HOSTNAME-OR-IP

[client2]
user=INSTANCE2-USERNAME
password=INSTANCE2-PASSWORD
database=INSTANCE2-DATABASE (this could be mysql)
host=INSTANCE2-HOSTNAME-OR-IP

保存文件。做 chmod 600 ~/.my.cnf 以确保只有你的用户名和类似rootroot的用户能看到它。

现在,输入这个来进入第一个服务器。

mysql --defaults-group-suffix=1

然后,用这个进入第二个服务器。

mysql --defaults-group-suffix=2

解释

通常~.my.cnf会有以下的代码块

[client]
user=USERNAME
password=PASSWORD
database=DATABASE (this could be mysql)
host=localhost (or whatever hostname/IP)

这样你就可以直接输入 mysql 并登录。MySQL寻找凭证、主机、端口等,在 ~/.my.cnf. 如果它得到这些信息,它会用它来登录MySQL。酷啊 很简单。

--defaults-group-suffix=2 告诉MySQL查询 ~/.my.cnf 不看 [client] 块,而改为 [client2] 块的凭证信息。

同样 --defaults-group-suffix=1 告诉MySQL去寻找 ~/.my.cnf 并阅读 [client1] 块中的凭证信息。

这样一来,你就可以在一个服务器中拥有多个服务器或数据库的凭证,并登录MySQL,而不必通过命令行提示提供凭证。

只要~.my.cnf文件在运行这些脚本的用户名中,你就可以用这个工具来使用脚本。

文档介绍

另一种方法使用 --login-path

请看 https:/dev.mysql.comdocrefman8.0enmysql-config-editor.html。. 它显示你可以登录到mysql使用 --login-path 开关。因为上面的方法对你来说很管用,所以我只是补充一下作为参考。

老答案

实际上你可以这样做。假设你是在Linux上,创建一个 .my.cnf 文件在你的主目录下。在里面输入这个。

[client]
user=username
password=yourpass

然后,你可以做 mysql -h host -P 3344 -D databasename

参见这里的文档。https:/dev.mysql.comdocrefman8.0enoption-files.html。

同时要确保这个文件得到充分的保护(做 chmod 600 ~/.my.cnf).

© www.soinside.com 2019 - 2024. All rights reserved.