test_db_connection.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #!/usr/bin/env python3
  2. """
  3. 测试数据库连接脚本
  4. """
  5. import os
  6. import pymysql
  7. from dotenv import load_dotenv
  8. def test_mysql_connection():
  9. """测试MySQL连接"""
  10. load_dotenv()
  11. # 从环境变量获取数据库配置
  12. database_url = os.getenv('DATABASE_URL', '')
  13. print(f"数据库URL: {database_url}")
  14. if not database_url:
  15. print("❌ DATABASE_URL未设置")
  16. return False
  17. # 解析数据库URL
  18. from urllib.parse import urlparse
  19. parsed = urlparse(database_url)
  20. config = {
  21. 'host': parsed.hostname or 'localhost',
  22. 'port': parsed.port or 3306,
  23. 'user': parsed.username or 'root',
  24. 'password': parsed.password or '',
  25. 'charset': 'utf8mb4'
  26. }
  27. print(f"连接配置: host={config['host']}, port={config['port']}, user={config['user']}")
  28. try:
  29. # 测试连接(不指定数据库)
  30. connection = pymysql.connect(**config)
  31. print("✅ MySQL连接成功")
  32. # 检查数据库是否存在
  33. db_name = parsed.path[1:] if parsed.path else 'sso_db'
  34. cursor = connection.cursor()
  35. cursor.execute("SHOW DATABASES")
  36. databases = [db[0] for db in cursor.fetchall()]
  37. if db_name in databases:
  38. print(f"✅ 数据库 '{db_name}' 已存在")
  39. else:
  40. print(f"⚠️ 数据库 '{db_name}' 不存在,需要创建")
  41. # 尝试创建数据库
  42. try:
  43. cursor.execute(f"CREATE DATABASE {db_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
  44. print(f"✅ 数据库 '{db_name}' 创建成功")
  45. except Exception as e:
  46. print(f"❌ 创建数据库失败: {e}")
  47. cursor.close()
  48. connection.close()
  49. return True
  50. except Exception as e:
  51. print(f"❌ MySQL连接失败: {e}")
  52. print("\n可能的解决方案:")
  53. print("1. 检查MySQL服务是否启动")
  54. print("2. 检查用户名和密码是否正确")
  55. print("3. 检查主机和端口是否正确")
  56. print("4. 尝试在命令行连接: mysql -h localhost -u root -p")
  57. return False
  58. if __name__ == "__main__":
  59. print("=" * 50)
  60. print("MySQL连接测试")
  61. print("=" * 50)
  62. if test_mysql_connection():
  63. print("\n🎉 数据库连接测试通过!")
  64. print("现在可以运行: python scripts/init_db.py")
  65. else:
  66. print("\n❌ 数据库连接测试失败")
  67. print("请修复数据库连接问题后重试")