backup.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { databaseBackup } from '@d8d/server/utils/backup'
  2. import { promises as fs } from 'fs'
  3. import path from 'path'
  4. import process from 'node:process'
  5. const BACKUP_DIR = process.env.BACKUP_DIR || './backups'
  6. async function main() {
  7. const command = process.argv[2]
  8. switch (command) {
  9. case 'backup':
  10. await databaseBackup.createBackup()
  11. break
  12. case 'restore':
  13. const backupFile = process.argv[3]
  14. if (!backupFile) {
  15. console.error('请指定要恢复的备份文件')
  16. process.exit(1)
  17. }
  18. // 如果备份文件不包含路径,则在备份目录中查找
  19. const fullBackupPath = backupFile.includes('/') ? backupFile : path.join(BACKUP_DIR, backupFile)
  20. await databaseBackup.restoreBackup(fullBackupPath)
  21. break
  22. case 'cleanup':
  23. await databaseBackup.cleanupOldBackups()
  24. break
  25. case 'list':
  26. const files = await fs.readdir(BACKUP_DIR)
  27. const backupFiles = files.filter(f => f.endsWith('.dump'))
  28. console.log('可用备份文件:')
  29. backupFiles.forEach(file => console.log(` - ${file}`))
  30. break
  31. case 'latest':
  32. const latestFiles = await fs.readdir(BACKUP_DIR)
  33. const latestBackupFiles = latestFiles.filter(f => f.endsWith('.dump')).sort().reverse()
  34. if (latestBackupFiles.length > 0) {
  35. console.log(latestBackupFiles[0])
  36. } else {
  37. console.log('没有找到备份文件')
  38. }
  39. break
  40. default:
  41. console.log('用法: node backup.ts [backup|restore <file>|cleanup|list]')
  42. process.exit(1)
  43. }
  44. }
  45. main().catch(console.error)