fix(backup): VACUUM INTO agar backup konsisten saat DB mode WAL (sebelumnya salin file mentah bisa kehilangan -wal)
This commit is contained in:
1 parent
ebbfffc116
commit
3eb4edfe5b
1 file changed
+10
-2
@@ -3,6 +3,7 @@
|
|||||||
* Melakukan backup otomatis database dan settings
|
* Melakukan backup otomatis database dan settings
|
||||||
*/
|
*/
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
const Database = require('better-sqlite3');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { logger } = require('../config/logger');
|
const { logger } = require('../config/logger');
|
||||||
const { getSetting, getCurrentDateInTimezone, getNowLocalISO } = require('../config/settingsManager');
|
const { getSetting, getCurrentDateInTimezone, getNowLocalISO } = require('../config/settingsManager');
|
||||||
@@ -41,8 +42,15 @@ function backupDatabase() {
|
|||||||
const backupFileName = `billing_db_${timestamp}.db`;
|
const backupFileName = `billing_db_${timestamp}.db`;
|
||||||
const backupFilePath = path.join(backupDir, backupFileName);
|
const backupFilePath = path.join(backupDir, backupFileName);
|
||||||
|
|
||||||
// Copy database file
|
// VACUUM INTO: snapshot konsisten & aman di mode WAL
|
||||||
fs.copyFileSync(dbPath, backupFilePath);
|
// (menyalin file mentah bisa kehilangan transaksi terbaru yang masih di -wal)
|
||||||
|
if (fs.existsSync(backupFilePath)) fs.unlinkSync(backupFilePath);
|
||||||
|
const srcDb = new Database(dbPath, { readonly: true });
|
||||||
|
try {
|
||||||
|
srcDb.prepare('VACUUM INTO ?').run(backupFilePath);
|
||||||
|
} finally {
|
||||||
|
srcDb.close();
|
||||||
|
}
|
||||||
|
|
||||||
// Compress backup (optional - bisa ditambahkan nanti)
|
// Compress backup (optional - bisa ditambahkan nanti)
|
||||||
const stats = fs.statSync(backupFilePath);
|
const stats = fs.statSync(backupFilePath);
|
||||||
|
|||||||
Reference in new issue
Block a user