ott*_*ath 5 google-cloud-sql google-cloud-platform
我用来gcloud sql instances create创建 CloudSQL 实例。通常,该命令会超时,但会提供一个等待数据库创建完成的命令。
$ gcloud sql instances create mydb
Creating Cloud SQL instance...failed.
ERROR: (gcloud.sql.instances.create) Operation https://www.googleapis.com/sql/v1beta4/projects/foobar/operations/abcd is taking longer than expected.
You can continue waiting for the operation by running `gcloud sql operations wait --project foobar abcd`
$ gcloud sql operations wait --project foobar abcd
Waiting for [https://www.googleapis.com/sql/v1beta4/projects/foobar/operations/abcd]...done.
NAME TYPE START END ERROR STATUS
abcd CREATE 2018-03-19T15:04:29.477+00:00 2018-03-19T15:10:08.561+00:00 - DONE
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以配置超时gcloud sql instances create?我似乎在文档中找不到任何内容,甚至找不到它默认使用的超时。
另一种选择是异步启动实例创建,列出挂起的操作并等待其完成:
$ gcloud sql instances create mydb --async
$ PENDING_OPERATIONS=$(gcloud sql operations list --instance=mydb --filter='status!=DONE' --format='value(name)')
$ gcloud sql operations wait "${PENDING_OPERATIONS}"
Run Code Online (Sandbox Code Playgroud)
但话又说回来,会gcloud sql operations wait在某个时候超时吗?文档也没有提到任何超时。
我认为它超时了,因为我正在最小的可用机器上创建 MySQL 实例:db-f1-micro,这对于我的开发平台来说已经足够了。
我尝试了多种选项来捕获命令输出并运行建议的命令,但找不到获取它的方法。就好像输出打印在 stderr 或 stdout 之外的其他内容上。
我已经尝试过以下操作:
MyVAR=$($COMMAND)
$COMMAND | tee command.log
$COMMAND 2>&1 > command.log
Run Code Online (Sandbox Code Playgroud)
如果我们可以捕获命令的输出,那么我的下面的脚本就可以工作。
gcloud sql instances create ${MYSQL_INSTANCE} \
--assign-ip \
${BACKUP} \
${BACKUP_START_TIME} \
${BACKUP_ENABLE_BIN_LOG} \
--database-flags=${MYSQL_FLAGS} \
--database-version=${MYSQL_DB_VERSION} \
--gce-zone=${MYSQL_ZONE} \
--maintenance-release-channel=production \
--maintenance-window-day=MON \
--maintenance-window-hour=4 \
--pricing-plan=PER_USE \
--storage-auto-increase \
--storage-size=${MYSQL_STORAGE} \
--storage-type=${MYSQL_STORAGE_TYPE} \
--tier=${MYSQL_TIER} \
--format=json | tee logs/${COUNTRY}-${ENV}.log
GCLOUD_CREATE_INSTANCE_RETURN_CODE=$?
if [ ${GCLOUD_CREATE_INSTANCE_RETURN_CODE} -eq 0 ]
then
echo "Successfully created DB"
else
echo "Error returned while creating the DB"
TIMEOUT_ERROR=$(cat logs/${COUNTRY}-${ENV}.log | tail -1 | grep "gcloud beta sql operations wait" | wc -l)
if [ "${TIMEOUT_ERROR}" = "1" ]
then
echo "It's a timeout error, continue waiting"
FOLLOW_UP_COMMAND=$(cat logs/${COUNTRY}-${ENV}.log | tail -1 |cut -d '`' -f2)
${FOLLOW_UP_COMMAND}
else
echo "It's NOT a timeout error"
echo "return code : ${GCLOUD_CREATE_INSTANCE_RETURN_CODE}"
echo ${GCLOUD_CREATE_INSTANCE_OUTPUT}
exit 1
fi
fi
Run Code Online (Sandbox Code Playgroud)
gcloud sql 用户设置密码 root --instance=${MYSQL_INSTANCE} --password=${MYSQL_ROOT} --host "%"
最后,我在创建实例命令之后睡了一大觉,这样我就可以设置 root 密码了。
对于 db-f1-micro ,需要 2 分 53 秒才能完成创建。
| 归档时间: |
|
| 查看次数: |
3762 次 |
| 最近记录: |