#!/usr/bin/env bash # Grant nexus@'%' on 1Panel App Store MySQL for Docker (1panel-network) install wizard. # Fixes: Access denied for user 'nexus'@'172.18.x.x' (1045) # # Usage: # MYSQL_ROOT_PASSWORD='root密码' NEXUS_DB_PASSWORD='nexus密码' bash deploy/fix-1panel-mysql-grant.sh # bash deploy/fix-1panel-mysql-grant.sh # prompts set -euo pipefail NEXUS_DB_NAME="${NEXUS_DB_NAME:-nexus}" NEXUS_DB_USER="${NEXUS_DB_USER:-nexus}" info() { echo -e "\033[0;32m[INFO]\033[0m $*"; } warn() { echo -e "\033[1;33m[WARN]\033[0m $*"; } error() { echo -e "\033[0;31m[ERROR]\033[0m $*" >&2; exit 1; } pick_mysql_container() { local name if [[ -n "${MYSQL_CONTAINER:-}" ]]; then echo "$MYSQL_CONTAINER" return 0 fi if docker network inspect 1panel-network >/dev/null 2>&1; then name="$(docker network inspect 1panel-network --format '{{range .Containers}}{{.Name}} {{end}}' \ | tr ' ' '\n' | grep -iE '^1Panel-mysql-' | head -1 || true)" [[ -n "$name" ]] && echo "$name" && return 0 fi name="$(docker ps --format '{{.Names}}' | grep -iE '^1Panel-mysql-' | head -1 || true)" [[ -n "$name" ]] && echo "$name" && return 0 error "未找到 1Panel MySQL 容器(可设 MYSQL_CONTAINER=名称)" } prompt_secret() { local var="$1" prompt="$2" if [[ -n "${!var:-}" ]]; then return 0 fi read -r -s -p "$prompt: " "$var" echo "" if [[ -z "${!var:-}" ]]; then error "$var 不能为空" fi } main() { [[ "${EUID:-$(id -u)}" -eq 0 ]] || error "请用 root 运行" local mysql_c mysql_c="$(pick_mysql_container)" info "MySQL 容器: $mysql_c" prompt_secret MYSQL_ROOT_PASSWORD "1Panel MySQL root 密码" prompt_secret NEXUS_DB_PASSWORD "nexus 用户密码(与安装向导步骤 3 一致)" info "创建库/用户并授权 ${NEXUS_DB_USER}@'%' → ${NEXUS_DB_NAME}.* ..." docker exec -i "$mysql_c" mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" <