From 38eaa8fc83e8d684aeacdd4f59489d8c27fb7772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 23 Jun 2026 17:06:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(update):=20bugcollect-service=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E6=97=B6=E8=87=AA=E5=8A=A8=E5=88=9B=E5=BB=BA=20xuqm?= =?UTF-8?q?=5Fbugcollect=20=E6=95=B0=E6=8D=AE=E5=BA=93=E5=B9=B6=E6=8E=88?= =?UTF-8?q?=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 旧私有化部署从未运行过 bugcollect-service,upgrade.sh 将服务拉起后 Flyway 因 xuqm_bugcollect 数据库不存在(Access denied 1044)立即崩溃。 在启动 bugcollect-service 前检测运行中的 MySQL 容器,读取 secrets.env 中的 root 密码,自动执行 CREATE DATABASE IF NOT EXISTS + GRANT, 避免首次引入该服务时需要手动建库。 Co-Authored-By: Claude Sonnet 4.6 --- scripts/update.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/scripts/update.sh b/scripts/update.sh index c3e7ee3..5788648 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -510,6 +510,28 @@ done # 判断依据:docker-compose.yml 中是否定义了 bugcollect-service(而非历史容器是否存在)。 # 旧部署首次引入此服务时没有历史容器,必须用 compose 文件判断。 if grep -q 'bugcollect-service:' "$ROOT_DIR/docker-compose.yml" 2>/dev/null; then + + # 确保 xuqm_bugcollect 数据库存在且授权正确(旧部署升级时数据库可能从未创建) + _mysql_ctr="$(docker ps --filter name=mysql --filter status=running --format '{{.Names}}' 2>/dev/null | head -1)" + if [ -n "$_mysql_ctr" ]; then + _bc_db="${BUGCOLLECT_DB:-xuqm_bugcollect}" + _mysql_root_pw="$(grep '^MYSQL_ROOT_PASSWORD=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2-)" + _mysql_user="$(grep '^MYSQL_USERNAME=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2-)" + [ -z "$_mysql_user" ] && _mysql_user="$(grep '^MYSQL_USER=' "$ROOT_DIR/config/secrets.env" 2>/dev/null | cut -d= -f2-)" + if [ -n "$_mysql_root_pw" ] && [ -n "$_mysql_user" ]; then + docker exec "$_mysql_ctr" mysql -u root -p"${_mysql_root_pw}" -e \ + "CREATE DATABASE IF NOT EXISTS \`${_bc_db}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + GRANT ALL PRIVILEGES ON \`${_bc_db}\`.* TO '${_mysql_user}'@'%'; + FLUSH PRIVILEGES;" 2>/dev/null \ + && ok "数据库 ${_bc_db} 已就绪" \ + || warn "数据库 ${_bc_db} 初始化失败,请手动执行 GRANT" + else + warn "无法读取 MySQL root 密码或用户名,请手动创建 ${_bc_db} 数据库并授权" + fi + else + warn "MySQL 容器未运行(external 模式),请确保数据库 ${BUGCOLLECT_DB:-xuqm_bugcollect} 已存在并授权" + fi + for _svc in bugcollect-service symbolicator; do info "应用新镜像并重启 ${_svc} ..." COMPOSE_PROFILES=bugcollect $_COMPOSE up -d --no-deps "$_svc" \