Files
FendxPHP/scripts/check-docker-db.sh
Lawson 2782d765fb feat(database): 添加用户角色权限系统及相关监控功能
- 创建用户表(users)包含基本信息和认证字段
- 创建角色表(roles)用于权限控制
- 创建权限表(permissions)定义系统权限
- 创建用户角色关联表(user_roles)建立用户与角色关系
- 创建角色权限关联表(role_permissions)建立角色与权限关系
- 创建迁移记录表(migrations)追踪数据库变更
- 添加AdminController提供管理员面板功能
- 实现系统监控、配置管理、缓存清理等功能
- 添加AOP切面编程支持的各种通知类型
- 实现告警管理AlertManager支持多渠道告警
- 添加文档注解接口规范
2026-04-08 17:00:28 +08:00

367 lines
8.9 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
# Docker环境数据库检查脚本
# 用法: ./scripts/check-docker-db.sh
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker是否运行
check_docker() {
log_info "检查Docker状态..."
if ! docker info > /dev/null 2>&1; then
log_error "Docker未运行请启动Docker服务"
exit 1
fi
log_success "Docker运行正常"
}
# 检查Docker Compose文件
check_compose_file() {
local compose_file="docker-compose.test.yml"
if [[ ! -f "$compose_file" ]]; then
log_error "Docker Compose文件不存在: $compose_file"
exit 1
fi
log_success "找到Docker Compose文件: $compose_file"
}
# 启动测试环境
start_test_environment() {
log_info "启动Docker测试环境..."
# 检查容器是否已运行
if docker-compose -f docker-compose.test.yml ps mysql-test | grep -q "Up"; then
log_info "MySQL容器已在运行"
else
log_info "启动MySQL容器..."
docker-compose -f docker-compose.test.yml up -d mysql-test
# 等待MySQL启动
log_info "等待MySQL启动..."
local max_attempts=30
local attempt=0
while [[ $attempt -lt $max_attempts ]]; do
if docker-compose -f docker-compose.test.yml exec -T mysql-test mysqladmin ping -h localhost --silent; then
log_success "MySQL启动成功"
break
fi
attempt=$((attempt + 1))
echo -n "."
sleep 2
done
if [[ $attempt -eq $max_attempts ]]; then
log_error "MySQL启动超时"
docker-compose -f docker-compose.test.yml logs mysql-test
exit 1
fi
fi
}
# 检查MySQL容器状态
check_mysql_container() {
log_info "检查MySQL容器状态..."
local container_status=$(docker-compose -f docker-compose.test.yml ps mysql-test | grep -E "mysql-test.*Up")
if [[ -z "$container_status" ]]; then
log_error "MySQL容器未运行"
return 1
fi
log_success "MySQL容器运行正常"
echo "$container_status"
}
# 检查MySQL连接
check_mysql_connection() {
log_info "检查MySQL连接..."
# 测试连接
if docker-compose -f docker-compose.test.yml exec -T mysql-test mysql -u test -ptest -e "SELECT 1" > /dev/null 2>&1; then
log_success "MySQL连接成功"
return 0
else
log_error "MySQL连接失败"
return 1
fi
}
# 检查数据库是否存在
check_database_exists() {
log_info "检查数据库是否存在..."
local databases=$(docker-compose -f docker-compose.test.yml exec -T mysql-test mysql -u test -ptest -e "SHOW DATABASES LIKE 'fendx_test'" 2>/dev/null)
if echo "$databases" | grep -q "fendx_test"; then
log_success "数据库 'fendx_test' 存在"
return 0
else
log_warning "数据库 'fendx_test' 不存在"
return 1
fi
}
# 创建数据库
create_database() {
log_info "创建数据库..."
if docker-compose -f docker-compose.test.yml exec -T mysql-test mysql -u test -ptest -e "CREATE DATABASE IF NOT EXISTS fendx_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; then
log_success "数据库创建成功"
return 0
else
log_error "数据库创建失败"
return 1
fi
}
# 检查表结构
check_tables() {
log_info "检查数据库表..."
local tables=$(docker-compose -f docker-compose.test.yml exec -T mysql-test mysql -u test -ptest fendx_test -e "SHOW TABLES" 2>/dev/null)
if [[ -z "$tables" ]]; then
log_warning "数据库中没有表"
echo "💡 建议运行迁移命令:"
echo " docker-compose -f docker-compose.test.yml exec app php bin/console migrate:run"
return 1
fi
log_success "数据库表列表:"
echo "$tables" | tail -n +2 | while read -r table; do
if [[ -n "$table" ]]; then
local count=$(docker-compose -f docker-compose.test.yml exec -T mysql-test mysql -u test -ptest fendx_test -e "SELECT COUNT(*) FROM \`$table\`" 2>/dev/null | tail -n 1)
echo " - $table ($count 条记录)"
fi
done
}
# 检查用户数据
check_user_data() {
log_info "检查用户数据..."
local user_count=$(docker-compose -f docker-compose.test.yml exec -T mysql-test mysql -u test -ptest fendx_test -e "SELECT COUNT(*) FROM users" 2>/dev/null | tail -n 1 2>/dev/null)
if [[ -z "$user_count" ]]; then
log_warning "用户表不存在"
return 1
fi
echo "👥 用户数据:"
echo " - 总用户数: $user_count"
if [[ "$user_count" -gt 0 ]]; then
echo " - 最近注册用户:"
docker-compose -f docker-compose.test.yml exec -T mysql-test mysql -u test -ptest fendx_test -e "SELECT username, email, created_at FROM users ORDER BY created_at DESC LIMIT 3" 2>/dev/null | tail -n +2 | while read -r line; do
if [[ -n "$line" ]]; then
echo " * $line"
fi
done
fi
}
# 运行数据库迁移
run_migrations() {
log_info "运行数据库迁移..."
if docker-compose -f docker-compose.test.yml exec -T app php bin/console migrate:run; then
log_success "数据库迁移完成"
return 0
else
log_error "数据库迁移失败"
return 1
fi
}
# 填充测试数据
seed_test_data() {
log_info "填充测试数据..."
if docker-compose -f docker-compose.test.yml exec -T app php bin/console migrate:seed; then
log_success "测试数据填充完成"
return 0
else
log_error "测试数据填充失败"
return 1
fi
}
# 显示MySQL日志
show_mysql_logs() {
log_info "显示MySQL日志..."
docker-compose -f docker-compose.test.yml logs --tail=20 mysql-test
}
# 重启MySQL服务
restart_mysql() {
log_info "重启MySQL服务..."
docker-compose -f docker-compose.test.yml restart mysql-test
# 等待重启完成
sleep 10
if check_mysql_connection; then
log_success "MySQL重启成功"
else
log_error "MySQL重启失败"
return 1
fi
}
# 完整检查
full_check() {
log_info "开始完整数据库检查..."
echo "=================================================="
# 检查Docker
check_docker
# 检查Compose文件
check_compose_file
# 启动环境
start_test_environment
# 检查容器状态
check_mysql_container
# 检查连接
if ! check_mysql_connection; then
log_error "数据库连接失败尝试重启MySQL..."
restart_mysql
fi
echo "--------------------------------------------------"
# 检查数据库
if ! check_database_exists; then
create_database
fi
# 检查表
check_tables
# 检查用户数据
check_user_data
echo "=================================================="
log_success "数据库检查完成"
}
# 修复数据库
fix_database() {
log_info "开始修复数据库..."
# 确保环境运行
start_test_environment
# 创建数据库
if ! check_database_exists; then
create_database
fi
# 运行迁移
run_migrations
# 填充数据
seed_test_data
log_success "数据库修复完成"
}
# 显示帮助
show_help() {
cat << EOF
Docker环境数据库检查工具
用法: $0 [选项]
选项:
check 检查数据库状态 (默认)
fix 修复数据库问题
migrate 运行数据库迁移
seed 填充测试数据
logs 显示MySQL日志
restart 重启MySQL服务
help 显示帮助信息
示例:
$0 # 检查数据库
$0 check # 检查数据库
$0 fix # 修复数据库
$0 migrate # 运行迁移
$0 seed # 填充数据
$0 logs # 查看日志
EOF
}
# 主函数
main() {
local action="${1:-check}"
case "$action" in
"check")
full_check
;;
"fix")
fix_database
;;
"migrate")
start_test_environment
run_migrations
;;
"seed")
start_test_environment
seed_test_data
;;
"logs")
show_mysql_logs
;;
"restart")
restart_mysql
;;
"help"|"-h"|"--help")
show_help
;;
*)
log_error "未知选项: $action"
show_help
exit 1
;;
esac
}
# 运行主函数
main "$@"