xk/backend/database/setup.js
2026-02-02 20:51:52 +08:00

126 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 数据库初始化脚本
*
* 功能:
* - 创建 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();