初次提交

This commit is contained in:
2025-10-14 20:05:29 +08:00
commit 6e4e48fdd2
673 changed files with 437006 additions and 0 deletions

View File

@@ -0,0 +1,194 @@
#!/bin/bash
# 数据库连接问题修复脚本
echo "=== 数据库连接问题修复工具 ==="
# 检查当前目录
if [ ! -f "main.py" ]; then
echo "错误: 请在包含main.py的项目根目录下运行此脚本"
exit 1
fi
echo "当前目录: $(pwd)"
# 1. 检查.env文件
echo ""
echo "1. 检查环境配置..."
if [ -f ".env" ]; then
echo "✓ .env 文件存在"
echo "当前数据库配置:"
grep "DATABASE_URL" .env || echo "DATABASE_URL 未设置"
else
echo "⚠ .env 文件不存在,正在创建..."
cat > .env << EOF
# 基础配置
ENVIRONMENT=production
DEBUG=false
# 数据库配置 - 请根据实际情况修改
DATABASE_URL=mysql+pymysql://mytest_db:mytest_db@101.126.85.76:3306/mytest_db
# Redis配置
REDIS_URL=redis://localhost:6379
# JWT配置
JWT_SECRET_KEY=your-super-secret-jwt-key-change-in-production-$(date +%s)
JWT_ALGORITHM=HS256
JWT_EXPIRE_MINUTES=30
# 文件上传配置
UPLOAD_DIR=uploads
MAX_FILE_SIZE=10485760
# CORS配置
ALLOWED_HOSTS=["*"]
EOF
echo "✓ .env 文件创建成功"
fi
# 2. 测试数据库连接
echo ""
echo "2. 测试数据库连接..."
# 创建测试脚本
cat > test_db_connection.py << 'EOF'
#!/usr/bin/env python3
import sys
import os
sys.path.insert(0, '.')
try:
from app.core.config import settings
print(f"✓ 配置加载成功")
print(f"数据库URL: {settings.DATABASE_URL}")
# 测试数据库连接
from sqlalchemy import create_engine, text
engine = create_engine(settings.DATABASE_URL)
with engine.connect() as conn:
result = conn.execute(text("SELECT VERSION()"))
version = result.fetchone()[0]
print(f"✓ 数据库连接成功: MySQL {version}")
# 检查数据库是否存在
result = conn.execute(text("SHOW DATABASES LIKE 'mytest_db'"))
if result.fetchone():
print("✓ 数据库 'mytest_db' 存在")
else:
print("⚠ 数据库 'mytest_db' 不存在,需要创建")
except ImportError as e:
print(f"✗ 导入错误: {e}")
print("请确保已安装所需依赖: pip install sqlalchemy pymysql")
sys.exit(1)
except Exception as e:
print(f"✗ 数据库连接失败: {e}")
print("")
print "可能的原因:"
print "1. 数据库服务器未启动"
print "2. 网络连接问题"
print "3. 用户名或密码错误"
print "4. 数据库不存在"
print "5. 防火墙阻止连接"
sys.exit(1)
EOF
python3 test_db_connection.py
if [ $? -eq 0 ]; then
echo ""
echo "✓ 数据库连接测试通过"
else
echo ""
echo "✗ 数据库连接测试失败"
echo ""
echo "解决方案:"
echo "1. 检查数据库服务是否运行"
echo "2. 验证数据库连接参数"
echo "3. 确认网络连通性"
echo ""
echo "请手动编辑 .env 文件中的 DATABASE_URL"
echo "格式: mysql+pymysql://用户名:密码@主机:端口/数据库名"
exit 1
fi
# 3. 检查Docker环境
echo ""
echo "3. 检查Docker配置..."
if [ -f "docker-compose.yml" ]; then
echo "✓ 发现 docker-compose.yml 文件"
echo "检查Docker数据库配置..."
if grep -q "mysql:" docker-compose.yml; then
echo "⚠ 检测到Docker MySQL配置"
echo "如果使用Docker Compose请确保:"
echo "1. 数据库服务已启动: docker-compose up -d mysql"
echo "2. 数据库主机名应为 'mysql' (服务名)"
echo "3. 确认网络配置正确"
echo ""
echo "Docker数据库连接配置示例:"
echo "DATABASE_URL=mysql+pymysql://root:password@mysql:3306/mytest_db"
fi
fi
# 4. 提供修复建议
echo ""
echo "4. 修复建议..."
echo "根据错误信息,应用尝试连接到 'mysql' 主机但配置中是IP地址。"
echo "请检查以下配置:"
echo ""
echo "选项1: 使用外部数据库 (推荐)"
echo "DATABASE_URL=mysql+pymysql://mytest_db:mytest_db@101.126.85.76:3306/mytest_db"
echo ""
echo "选项2: 使用Docker数据库"
echo "DATABASE_URL=mysql+pymysql://root:password@mysql:3306/mytest_db"
echo ""
echo "选项3: 使用本地数据库"
echo "DATABASE_URL=mysql+pymysql://root:password@localhost:3306/mytest_db"
echo ""
# 5. 自动修复.env文件
echo "5. 自动修复配置..."
if [ -f ".env" ]; then
# 备份原文件
cp .env .env.backup.$(date +%Y%m%d_%H%M%S)
# 确保使用正确的数据库URL
if grep -q "DATABASE_URL.*mysql.*mysql:" .env; then
echo "检测到Docker主机名配置更新为外部数据库..."
sed -i 's|DATABASE_URL=mysql+pymysql://.*@mysql:.*|DATABASE_URL=mysql+pymysql://mytest_db:mytest_db@101.126.85.76:3306/mytest_db|' .env
elif ! grep -q "DATABASE_URL.*101.126.85.76" .env; then
echo "更新数据库连接配置..."
sed -i 's|DATABASE_URL=.*|DATABASE_URL=mysql+pymysql://mytest_db:mytest_db@101.126.85.76:3306/mytest_db|' .env
fi
echo "✓ 数据库配置已更新"
fi
# 6. 重启应用提示
echo ""
echo "6. 重启应用..."
echo "配置更新完成,请重启应用以使配置生效"
echo ""
echo "重启方式:"
echo "1. 停止当前应用 (Ctrl+C)"
echo "2. 重新启动: python main.py"
echo "3. 或者使用启动脚本: ./start_app.sh"
echo ""
echo "=== 数据库连接修复完成 ==="
echo ""
echo "如果问题仍然存在,请:"
echo "1. 确认数据库服务器地址正确: 101.126.85.76:3306"
echo "2. 确认用户名密码正确: mytest_db / mytest_db"
echo "3. 确认数据库名称正确: mytest_db"
echo "4. 测试网络连通性: telnet 101.126.85.76 3306"