589  字
  3  分钟 
  QuestDB自动备份方案 
 AI 智能摘要
AI 正在生成文章简介,请稍候...
网上的教程很少,好不容易找到一个还是需要安装pgsql的,太折腾了,既然9000端口的web可以执行命令,那应该就可以直接调用questdb的web api去执行备份命令,比安装pgsql的方案方便。
修改配置文件
路径:
questdb程序目录\bin\qdbroot\conf\server.conf 修改后记得重启questdb服务

测试备份命令
BACKUP TABLE 表名1, 表名2;

执行后可以看到有对应的备份文件夹,如果执行多次就是年月日.1、年月日.2

自动备份配置
<?xml version="1.0" encoding="UTF-16"?><Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  <RegistrationInfo>    <Date>2025-07-22T16:40:31.4762726</Date>    <Author>DESKTOP-EGTT6MR\admin</Author>    <URI>\MES\定时备份Questdb</URI>  </RegistrationInfo>  <Triggers>    <CalendarTrigger>      <StartBoundary>2025-07-22T17:15:00</StartBoundary>      <Enabled>true</Enabled>      <ScheduleByDay>        <DaysInterval>1</DaysInterval>      </ScheduleByDay>    </CalendarTrigger>  </Triggers>  <Principals>    <Principal id="Author">      <UserId>S-1-5-21-3828290859-3366777425-2908561605-1001</UserId>      <LogonType>Password</LogonType>      <RunLevel>LeastPrivilege</RunLevel>    </Principal>  </Principals>  <Settings>    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>    <AllowHardTerminate>true</AllowHardTerminate>    <StartWhenAvailable>false</StartWhenAvailable>    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>    <IdleSettings>      <StopOnIdleEnd>true</StopOnIdleEnd>      <RestartOnIdle>false</RestartOnIdle>    </IdleSettings>    <AllowStartOnDemand>true</AllowStartOnDemand>    <Enabled>true</Enabled>    <Hidden>false</Hidden>    <RunOnlyIfIdle>false</RunOnlyIfIdle>    <WakeToRun>false</WakeToRun>    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>    <Priority>7</Priority>  </Settings>  <Actions Context="Author">    <Exec>      <Command>powershell</Command>      <Arguments>-noprofile -executionpolicy bypass -file "E:\Program Files (x86)\questdb\questdb-backup.ps1"</Arguments>      <WorkingDirectory>E:\Program Files (x86)\questdb</WorkingDirectory>    </Exec>  </Actions></Task>保存这个xml文件:
定时备份Questdb.xml


chcp 936 *>$null# ====================== 参数区 ======================$BACKUP_ROOT    = "D:\BackUPQuestdb" # 备份路径与server.conf相同$RETENTION_DAYS = 7 # 只保留近7天的备份文件$DbHost         = "localhost"$HTTP_PORT      = 9000$LOG_FILE       = Join-Path $BACKUP_ROOT ("backup_{0:yyyyMMdd}.log" -f (Get-Date))# ====================================================
function Write-Log([string]$msg){    $msg = "$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')  $msg"    Write-Host $msg    Add-Content -Path $LOG_FILE -Value $msg}
# 1. 建立/确认目录if (-not (Test-Path $BACKUP_ROOT)) {    New-Item -Path $BACKUP_ROOT -ItemType Directory -Force | Out-Null}
Write-Log "===== 备份脚本开始 ====="
# 2. 删除过期目录Get-ChildItem -Path $BACKUP_ROOT -Directory |    Where-Object {        $_.Name -match '^\d{4}-\d{1,2}-\d{1,2}(?:\..+)?$' -and        [DateTime]($_.Name -replace '^(\d{4}-\d{1,2}-\d{1,2}).*$', '$1') -lt (Get-Date).AddDays(-$RETENTION_DAYS)    } | ForEach-Object {        Write-Log "删除目录 - $($_.FullName)"        Remove-Item $_.FullName -Recurse -Force    }
# 3. 触发 QuestDB 备份Write-Log "开始 HTTP 备份请求"
$uri  = "http://${DbHost}:${HTTP_PORT}/exec"$query = "BACKUP TABLE 表名1, 表名2;" # 改成你的表名
# 使用 WebUtility 做 URL 编码$encodedQuery = [System.Net.WebUtility]::UrlEncode($query)$fullUrl = "$uri`?query=$encodedQuery"
try {    $resp = Invoke-WebRequest -Uri $fullUrl -UseBasicParsing -ErrorAction Stop    Write-Log "备份请求成功:HTTP $($resp.StatusCode)"}catch {    Write-Log "备份请求失败:$($_.Exception.Message)"}
# 4. 删除过期日志(*.log)Get-ChildItem -Path $BACKUP_ROOT -Filter *.log -Recurse -File |    Where-Object {        $_.Name -match '^backup_(?<dt>\d{8})\.log$' -and        ($dt = [DateTime]::ParseExact($Matches['dt'],'yyyyMMdd',$null)) -lt (Get-Date).AddDays(-$RETENTION_DAYS)    } | ForEach-Object {        Write-Log "删除旧日志 - $($_.FullName)"        Remove-Item $_.FullName -Force    }
Write-Log "===== 备份脚本完成 ====="保存这个ps1文件:
questdb-backup.ps1


手动执行备份测试

恢复备份
停止questdb后,直接复制备份的文件夹到
questdb程序目录\bin\qdbroot\db
 QuestDB自动备份方案 
  https://16c.top/2025/07/31/questdb-auto-backup/