xk/backend/database/setup.js

126 lines
4.1 KiB
JavaScript
Raw Normal View History

2026-02-02 20:51:52 +08:00
/**
* 数据库初始化脚本
*
* 功能
* - 创建 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();