fix(备份): 修复'源数据库文件不存在'报错; 改为内存DB直出备份并热重载还原(免重启)
Deploy to Server / deploy (push) Successful in 1m52s
Deploy to Server / deploy (push) Successful in 1m52s
This commit is contained in:
@@ -140,13 +140,13 @@ export default function Backups() {
|
||||
` · 备份文件:${it.filename}\n` +
|
||||
` · 备份时间:${it.created_at}\n` +
|
||||
` · 文件大小:${fmtSize(it.size_bytes)}\n\n` +
|
||||
`还原后将覆盖当前所有数据(部员/活动/时长记录/四小时核销记录等),\n` +
|
||||
`还原后将用该备份内容覆盖当前数据库(部员/活动/时长记录/四小时核销记录等全部会替换)。\n` +
|
||||
`系统会先对当前数据库自动拍一张「还原前快照(restoresnap)」作为应急回滚点,\n` +
|
||||
`然后覆盖数据库并自动重启后端进程(Docker/守护进程会拉起来)。\n\n` +
|
||||
`请在下方输入框输入:"我确认从备份 ${it.filename} 还原并重启服务"`;
|
||||
`完成后直接热更新运行中的数据库(无需重启服务端进程),刷新前端页面即可看到还原后的内容。\n\n` +
|
||||
`请在下方输入框输入:"我确认从备份 ${it.filename} 还原并覆盖当前数据库"`;
|
||||
const i1 = window.prompt(m1, '');
|
||||
if (i1 === null) return;
|
||||
const expected = `我确认从备份 ${it.filename} 还原并重启服务`;
|
||||
const expected = `我确认从备份 ${it.filename} 还原并覆盖当前数据库`;
|
||||
if (i1.trim() !== expected) { alert('确认文本不匹配,已取消'); return; }
|
||||
const i2 = window.prompt(
|
||||
`最后一道确认:请再次输入 "YES, RESTORE NOW"(全大写,不含引号)以继续。`,
|
||||
@@ -160,14 +160,14 @@ export default function Backups() {
|
||||
const r = await exportApi.backupRestore(it.filename);
|
||||
if (r?.ok) {
|
||||
alert(
|
||||
`还原已受理,后端将在 1 秒内重启。\n\n` +
|
||||
`还原已完成!\n\n` +
|
||||
`还原前自动快照:${r.snapshot.filename}\n` +
|
||||
`快照大小:${fmtSize(r.snapshot.size_bytes)}\n` +
|
||||
`快照时间:${r.snapshot.created_at}\n\n` +
|
||||
`若重启后出现异常,请使用该快照文件再次还原或联系管理员。\n\n` +
|
||||
`将在 5 秒后自动刷新当前页面。`
|
||||
`后端已热更新运行中的数据库,将在 2 秒后自动刷新当前页面以查看最新数据。\n` +
|
||||
`若刷新后仍看到旧内容,请手动再刷一次。`
|
||||
);
|
||||
setTimeout(() => window.location.reload(), 5000);
|
||||
setTimeout(() => window.location.reload(), 2000);
|
||||
}
|
||||
} catch (e) {
|
||||
setRestarting(false);
|
||||
@@ -216,8 +216,8 @@ export default function Backups() {
|
||||
|
||||
{restarting ? (
|
||||
<div className="card p-5 md:p-8 text-center bg-amber-50 border border-amber-200 animate-pulse">
|
||||
<div className="text-lg md:text-xl font-semibold text-amber-800">后端正在重启以完成还原…请稍候,页面将自动刷新</div>
|
||||
<div className="muted mt-2">若 30 秒后仍无法访问,请手动刷新页面或检查容器/守护进程。</div>
|
||||
<div className="text-lg md:text-xl font-semibold text-amber-800">正在刷新以加载还原后的数据库…请稍候</div>
|
||||
<div className="muted mt-2">若 30 秒后仍停留在该状态,请手动刷新页面。</div>
|
||||
</div>
|
||||
) : null}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user