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