You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量并行升级Cloud SQL只读副本至主实例的脚本修改建议

Cloud SQL只读副本并行升级脚本修改建议

一、核心优化:将串行升级改为并行执行

原脚本用&&连接升级命令,会等待前一个副本完成才执行下一个。要实现并行,只需在每个gcloud promote-replica命令后加&让其后台运行,最后用wait命令等待所有后台任务结束。

二、其他关键改进点

  • 简化副本输入:支持一次性输入多个副本ID(空格分隔),无需逐个手动输入,提升扩展性
  • 清理冗余临时文件:原脚本创建的replica1.json至replica5.json等文件未被实际使用,直接删除相关创建代码
  • 修复确认提示问题:原提示中引用的$primaryInstance、$primaryRegion变量未定义,且两次读取acceptance会覆盖前一次输入,统一确认逻辑
  • 增加并行执行反馈:记录每个副本的升级状态,方便跟踪进度

修改后的完整脚本

#!/bin/bash

# 配置项目信息
gcloud auth login
read -p '请输入实例所在的项目ID:' project
gcloud config set project "$project"

# 创建临时目录(仅保留实际需要的文件)
mkdir -p tempFiles
touch tempFiles/instanceDetails-dr.json

# 批量输入目标副本ID
read -p '请输入所有要升级的副本ID(用空格分隔):' dr_instances

# 拉取副本信息(示例拉取第一个副本的信息,若不需要可删除)
if [ -n "$dr_instances" ]; then
    first_instance=$(echo "$dr_instances" | awk '{print $1}')
    echo "正在拉取SQL实例数据..."
    gcloud sql instances describe "$first_instance" --format="json" > tempFiles/instanceDetails-dr.json
fi

# 统一确认操作(不可逆)
read -p '你即将并行升级所有指定的只读副本为主实例,此操作不可逆,请输入Yes确认执行:' acceptance
if [ "$acceptance" != "Yes" ]; then
    echo "未确认执行,未做任何修改。"
    exit 0
fi

# 并行升级所有副本
echo "开始并行升级副本..."
for instance in $dr_instances; do
    echo "启动副本 $instance 的升级任务..."
    gcloud sql instances promote-replica "$instance" > "tempFiles/$instance-upgrade.log" 2>&1 &
done

# 等待所有后台任务完成
wait
echo "所有副本升级任务已完成。"

# 可选:查看每个副本的升级日志
echo "各副本升级日志如下:"
for instance in $dr_instances; do
    echo "=== 副本 $instance 日志 ==="
    cat "tempFiles/$instance-upgrade.log"
done

关键修改说明

  1. 并行执行逻辑:通过&将每个升级命令放入后台,wait命令会阻塞脚本直到所有后台进程结束,确保所有副本完成升级后再继续后续步骤
  2. 批量输入处理:用dr_instances变量接收多个副本ID,通过循环遍历实现批量操作,支持任意数量的副本
  3. 日志记录:每个副本的升级输出会写入单独的日志文件,方便后续排查问题
  4. 简化临时文件:只保留实际需要的文件,删除未使用的冗余创建代码

内容的提问来源于stack exchange,提问作者Dharmin Fadia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:20:27