import mysql from 'mysql2/promise'; import dotenv from 'dotenv'; import * as xlsx from 'xlsx'; import fs from 'fs'; dotenv.config(); const { DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT } = process.env; async function backup() { const connection = await mysql.createConnection({ host: DB_HOST, user: DB_USER, password: DB_PASS, database: DB_NAME, port: parseInt(DB_PORT || '3306') }); console.log('🚀 Starting Database Backup Process...'); const tables = [ 'asset_pc', 'asset_server', 'asset_storage', 'asset_remote', 'asset_equipment', 'asset_office_supplies', 'asset_survey', 'asset_vip' ]; const wb = xlsx.utils.book_new(); for (const table of tables) { try { // 1. Create table backup await connection.query(`DROP TABLE IF EXISTS ${table}_backup`); await connection.query(`CREATE TABLE ${table}_backup AS SELECT * FROM ${table}`); console.log(`✅ Table backup created: ${table} -> ${table}_backup`); // 2. Fetch data for Excel const [rows] = await connection.query(`SELECT * FROM ${table}`); if (rows.length > 0) { const ws = xlsx.utils.json_to_sheet(rows); // Sheet names max length is 31 chars const sheetName = table.substring(0, 31); xlsx.utils.book_append_sheet(wb, ws, sheetName); } } catch (e) { console.warn(`⚠️ Skipped ${table}: ${e.message}`); } } // 3. Write Excel file const fileName = 'backupDB_20260608.xlsx'; xlsx.writeFile(wb, fileName); console.log(`✅ Excel data exported successfully to ${fileName}`); await connection.end(); } backup().catch(err => { console.error('❌ Backup Failed:', err); process.exit(1); });