[{"data":1,"prerenderedAt":575},["ShallowReactive",2],{"navigation_docs":3,"-docs-backups-database-backups":130,"-docs-backups-database-backups-surround":570},[4,25,70,90,115],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fdocs\u002Fgetting-started\u002Finstallation","docs\u002F1.getting-started\u002F2.installation","i-lucide-terminal",{"title":21,"path":22,"stem":23,"icon":24},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F3.quickstart","i-lucide-rocket",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Deploy","\u002Fdocs\u002Fdeploy","docs\u002F2.deploy",[30,35,40,45,50,55,60,65],{"title":31,"path":32,"stem":33,"icon":34},"Projects and services","\u002Fdocs\u002Fdeploy\u002Fprojects-and-services","docs\u002F2.deploy\u002F1.projects-and-services","i-lucide-folder-kanban",{"title":36,"path":37,"stem":38,"icon":39},"Docker images","\u002Fdocs\u002Fdeploy\u002Fdocker-images","docs\u002F2.deploy\u002F2.docker-images","i-lucide-container",{"title":41,"path":42,"stem":43,"icon":44},"Git repositories","\u002Fdocs\u002Fdeploy\u002Fgit-repositories","docs\u002F2.deploy\u002F3.git-repositories","i-lucide-git-branch",{"title":46,"path":47,"stem":48,"icon":49},"Databases","\u002Fdocs\u002Fdeploy\u002Fdatabases","docs\u002F2.deploy\u002F4.databases","i-lucide-database",{"title":51,"path":52,"stem":53,"icon":54},"Environment variables","\u002Fdocs\u002Fdeploy\u002Fenvironment-variables","docs\u002F2.deploy\u002F5.environment-variables","i-lucide-key-round",{"title":56,"path":57,"stem":58,"icon":59},"Deployments and logs","\u002Fdocs\u002Fdeploy\u002Fdeployments","docs\u002F2.deploy\u002F6.deployments","i-lucide-scroll-text",{"title":61,"path":62,"stem":63,"icon":64},"Deploy hooks","\u002Fdocs\u002Fdeploy\u002Fdeploy-hooks","docs\u002F2.deploy\u002F7.deploy-hooks","i-lucide-webhook",{"title":66,"path":67,"stem":68,"icon":69},"Domains and HTTPS","\u002Fdocs\u002Fdeploy\u002Fdomains","docs\u002F2.deploy\u002F8.domains","i-lucide-lock",{"title":71,"icon":6,"path":72,"stem":73,"children":74,"page":6},"Backups","\u002Fdocs\u002Fbackups","docs\u002F3.backups",[75,80,85],{"title":76,"path":77,"stem":78,"icon":79},"Backup destinations","\u002Fdocs\u002Fbackups\u002Fbackup-destinations","docs\u002F3.backups\u002F1.backup-destinations","i-lucide-hard-drive-upload",{"title":81,"path":82,"stem":83,"icon":84},"Database backups","\u002Fdocs\u002Fbackups\u002Fdatabase-backups","docs\u002F3.backups\u002F2.database-backups","i-lucide-archive-restore",{"title":86,"path":87,"stem":88,"icon":89},"Backing up Harblet","\u002Fdocs\u002Fbackups\u002Fharblet-backups","docs\u002F3.backups\u002F3.harblet-backups","i-lucide-shield-check",{"title":91,"icon":6,"path":92,"stem":93,"children":94,"page":6},"Administration","\u002Fdocs\u002Fadministration","docs\u002F4.administration",[95,100,105,110],{"title":96,"path":97,"stem":98,"icon":99},"Harblet's domain","\u002Fdocs\u002Fadministration\u002Fharblet-domain","docs\u002F4.administration\u002F1.harblet-domain","i-lucide-globe",{"title":101,"path":102,"stem":103,"icon":104},"Servers","\u002Fdocs\u002Fadministration\u002Fservers","docs\u002F4.administration\u002F2.servers","i-lucide-server",{"title":106,"path":107,"stem":108,"icon":109},"Team and account","\u002Fdocs\u002Fadministration\u002Fteam","docs\u002F4.administration\u002F3.team","i-lucide-users",{"title":111,"path":112,"stem":113,"icon":114},"Updates","\u002Fdocs\u002Fadministration\u002Fupdates","docs\u002F4.administration\u002F4.updates","i-lucide-refresh-cw",{"title":116,"icon":6,"path":117,"stem":118,"children":119,"page":6},"Reference","\u002Fdocs\u002Freference","docs\u002F5.reference",[120,125],{"title":121,"path":122,"stem":123,"icon":124},"Troubleshooting","\u002Fdocs\u002Freference\u002Ftroubleshooting","docs\u002F5.reference\u002F1.troubleshooting","i-lucide-life-buoy",{"title":126,"path":127,"stem":128,"icon":129},"License","\u002Fdocs\u002Freference\u002Flicense","docs\u002F5.reference\u002F2.license","i-lucide-scale",{"id":131,"title":81,"body":132,"description":563,"extension":564,"links":565,"meta":566,"navigation":567,"path":82,"seo":568,"stem":83,"__hash__":569},"docs\u002Fdocs\u002F3.backups\u002F2.database-backups.md",{"type":133,"value":134,"toc":546},"minimark",[135,149,154,224,232,236,249,253,257,313,328,332,335,418,422,425,437,440,451,455,458,462,542],[136,137,138,139,143,144,148],"p",{},"Harblet dumps a database and stores the file at a ",[140,141,142],"a",{"href":77},"backup destination",", on a schedule or when you click ",[145,146,147],"strong",{},"Back up now",". Every backup can be downloaded and restored.",[150,151,153],"h2",{"id":152},"set-up-backups","Set up backups",[155,156,158,163,169,173,179,183,214,218],"steps",{"level":157},"3",[159,160,162],"h3",{"id":161},"have-a-destination","Have a destination",[136,164,165,166,168],{},"An admin adds a ",[140,167,142],{"href":77}," first.",[159,170,172],{"id":171},"open-the-database","Open the database",[136,174,175,176,178],{},"Open the database and go to its ",[145,177,71],{}," tab.",[159,180,182],{"id":181},"choose-the-settings","Choose the settings",[184,185,186,192,210],"field-group",{},[187,188,191],"field",{"name":189,":required":190},"Destination","true","The bucket to store the backups in.",[187,193,195,198,199,198,202,205,206,209],{"name":194},"Schedule",[145,196,197],{},"Off",", ",[145,200,201],{},"Every 15 minutes",[145,203,204],{},"Every hour"," or ",[145,207,208],{},"Every day",". Daily backups run at 00:00 UTC.",[187,211,213],{"name":212},"Scheduled backups to keep","From 1 to 100, 7 by default. Harblet deletes older scheduled backups.",[159,215,217],{"id":216},"save","Save",[136,219,220,221,223],{},"Click ",[145,222,217],{},". The first scheduled backup starts within a minute, then backups follow the schedule.",[136,225,220,226,228,229,231],{},[145,227,147],{}," to start a backup at any time. Backups you start yourself stay until you delete them. Only scheduled backups count towards ",[145,230,212],{},".",[150,233,235],{"id":234},"how-scheduled-backups-run","How scheduled backups run",[237,238,239,243,246],"ul",{},[240,241,242],"li",{},"Schedules follow UTC: every 15 minutes runs at :00, :15, :30 and :45, every hour at the top of the hour, and every day at midnight. A backup starts within about a minute of its time.",[240,244,245],{},"Harblet runs one backup at a time across all databases, and its own backup first.",[240,247,248],{},"Scheduled backups pause while Harblet is down. When it's back, Harblet takes the backup it missed most recently, if the next one isn't due yet. Earlier missed backups are skipped.",[250,251,252],"tip",{},"At worst you lose the data written since the last backup. Choose the schedule by how much data you can afford to lose.",[150,254,256],{"id":255},"the-backup-files","The backup files",[258,259,260,276],"table",{},[261,262,263],"thead",{},[264,265,266,270,273],"tr",{},[267,268,269],"th",{},"Database",[267,271,272],{},"Format",[267,274,275],{},"File",[277,278,279,297],"tbody",{},[264,280,281,285,292],{},[282,283,284],"td",{},"PostgreSQL",[282,286,287,291],{},[288,289,290],"code",{},"pg_dump"," custom format",[282,293,294],{},[288,295,296],{},".dump",[264,298,299,302,308],{},[282,300,301],{},"MySQL",[282,303,304,307],{},[288,305,306],{},"mysqldump",", gzipped",[282,309,310],{},[288,311,312],{},".sql.gz",[136,314,315,316,319,320,323,324,327],{},"Files are stored at ",[288,317,318],{},"\u003Cfolder>\u002F\u003Cproject>\u002F\u003Cdatabase>\u002F\u003Ctime>.\u003Cextension>"," in the bucket, where project and database are their internal names, such as ",[288,321,322],{},"shop-k3x9\u002Fpostgresql-x7k2",". The ",[145,325,326],{},"History"," list shows who or what started each backup, its status, size and duration.",[159,329,331],{"id":330},"download-a-backup","Download a backup",[136,333,334],{},"Click the download button of a completed backup. Restore it with the usual tools:",[336,337,338,377],"code-group",{},[339,340,345],"pre",{"className":341,"code":342,"filename":284,"language":343,"meta":344,"style":344},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pg_restore --no-owner -d \"$DATABASE_URL\" postgresql-x7k2-2026-11-14T08-15-00-123Z.dump\n","bash","",[288,346,347],{"__ignoreMap":344},[348,349,352,356,360,363,367,371,374],"span",{"class":350,"line":351},"line",1,[348,353,355],{"class":354},"sBMFI","pg_restore",[348,357,359],{"class":358},"sfazB"," --no-owner",[348,361,362],{"class":358}," -d",[348,364,366],{"class":365},"sMK4o"," \"",[348,368,370],{"class":369},"sTEyZ","$DATABASE_URL",[348,372,373],{"class":365},"\"",[348,375,376],{"class":358}," postgresql-x7k2-2026-11-14T08-15-00-123Z.dump\n",[339,378,380],{"className":341,"code":379,"filename":301,"language":343,"meta":344,"style":344},"gunzip \u003C mysql-a9c3-2026-11-14T08-15-00-123Z.sql.gz | mysql -h 127.0.0.1 -u root -p app\n",[288,381,382],{"__ignoreMap":344},[348,383,384,387,390,393,396,399,402,406,409,412,415],{"class":350,"line":351},[348,385,386],{"class":354},"gunzip",[348,388,389],{"class":365}," \u003C",[348,391,392],{"class":358}," mysql-a9c3-2026-11-14T08-15-00-123Z.sql.gz",[348,394,395],{"class":365}," |",[348,397,398],{"class":354}," mysql",[348,400,401],{"class":358}," -h",[348,403,405],{"class":404},"sbssI"," 127.0.0.1",[348,407,408],{"class":358}," -u",[348,410,411],{"class":358}," root",[348,413,414],{"class":358}," -p",[348,416,417],{"class":358}," app\n",[150,419,421],{"id":420},"restore-a-backup","Restore a backup",[136,423,424],{},"Click the restore button of a completed backup and confirm. Everything written since the backup is lost.",[426,427,428,433],"tabs",{},[429,430,432],"tabs-item",{"icon":431,"label":284},"i-simple-icons-postgresql","Harblet loads the backup into a new database next to the current one, then swaps it in. Open connections are closed once. If loading fails, the current database stays as it was. The connection details don't change.",[429,434,436],{"icon":435,"label":301},"i-simple-icons-mysql","Harblet empties the database and loads the backup into it. Services that use the database see errors until the restore finishes. If loading fails, the database stays empty or partly loaded. Restore again, or restore another backup.",[136,438,439],{},"An alert above the list shows how the latest restore went.",[237,441,442,445,448],{},[240,443,444],{},"The database has to be running.",[240,446,447],{},"A backup restores into the database it was taken from.",[240,449,450],{},"Backups and restores run one at a time. While one runs, the buttons are disabled.",[150,452,454],{"id":453},"delete-a-backup","Delete a backup",[136,456,457],{},"Click the trash button of a backup and confirm. Harblet deletes its file from the destination. This can't be undone. A failed backup has no file, so deleting it only removes it from the list.",[150,459,461],{"id":460},"errors","Errors",[258,463,464,474],{},[261,465,466],{},[264,467,468,471],{},[267,469,470],{},"Message",[267,472,473],{},"What to do",[277,475,476,484,492,500,508,516,524,532],{},[264,477,478,481],{},[282,479,480],{},"The database isn't running.",[282,482,483],{},"Deploy the database, then try again.",[264,485,486,489],{},[282,487,488],{},"A backup is running. Wait for it to finish.",[282,490,491],{},"Try again when the running backup is done.",[264,493,494,497],{},[282,495,496],{},"Harblet restarted during the backup.",[282,498,499],{},"Start the backup again.",[264,501,502,505],{},[282,503,504],{},"A restore is running. Wait for it to finish.",[282,506,507],{},"Try again when the restore is done.",[264,509,510,513],{},[282,511,512],{},"Harblet restarted during the restore.",[282,514,515],{},"Restore the backup again.",[264,517,518,521],{},[282,519,520],{},"Wait for the backup to finish before deleting it.",[282,522,523],{},"Delete the backup once it's done.",[264,525,526,529],{},[282,527,528],{},"Wait for the restore to finish before deleting this backup.",[282,530,531],{},"Delete the backup once the restore is done.",[264,533,534,537],{},[282,535,536],{},"This destination was removed. Choose another one.",[282,538,539,540,231],{},"Choose another destination and click ",[145,541,217],{},[543,544,545],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":344,"searchDepth":547,"depth":547,"links":548},2,[549,556,557,560,561,562],{"id":152,"depth":547,"text":153,"children":550},[551,553,554,555],{"id":161,"depth":552,"text":162},3,{"id":171,"depth":552,"text":172},{"id":181,"depth":552,"text":182},{"id":216,"depth":552,"text":217},{"id":234,"depth":547,"text":235},{"id":255,"depth":547,"text":256,"children":558},[559],{"id":330,"depth":552,"text":331},{"id":420,"depth":547,"text":421},{"id":453,"depth":547,"text":454},{"id":460,"depth":547,"text":461},"Back up databases to S3 on a schedule, and download or restore any backup.","md",null,{},{"icon":84},{"title":81,"description":563},"0Zl7AhYCVaY6HZZQrLroHdY0kOM0HYnnXNr9yAvjfZM",[571,573],{"title":76,"path":77,"stem":78,"description":572,"icon":79,"children":-1},"Add an Amazon S3 or S3-compatible bucket that databases and Harblet back up to.",{"title":86,"path":87,"stem":88,"description":574,"icon":89,"children":-1},"Back up Harblet's own database and restore it onto a fresh server.",1794744117115]