Files
weibo_signin/init_mysql.sh

138 lines
4.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
set -e
# ============================================================
# Weibo-HotSign MySQL 初始化脚本(需要 root 权限)
# 用途: 建库、建表、创建业务用户并授权
# 使用方式: chmod +x init_mysql.sh && ./init_mysql.sh
# 只需运行一次,后续用 setup_linux.sh 做业务配置
# ============================================================
# ===================== 请在此处填写配置 =====================
MYSQL_ROOT_PASSWORD="" # ← 填写 MySQL root 密码
# 业务用户配置setup_linux.sh 中要保持一致)
BIZ_USER="weibo"
BIZ_PASSWORD="123456" # ← 填写业务用户密码
BIZ_HOST="%" # 允许连接的来源,% 表示任意
MYSQL_HOST="127.0.0.1"
MYSQL_PORT="3306"
DB_NAME="weibo_hotsign"
# ===================== 配置结束 =====================
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
info() { echo -e "${GREEN}[✓]${NC} $1"; }
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
error() { echo -e "${RED}[✗]${NC} $1"; exit 1; }
echo ""
echo "========================================"
echo " Weibo-HotSign MySQL 初始化root"
echo "========================================"
echo ""
# 检查 mysql 客户端
command -v mysql >/dev/null 2>&1 || error "未找到 mysql 客户端"
# 构建 root 连接命令
ROOT_CMD="mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -uroot"
if [ -n "$MYSQL_ROOT_PASSWORD" ]; then
ROOT_CMD="$ROOT_CMD -p${MYSQL_ROOT_PASSWORD}"
fi
# 测试 root 连接
if $ROOT_CMD -e "SELECT 1" >/dev/null 2>&1; then
info "MySQL root 连接成功"
else
error "MySQL root 连接失败,请检查 root 密码"
fi
# ------ 1. 创建数据库 ------
echo ""
echo "--- 创建数据库 ---"
$ROOT_CMD -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME} DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
info "数据库 ${DB_NAME} 已创建"
# ------ 2. 创建业务用户并授权 ------
echo ""
echo "--- 创建业务用户 ---"
# 创建用户(如果已存在则忽略)
$ROOT_CMD -e "CREATE USER IF NOT EXISTS '${BIZ_USER}'@'${BIZ_HOST}' IDENTIFIED BY '${BIZ_PASSWORD}';" 2>/dev/null || true
# 授权
$ROOT_CMD -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${BIZ_USER}'@'${BIZ_HOST}';"
$ROOT_CMD -e "FLUSH PRIVILEGES;"
info "用户 ${BIZ_USER} 已创建并授权 ${DB_NAME}"
# ------ 3. 建表 ------
echo ""
echo "--- 创建表结构 ---"
$ROOT_CMD ${DB_NAME} < "${PROJECT_DIR}/init-db.sql"
info "所有表创建完成"
# ------ 4. 创建测试用户(可选) ------
echo ""
echo "--- 检查测试用户 ---"
USER_COUNT=$($ROOT_CMD -N -e "SELECT COUNT(*) FROM ${DB_NAME}.users" 2>/dev/null)
if [ "$USER_COUNT" = "0" ]; then
# 检查 bcrypt 是否可用
if python3 -c "import bcrypt" 2>/dev/null; then
HASHED_PW=$(python3 -c "import bcrypt; print(bcrypt.hashpw(b'Admin123!', bcrypt.gensalt(12)).decode())")
USER_ID=$(python3 -c "import uuid; print(str(uuid.uuid4()))")
$ROOT_CMD ${DB_NAME} -e "
INSERT INTO users (id, username, email, hashed_password, is_active)
VALUES ('${USER_ID}', 'admin', 'admin@example.com', '${HASHED_PW}', 1);
"
info "测试用户已创建: admin / Admin123!"
else
warn "bcrypt 未安装,跳过测试用户创建(运行 setup_linux.sh 安装依赖后可手动创建)"
fi
else
info "已有 ${USER_COUNT} 个用户,跳过"
fi
# ------ 5. 验证 ------
echo ""
echo "--- 验证业务用户权限 ---"
BIZ_CMD="mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${BIZ_USER}"
if [ -n "$BIZ_PASSWORD" ]; then
BIZ_CMD="$BIZ_CMD -p${BIZ_PASSWORD}"
fi
TABLE_COUNT=$($BIZ_CMD -N -e "SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DB_NAME}'" 2>/dev/null)
if [ "$TABLE_COUNT" -gt 0 ] 2>/dev/null; then
info "业务用户 ${BIZ_USER} 可正常访问 ${DB_NAME}${TABLE_COUNT} 张表)"
else
error "业务用户权限验证失败"
fi
echo ""
echo "========================================"
echo " MySQL 初始化完成"
echo "========================================"
echo ""
echo " 数据库: ${DB_NAME}"
echo " 业务用户: ${BIZ_USER}"
echo " 表数量: ${TABLE_COUNT}"
echo ""
echo " 下一步: ./setup_linux.sh"
echo ""