fix(update): bugcollect 建库失败时打印详细错误信息

原来 2>/dev/null 把 mysql 错误吞掉导致无法排查;
改为捕获 stderr 并在失败时通过 warn 输出,同时打印
container/db/user 便于逐步排查凭据读取问题。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
这个提交包含在:
徐勤民 2026-06-23 17:12:51 +08:00
父节点 38eaa8fc83
当前提交 dcf1baa2c2

查看文件

@ -515,18 +515,24 @@ if grep -q 'bugcollect-service:' "$ROOT_DIR/docker-compose.yml" 2>/dev/null; the
_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-)"
_secrets="$ROOT_DIR/config/secrets.env"
_mysql_root_pw="$(grep '^MYSQL_ROOT_PASSWORD=' "$_secrets" 2>/dev/null | cut -d= -f2-)"
_mysql_user="$(grep '^MYSQL_USERNAME=' "$_secrets" 2>/dev/null | cut -d= -f2-)"
[ -z "$_mysql_user" ] && _mysql_user="$(grep '^MYSQL_USER=' "$_secrets" 2>/dev/null | cut -d= -f2-)"
info "建库检查: container=${_mysql_ctr} db=${_bc_db} user=${_mysql_user}"
if [ -n "$_mysql_root_pw" ] && [ -n "$_mysql_user" ]; then
docker exec "$_mysql_ctr" mysql -u root -p"${_mysql_root_pw}" -e \
_db_init_err="$(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"
FLUSH PRIVILEGES;" 2>&1)"
if [ $? -eq 0 ]; then
ok "数据库 ${_bc_db} 已就绪"
else
warn "数据库 ${_bc_db} 初始化失败,请手动执行 GRANT"
warn " 错误: ${_db_init_err}"
fi
else
warn "无法读取 MySQL root 密码或用户名,请手动创建 ${_bc_db} 数据库并授权"
warn "无法读取 MySQL root 密码或用户名secrets.env 中未找到 MYSQL_ROOT_PASSWORD / MYSQL_USERNAME,请手动创建 ${_bc_db} 数据库并授权"
fi
else
warn "MySQL 容器未运行external 模式),请确保数据库 ${BUGCOLLECT_DB:-xuqm_bugcollect} 已存在并授权"