在维护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"
```