/** * 解锁数据库表 * 终止所有锁定的连接并重置事务 */ require('dotenv').config(); const mysql = require('mysql2/promise'); async function unlockTables() { let connection; try { // 创建数据库连接 connection = await mysql.createConnection({ host: process.env.DB_HOST, port: process.env.DB_PORT || 3306, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE }); console.log('✅ 已连接到数据库'); // 1. 查看当前进程 console.log('\n📋 查看当前锁定的进程...'); const [processes] = await connection.query('SHOW FULL PROCESSLIST'); console.log('当前活动进程数:', processes.length); processes.forEach(p => { console.log(` - ID: ${p.Id}, User: ${p.User}, State: ${p.State}, Info: ${p.Info}`); }); // 2. 杀掉Sleep状态的连接(这些可能持有未提交的事务) console.log('\n🔪 终止Sleep状态的连接...'); let killedCount = 0; for (const p of processes) { if (p.Command === 'Sleep' && p.Id !== connection.threadId) { try { await connection.query(`KILL ${p.Id}`); console.log(` ✅ 已终止进程 ${p.Id}`); killedCount++; } catch (err) { console.log(` ⚠️ 无法终止进程 ${p.Id}:`, err.message); } } } console.log(`\n终止了 ${killedCount} 个连接`); // 3. 解锁所有表 console.log('\n🔓 解锁所有表...'); await connection.query('UNLOCK TABLES'); console.log('✅ 表已解锁'); console.log('\n✅ 数据库解锁完成!'); } catch (error) { console.error('❌ 解锁失败:', error.message); process.exit(1); } finally { if (connection) { await connection.end(); } } } // 执行 unlockTables();