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



我想连接到mysql数据库而不与密码交互(我需要在批处理脚本期间使用它(。我正在使用此脚本,但在开始连接之前,我必须插入密码。

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

我尝试过另一种方法,但没有成功

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

有没有办法直接输入密码而无需输入密码?

新答案

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以确保只有您的用户名和类似根/根的用户才能看到它。

现在,键入以下命令以转到第一台服务器:

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 文件位于运行这些脚本的用户名中,就可以将此工具用于脚本。

文档

  • https://dev.mysql.com/doc/refman/8.0/en/option-file-options.html
  • https://dev.mysql.com/doc/refman/8.0/en/option-files.html#option-file-syntax

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

请参阅 https://dev.mysql.com/doc/refman/8.0/en/mysql-config-editor.html。它显示您可以使用--login-path开关登录到mysql。由于上述方法对您来说效果很好,因此我只是将其添加为参考。

旧答案

你实际上可以做到这一点。假设您在 Linux 上,请在主目录下创建一个.my.cnf文件。在其中输入以下内容:

[client]
user=username
password=yourpass

然后,您可以执行mysql -h host -P 3344 -D databasename

请参阅此处的文档:https://dev.mysql.com/doc/refman/8.0/en/option-files.html

还要确保此文件受到充分保护(执行chmod 600 ~/.my.cnf(。

最新更新