Backup Strategy for Your Own Site: Full vs. Incremental, Frequency, Storage Locations, and Restore Drills

Back up your own site using the 3-2-1 rule: 3 copies, 2 types of media, 1 offsite. Recommended frequency: incremental database backups every 4 hours, full backups daily; daily rsync incremental file backups, full backups weekly. Three storage tiers: local server...

独立站备份:3-2-1原则与恢复演练Backup strategy: 3-2-1 rule and restore drills 没恢复过的备份等于没有备份 —— 备份策略一半是怎么存,一半是怎么恢复A backup you never restored is no backup at all — half the job is recovery 副本Copy 位置Location 频率Cadence 1 本地1. Local 服务器磁盘另一分区Another partition on server 每4小时增量 · 每日全量4h incremental, daily full 2 异地2. Offsite 异地对象存储 S3/OSSObject storage S3/OSS 每日同步 · 保留30天Daily sync, keep 30 days 3 冷备3. Cold Glacier/归档 · 季度全量Glacier archive, quarterly 反直觉判断:备份只存在同一台服务器上,等于没有备份 —— 服务器被黑时备份会一起被加密Counter-intuitive: on-server backups are useless — ransomware encrypts them too 3-2-1原则:3份副本、2种介质、1份异地,缺一不可3 copies, 2 media, 1 offsite — non-negotiable 红线:每季度必须做一次恢复演练,没恢复过的备份不算数Red line: quarterly restore drill — untested backups are not backups 真实事故里,超过40%的备份恢复失败是因为备份文件损坏或密码丢失40%+ of restores fail due to corrupt archives or lost keys 保留策略:每日30天 · 每周12周 · 每月12个月 · 每年3年Retention: 30 daily · 12 weekly · 12 monthly · 3 yearly 数据库用mysqldump加binlog,文件用rsync增量,恢复时间目标见灾难恢复一文mysqldump + binlog for DB; rsync incremental for files
The 3-2-1 backup strategy: three tiers of copies — local, offsite object storage, and cold archive

Backup Strategy for Your Own Site: Full vs. Incremental, Frequency, Storage Locations, and Restore Drills

Bottom line first: Back up your own site using the 3-2-1 rule: 3 copies, 2 types of media, 1 offsite. Recommended frequency: incremental database backups every 4 hours, full backups daily; daily rsync incremental file backups, full backups weekly. Three storage tiers: another partition on the local server, offsite object storage (S3/OSS), and Glacier cold archive. Retention policy: 30 days of daily backups, 12 weeks of weekly backups, 12 months of monthly backups, 3 years of yearly backups. Here’s the counterintuitive part: a backup you’ve never restored is no backup at all. In real incidents, more than 40% of restore attempts fail because the backup file is corrupted or the encryption key is lost. Run a restore drill every quarter.

1. What to Back Up: Databases and Files Need Separate Backups

Backing up your own site means backing up two things: the database and the files. The database holds your WordPress content — wp_posts, wp_options, wp_users — while the files are the images, theme, and plugin code in wp-content/uploads. These two change at completely different rates and need completely different backup methods. Backing them up together causes problems.

Export the database with mysqldump or wp-cli, and always include the –single-transaction flag so you don’t lock tables and disrupt your live site. Sync files incrementally with rsync, transferring only what changed instead of copying everything each time — a full copy of a 10GB wp-content directory takes over ten minutes, while an incremental sync takes seconds.

Backup target Change Frequency Recommended tools Backup method
MySQL database May change hourly mysqldump or xtrabackup Incremental binlog every 4 hours, full dump daily
wp-content/uploads New images added weekly rsync Incremental sync daily
Theme and plugin code Changed a few times a month git or rsync Version control, full backup monthly
wp-config.php Rarely changes Store separately in a password manager Back up on every change
nginx/site config Changed a few times a month Managed with git Back up on every change

Example scenario: an industrial equipment exporter’s WordPress site for overseas buyers gets 3 to 5 new inquiries and 2 to 3 new product images every day. A script exports the database every 4 hours, and rsync syncs files incrementally to offsite object storage at 3 a.m. daily. Over a week, database backups take up about 500MB and incremental file backups about 200MB, for a total storage cost under 20 yuan a month. This setup is more reliable than any paid backup plugin.

How to write the backup script — same approach as the automated ops ideas in crater Tech Stack: don’t rely on a GUI plugin. Use cron plus scripts, and send an alert when something fails.

2. Frequency and Retention: More Frequent Isn’t Always Better

A counterintuitive take: more frequent backups aren’t always better. Backing up too often eats up storage and IO, and it actually makes recovery messier—you’re staring at a pile of near-identical backups with no idea which one is clean. The right frequency depends on how fast your business changes: back up the database every 4 hours, because inquiries can come in at any time; back up files daily, because image uploads aren’t frequent.

Use a grandfather-father-son retention policy: keep daily backups for 30 days, weekly backups for 12 weeks, monthly backups for 12 months, and yearly backups for 3 years. That way you can restore an article you accidentally deleted yesterday, or roll back to a clean version from six months ago before the hack.

Backup type Frequency How long to keep it where it’s stored Purpose
Database full backup Daily at 3 AM 30 days Off-site object storage Recover from everyday accidental deletion
Database incremental binlog Every 4 hours 7 days Local + offsite Minute-level recovery
Full file backup Every Sunday at midnight 12 weeks Off-site object storage Weekly rollback
File incremental rsync Daily at midnight 30 days Off-site object storage Daily rollback
Monthly archive 1st of each month 12 months Glacier cold storage Monthly compliance and long-term
Yearly archive Every January 3 years Glacier cold storage Annual audit and history

Example: a site going global discovered on the afternoon of March 15 that its database had been injected with malicious content. With binlog incremental backups, you can restore the database to noon on March 15—the state before the attack—losing only half a day of inquiry records. If you only had daily full backups, you could only restore to 3 AM on March 15, losing a full day of inquiries. That’s the difference between 4-hour incremental and daily full backups.

3. Storage location: the 3-2-1 rule, offsite is mandatory

The 3-2-1 backup rule means: keep 3 copies of important data, on 2 different types of media, with 1 copy stored offsite. This isn’t theory—it comes from countless ransomware incidents. In real attacks, the attacker encrypts the local backups at the same time as the server—because the backups and the site are on the same machine.

How to choose your three storage tiers: the first tier is local backup, on another disk partition of the server—fastest to restore but least resilient; the second tier is offsite object storage, using AWS S3 or Alibaba Cloud OSS, with cross-availability-zone redundancy, so a single server failure won’t take you down; the third tier is cold archive storage, using S3 Glacier or OSS Archive—cheap but slow to restore, for annual compliance and long-term retention.

Storage tier Location Recovery speed Cost Primary use
Local disk backup Another partition on the server Seconds Free Daily quick recovery
Off-site object storage S3/OSS cross-region Minutes About ¥0.02/GB/month Primary backup, synced daily
Cold archive Glacier/OSS Archive Hours to days About ¥0.005/GB/month Annual compliance and long-term
Offline media Local hard drive/tape Physical retrieval One-time hard drive cost Last resort for extreme ransomware scenarios

Counterintuitive tip: never keep backup files inside the web directory. Many people put backups in wp-content/backup/, thinking they have an extra copy, but in reality an attacker who scans that path can download it directly, exposing every database and table name. The right approach is to store backups outside the web root, or upload them automatically to object storage after each backup and delete the local copy. For the cleanup process after a hack, see After your site gets hacked.

and CDN global acceleration One thing to watch: CDN cache is not a backup. It only copies your static content to edge nodes, and if the origin goes down, the CDN cache will expire too. Never treat CDN cache as a disaster recovery plan.

4. Recovery drills: run one every quarter to prove your backups actually work

The most overlooked part of any backup strategy is the recovery drill. Many companies run backup scripts for a year without ever restoring once, and only when disaster strikes do they discover the backup files are corrupt, the unzip password is forgotten, or the recovery process simply doesn’t work. In real incidents, more than 40% of backup restores fail, and the reasons fall into these three categories.

How to run a recovery drill: pick a maintenance window each quarter, pull the most recent backup from offsite object storage, restore it to a brand-new test environment, and run the full flow of “restore files, import database, configure nginx, access the site, verify the inquiry form submits.” Time the whole process and record your actual RTO (recovery time objective) and RPO (amount of data lost). For how to set RTO/RPO, see Disaster Recovery and RTO/RPO Definitions for Independent Sites.

Drill steps Action Acceptance Criteria Common failure points
1. Pull the backup Download the latest full + incremental backup from S3 Download completes within 5 minutes Object storage credentials expired
2. Verify the archive List files with tar -tzf File count complete, no corruption gzip archive corrupt, no checksum verified
3. Restore files Extract to the test environment’s web directory Permissions correct: 755/644 Permissions lost, site shows a blank page
4. Import the database mysql < backup.sql Table count matches production Wrong character set, garbled Chinese text
5. Configure nginx Copy the config and change the port Domain is reachable Rewrite rules lost
6. Verify functionality Walk through an inquiry form submission Email received, record saved to CRM SMTP password hardcoded in the config

Example scenario: a team went six months without a recovery drill, and only when a server drive failed did they pull the offsite backup. Halfway through extraction it threw an error, because a gzip parameter in the backup script had been wrong for three months, and the two months of backups after that were all corrupt files. In the end they could only restore from an older, clean backup and lost two months of content. A quarterly recovery drill would have caught this in advance.

For how to set up backup monitoring, see Site monitoring and alerts: send a WeCom alert when a backup job fails, when backup file size drops sharply, or when the backup is more than 24 hours old. For the routine maintenance checklist, see Six Monthly Tasks for Site Maintenance.

FAQ

Which plugin should you use for independent site backups? Is UpdraftPlus enough?
UpdraftPlus free is good enough. It backs up your database and files separately and syncs straight to S3, Dropbox, or Google Drive. But the plugin approach has two limits: backups run inside the web process, so they slow the site down at peak times, and if backup files sit in the web directory, scanners can download them. A more reliable setup is a server-level script using mysqldump plus rsync, run on a cron schedule, that uploads each backup to offsite object storage and deletes the local copy when it finishes. You can run both in parallel: the plugin for quick restores, the script for your main backup.
How often should I back up? Do I need it every hour?
No. A B2B site doesn’t get inquiries or content changes that often. A good setup is incremental binlog every 4 hours plus a full dump daily for the database, and daily incremental rsync plus a full copy weekly for files. Day to day, you’d lose at most 4 hours of data on a restore, and in a worst case binlog gets you down to the minute. Only if you run an ecommerce site, where orders change every minute, do you need hourly backups. Backing up too often eats up storage and IO, and when it’s time to restore you won’t know which copy to pick.
How do I put the 3-2-1 backup rule into practice?
Three copies: the first on a separate disk partition on the server, for the fastest restore; the second in offsite object storage like S3 or Alibaba Cloud OSS, across availability zones; the third in cold archive storage like Glacier, for long-term retention. Two media: local disk and cloud storage count as two. One offsite: cloud storage must not be in the same data center or with the same cloud provider as the origin server, and ideally sits in a different availability zone. You need all three layers, no skipping any. In ransomware incidents, sites with only local backups are almost always wiped out, because the backup files get encrypted along with everything else.
How do I run a restore drill, and how often?
Once a quarter. The process: pull the most recent full backup from offsite object storage, restore it in a brand-new test environment, and go through the whole flow: unzip the files, import the database, configure nginx, visit the site, submit a test inquiry email, and confirm the CRM received it. Time the whole thing and record the actual restore time and how much data was lost. In real incidents, more than 40% of backup restores fail because the backup file is corrupt or the key is lost, and you only find those problems by actually doing a restore once.
Should backup files be encrypted, and how do I store the keys?
You must encrypt backups, especially database backups. They contain inquiries, customer data, and the database password in wp-config.php. Encrypt backup files with gpg or openssl, and store the password in a password manager, never in the backup script. Losing the key is the same as having no backup: the backup file won’t open. Use two keys: one for daily use and one for archiving. Print a paper copy of the archive key and lock it in a drawer. Also enable server-side encryption on the object storage side for double protection.
How do you know if the backup script fails, and how do you get alerted?
The backup job itself needs monitoring. Three alert rules: first, alert if the backup job exits with a non-zero code; second, alert if the backup file size drops more than 30% from the previous day, which may mean an empty backup caused by a failed database connection; third, alert if the latest backup is more than 24 hours old, which means the script didn’t run. Use WeCom or email for alerts, not just local logs. Local logs are invisible when the server goes down. For how to set up monitoring, see Site monitoring and alerts this article.

Final thoughts

The worst mistake with backups is thinking “I installed a plugin, so I’m done.” The plugin runs every day and generates a backup file every day, but you’ve never once restored it. When something actually goes wrong, you discover the backup is corrupt, the password is lost, and the process doesn’t work. Half of a backup strategy is how to store backups; the other half is how to restore them, and the latter is ten times more important.

Three steps to get it done: first, build three layers of backups following the 3-2-1 rule, with one copy each locally, in off-site object storage, and in cold archive; second, set the frequency and retention policy, with incremental database backups every 4 hours plus a daily full backup, daily incremental file backups, and retention from 30 days to 3 years; third, run a restore drill every quarter, walking through the full restore process in a test environment and recording the actual RTO and RPO. Only after these three steps can you say you have backups.

One line worth remembering: a backup you’ve never restored is no backup at all. A backup script that runs for a year is worth less than one full restore drill, and in real incidents 40% of backups won’t open when it matters.

Crater
Crater Crater experts

Official Organization · Crater

Crater is a go-global services company specializing in WordPress standalone site development + Google SEO + GEO full-funnel growth, serving sectors including smart hardware, industrial equipment, SaaS, and new energy.

Product CapabilitiesMethodology WhitepaperIndustry Report
965articles shared
78knowledge base articles