我想连接到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
(。