在命令行中非交互地执行Google Cloud SQL查询

时间:2019-05-14 09:15:04

标签: mysql bash google-cloud-sql non-interactive

我正在使用gcloud SDK编写脚本来编排Google Cloud SQL实例。

SDK有一个 connect 命令,该命令使用用户名,但必须在提示符下输入密码-即,不能将其作为参数传递。

成功进行身份验证后,便可以执行查询-流程如下:

$ gcloud sql connect instance-name --user=root
Whitelisting your IP for incoming connection for 5 minutes...done.
Connecting to database with SQL user [root].Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8054
Server version: 5.7.14-google-log (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> USE tablename;

我需要非交互式地执行此操作。我尝试过:

gcloud sql connect instance-name --user=root && echo "password" && echo "USE tablename;"

但是它只执行第一个命令。

如何在单个命令中连接,认证和运行查询?

更新

根据@danlor链接到this question的评论,我都尝试过:

yes password | gcloud...

printf 'password\n' | gcloud...

,但两者仍然提示输入密码。

1 个答案:

答案 0 :(得分:0)

看起来gcloud sql connect命令不具备将execute标志传递给MySQL命令行实用程序的能力。我建议为此使用Cloud SQL proxy。您的脚本可能类似于以下内容:

./cloud_sql_proxy -dir=/cloudsql -instances=<INSTANCE_CONNECTION_NAME> &
PID=$!
mysql -u root --password "YOUR-PASSWORD" -S /cloudsql/<INSTANCE_CONNECTION_NAME> --execute "USE tablename;"
kill $PID