/** * 数据库初始化脚本 * * 功能: * - 创建 website_admin 数据库 * - 创建所有必需的表(admin_users, partners, system_settings, videos, vod_config) * - 插入初始数据(管理员账户、系统配置、合作伙伴数据) * * 使用方法: * node backend/database/setup.js * * 注意: * - 请确保 .env 文件中配置了正确的数据库连接信息 * - 默认管理员账户:admin / admin123456 */ const mysql = require('mysql2/promise'); const fs = require('fs').promises; const path = require('path'); require('dotenv').config(); async function setupDatabase() { let connection; try { console.log('========================================'); console.log(' 数据库初始化程序'); console.log(' 虚境起源网站管理后台'); console.log('========================================\n'); console.log('正在连接到 MySQL 服务器...'); // 首先连接到 MySQL 服务器(不指定数据库) connection = await mysql.createConnection({ host: process.env.DB_HOST || 'localhost', user: process.env.DB_USER || 'root', password: process.env.DB_PASSWORD || '1464576565..', port: process.env.DB_PORT || 3306, multipleStatements: true }); console.log('✓ 已连接到 MySQL 服务器\n'); console.log('正在执行数据库初始化脚本...'); // 读取 SQL 文件 const sqlFile = path.join(__dirname, 'database.sql'); const sql = await fs.readFile(sqlFile, 'utf8'); // 分割 SQL 语句并执行 const statements = sql .split(';') .map(stmt => stmt.trim()) .filter(stmt => stmt.length > 0 && !stmt.startsWith('--')); let successCount = 0; let skipCount = 0; for (const statement of statements) { try { await connection.query(statement); successCount++; } catch (err) { // 忽略重复条目错误和已存在错误 if (err.message.includes('Duplicate entry') || err.message.includes('already exists') || err.code === 'ER_DUP_ENTRY') { skipCount++; } else { console.error('执行语句时出错:', err.message); console.error('语句:', statement.substring(0, 100) + '...'); } } } console.log(`✓ 成功执行 ${successCount} 条语句`); if (skipCount > 0) { console.log(`ℹ 跳过 ${skipCount} 条已存在的记录`); } console.log('\n========================================'); console.log(' 初始化完成'); console.log('========================================\n'); console.log('数据库信息:'); console.log(` 数据库名称:website_admin`); console.log(` 主机:${process.env.DB_HOST || 'localhost'}`); console.log(` 端口:${process.env.DB_PORT || 3306}\n`); console.log('已创建的表:'); console.log(' ✓ admin_users - 管理员用户表'); console.log(' ✓ partners - 合作伙伴表'); console.log(' ✓ system_settings - 系统设置表'); console.log(' ✓ videos - 视频表'); console.log(' ✓ vod_config - VOD配置表\n'); console.log('默认管理员账户:'); console.log(' 用户名:admin'); console.log(' 密码:admin123456'); console.log(' 提示:请登录后尽快修改密码\n'); console.log('下一步:'); console.log(' 1. 启动后端服务:cd backend && npm start'); console.log(' 2. 访问管理后台:http://localhost:3000'); console.log(' 3. 使用默认账户登录'); console.log(' 4. 在"系统设置"中配置 VOD 和 COS 参数\n'); await connection.end(); process.exit(0); } catch (error) { console.error('\n✗ 数据库初始化失败:', error.message); console.error('\n请检查:'); console.error(' 1. MySQL 服务是否正在运行'); console.error(' 2. .env 文件中的数据库连接信息是否正确'); console.error(' 3. 数据库用户是否有足够的权限创建数据库和表\n'); if (connection) { await connection.end(); } process.exit(1); } } // 运行初始化 setupDatabase();