初次提交
This commit is contained in:
194
backend/fix_database_connection.sh
Normal file
194
backend/fix_database_connection.sh
Normal 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"
|
||||
Reference in New Issue
Block a user