在维护InnoDB Cluster时,我们可以使用mysqlsh来查看MGR集群的状态或者对集群进行操作。为了避免在脚本中暴露密码并实现交互式输入密码,我们可以使用密码保存方法。以下是如何使用mysqlsh命令行模式实现类似mysql -e "show processlist;"的效果:

1. 首先,我们需要配置保存密码。默认设置下,credentialStore.helper的值为default。要禁用密码存储和检索功能,可以将credentialStore.helper设置为空字符串。注意,要使设置在退出mysqlsh后的下一次生效,需要使用setPersist方法。

```javascript

shell.options.setPersist("credentialStore.helper", "");

```

2. 如果显示为空字符串,则无法使用密码存储和检索。这通常是因为没有安装mysql_config_editor。mysql shell的密码保存实际上是通过mysql_config_editor实现的。

3. 使用credentialStore.savePasswords参数控制每次连接时保存密码的行为。默认情况下,该参数值为prompt,表示交互模式下会出现选择是否保存密码的提示。

4. 在脚本中调用mysqlsh查看MGR集群状态或执行操作时,可以使用以下语法:

```javascript

mysqlsh -h172.16.22.1 -P3306 -uroot -p -- cluster status

```

这将直接输出集群状态信息,等同于:

```javascript

mysqlsh -h172.16.22.1 -P3306 -uroot -pvar cluster=dba.getCluster()cluster.status()

```

请根据提供的内容完成内容重构,并保持段落结构:

• always:自动保存密码,有交互式选择;

• never:不保存密码,无交互式选择。

修改后的代码如下:

```javascript

shell.options.setPersist("credentialStore.savePasswords", "always");

```

查看当前保存了密码的连接串:

可以在 mysqlsh 中查看:

```javascript

JS > shell.listCredentials()["root@localhost", "universe_op@10.186.63.93:3306", "root@127.0.0.1:3306"]

```

实际上是通过 mysql_config_editor 保存的密码,所以也可以用 mysql_config_editor print --all 查看,与上面输出的连接串一一对应:

```bash

[root@10-186-63-93 ~]# mysql_config_editor print --all

[universe_op@10.186.63.93:3306]user = universe_oppassword = *****host = 10.186.63.93port = 3306[root@localhost]user = rootpassword = *****host = localhost[root@127.0.0.1:3306]user = rootpassword = *****host = 127.0.0.1port = 3306

```

设置连接串保存密码:

正常情况下每次使用 mysqlsh 连接 MySQL Server,输入密码后都会询问是否保存密码,键入 “Y” 即可保存密码:

```bash

[root@10-186-63-93 ~]# mysqlsh universe_op@10.186.63.93:3306Please provide the password for 'universe_op@10.186.63.93:3306': ****Save password for 'universe_op@10.186.63.93:3306'? [Y]es/[N]o/Ne[v]er (default No):Y

```

要保存指定连接串的密码,可以使用以下命令:

```bash

mysql_config_editor set --login-path="universe_op@10.186.63.93:3306" --host=10.186.63.93 --port=3306 --user=universe_op -p

```

在接下来的使用 mysqlsh 登录时,不需要输入密码即可登录。

如果要删除对应的连接串密码,可以使用以下命令:

```bash

mysql_config_editor remove --login-path="universe_op@10.186.63.93:3306"

```