#!/usr/bin/env node /** * 数据库连接测试脚本 * 用于验证MySQL数据库连接配置的正确性 */ const mysql = require('mysql2/promise'); const config = require('../config/env'); // 引入环境配置 const envConfig = require('../config/env'); const dbConfig = envConfig.mysql; // 数据库配置已从database.js导入 async function testDatabaseConnection() { let connection; try { console.log('🚀 开始数据库连接测试...'); console.log(`📊 环境: ${process.env.NODE_ENV || 'development'}`); console.log(`🔗 连接信息: ${dbConfig.host}:${dbConfig.port}/${dbConfig.database}`); console.log('='.repeat(50)); // 测试连接 console.log('🔍 测试数据库连接...'); connection = await mysql.createConnection(dbConfig); console.log('✅ 数据库连接成功'); // 测试查询 console.log('🔍 测试基本查询...'); const [rows] = await connection.execute('SELECT 1 + 1 AS result'); console.log(`✅ 查询测试成功: ${rows[0].result}`); // 检查表结构 console.log('🔍 检查核心表结构...'); const tablesToCheck = ['admins', 'users', 'merchants', 'orders']; for (const table of tablesToCheck) { try { const [tableInfo] = await connection.execute( `SELECT COUNT(*) as count FROM information_schema.tables WHERE table_schema = ? AND table_name = ?`, [dbConfig.database, table] ); if (tableInfo[0].count > 0) { console.log(`✅ 表存在: ${table}`); } else { console.log(`⚠️ 表不存在: ${table}`); } } catch (error) { console.log(`❌ 检查表失败: ${table} - ${error.message}`); } } // 检查管理员表数据 console.log('🔍 检查管理员数据...'); try { const [adminCount] = await connection.execute('SELECT COUNT(*) as count FROM admins'); console.log(`📊 管理员记录数: ${adminCount[0].count}`); if (adminCount[0].count > 0) { const [admins] = await connection.execute('SELECT username, role, status FROM admins LIMIT 5'); console.log('👥 管理员样例:'); admins.forEach(admin => { console.log(` - ${admin.username} (${admin.role}, 状态: ${admin.status})`); }); } } catch (error) { console.log('❌ 检查管理员数据失败:', error.message); } // 检查连接池配置 console.log('🔍 检查连接池配置...'); console.log(`📈 连接池限制: ${dbConfig.connectionLimit || 10}`); console.log(`🔤 字符集: ${dbConfig.charset}`); console.log(`⏰ 时区: ${dbConfig.timezone}`); console.log('\n🎉 数据库连接测试完成!'); console.log('✅ 所有配置检查通过'); } catch (error) { console.error('❌ 数据库连接测试失败:', error.message); console.error('💡 可能的原因:'); console.error(' - 数据库服务未启动'); console.error(' - 连接配置错误'); console.error(' - 网络连接问题'); console.error(' - 数据库权限不足'); console.error(' - 防火墙限制'); console.error(' - IP地址未授权'); if (error.code) { console.error(`🔍 错误代码: ${error.code}`); } console.error('🔍 连接详情:', { host: dbConfig.host, port: dbConfig.port, user: dbConfig.user, database: dbConfig.database }); process.exit(1); } finally { if (connection) { await connection.end(); console.log('🔒 数据库连接已关闭'); } } } // 如果是直接运行此文件,则执行测试 if (require.main === module) { testDatabaseConnection() .then(() => process.exit(0)) .catch(() => process.exit(1)); } module.exports = { testDatabaseConnection };