Perché il backup WooCommerce richiede un approccio specifico
WooCommerce non è un plugin qualsiasi. Gestisce transazioni economiche, dati sensibili di clienti e inventario prodotti che cambiano continuamente. Un backup WordPress standard può non essere sufficiente per tre motivi critici:
- Volume di scritture nel database: ogni ordine, ogni modifica allo stock, ogni coupon utilizzato genera operazioni sul database. In uno shop medio con 50+ ordini giornalieri, parliamo di centinaia di query INSERT e UPDATE ogni ora.
- Tabelle custom e meta: WooCommerce crea oltre 10 tabelle dedicate (wp_woocommerce_order_items, wp_wc_product_meta_lookup, wp_woocommerce_sessions, ecc.) che devono essere sincronizzate atomicamente per evitare inconsistenze.
- Relazioni complesse: un singolo ordine coinvolge almeno 5 tabelle diverse (wp_posts per l’ordine, wp_postmeta per i dati, wp_woocommerce_order_items per i prodotti, wp_woocommerce_order_itemmeta per le varianti, wp_comments per le note). Un backup parziale o non transazionale rischia di creare ordini corrotti.
Ho visto personalmente un’agenzia perdere 3 giorni di ordini (circa 15.000€ di transato) perché il loro backup notturno non includeva le tabelle woocommerce_sessions dove erano memorizzati i carrelli in attesa di pagamento via bonifico. Ripristinando solo il database core, hanno perso tutti gli ordini in pending.
Anatomia del database WooCommerce: cosa va salvato
Per un backup completo ed efficace serve mappare esattamente cosa contiene un’installazione WooCommerce. Ecco la struttura dal 2024 in poi (WooCommerce 8.x+):
Tabelle core WooCommerce
wp_woocommerce_order_items: riga per ogni prodotto in ogni ordinewp_woocommerce_order_itemmeta: metadati degli item (varianti, quantità, prezzo)wp_woocommerce_tax_ratesewp_woocommerce_tax_rate_locations: configurazione tassewp_wc_product_meta_lookup: tabella di lookup per performance query prodottiwp_wc_order_stats,wp_wc_order_product_lookup: tabelle Analytics (da WC 4.0+)wp_woocommerce_sessions: carrelli attivi e dati sessione (critica per checkout in corso)wp_woocommerce_payment_tokens: token carte salvate (se abilitate)wp_wc_webhooks: configurazione webhook per integrazioni
Tabelle WordPress standard ma critiche
wp_posts: prodotti (post_type = product, product_variation) e ordini (post_type = shop_order, shop_order_refund dal WC legacy, ora anche nella tabella HPOS)wp_postmeta: tutti i dati prodotto (_price, _stock, _sku, ecc.) e metadati ordini legacywp_terms+wp_term_taxonomy+wp_term_relationships: categorie, tag prodotti, attributiwp_wc_ordersewp_wc_order_addresses: nuove tabelle HPOS (High-Performance Order Storage) introdotte in WC 8.x per chi ha migrato da CPTwp_comments: recensioni prodottiwp_users+wp_usermeta: account clienti con indirizzi salvati, storico ordini
Dal 2023 WooCommerce ha introdotto HPOS come storage alternativo per gli ordini. Se è attivo (verificabile in WooCommerce → Impostazioni → Avanzate → Funzionalità), gli ordini non stanno più in wp_posts ma in tabelle dedicate. Fondamentale verificare quale modalità è attiva prima di configurare il backup.
File system: oltre il database
Non sottovalutare i file. Un backup WooCommerce completo include:
/wp-content/uploads/woocommerce_uploads/: file scaricabili dei prodotti digitali/wp-content/uploads/: immagini prodotti, gallerie, PDF invoice generati da plugin/wp-content/plugins/woocommerce/e tutti i plugin attivi: versioni specifiche potrebbero essere necessarie per compatibilitàwp-config.php: chiavi API di payment gateway e configurazioni custom- File di log:
/wp-content/uploads/wc-logs/per debug transazioni
Strategie di backup differenziate per frequenza e tipologia
Un approccio unico non funziona. Serve differenziare per criticità del dato e velocità di cambiamento:
Backup full giornaliero (1x al giorno, ore notturne)
Database completo + file system completo. Questo è il tuo punto di ripristino sicuro per disastri totali. Pianificalo alle 3-4 AM quando il traffico è minimo.
Strumenti consigliati:
- WP-CLI + mysqldump + rsync: per chi gestisce server dedicati. Script custom che puoi schedulare via cron. Esempio base:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/woocommerce/full"
# Database dump
wp db export $BACKUP_DIR/db_$DATE.sql --path=/var/www/html
# Comprimi file
tar -czf $BACKUP_DIR/files_$DATE.tar.gz /var/www/html/wp-content/uploads /var/www/html/wp-content/plugins
# Carica su S3 o storage remoto
aws s3 cp $BACKUP_DIR/ s3://my-bucket/backups/ --recursive
- UpdraftPlus Premium: supporta backup incrementali e storage multipli. Configurazione affidabile per agenzie che gestiscono 20+ clienti.
- BackWPup Pro: ottimo per backup granulari. Puoi escludere tabelle non critiche per velocizzare.
Backup incrementale del database (ogni 4-6 ore)
Solo le tabelle WooCommerce che cambiano frequentemente. Riduce il carico e velocizza il ripristino di ordini recenti.
Tabelle da includere:
- wp_woocommerce_order_items
- wp_woocommerce_order_itemmeta
- wp_wc_order_stats
- wp_woocommerce_sessions
- wp_posts (solo post_type = shop_order se non usi HPOS)
- wp_wc_orders + wp_wc_order_addresses (se HPOS attivo)
Script mysqldump specifico:
mysqldump -u user -p database_name \
wp_woocommerce_order_items \
wp_woocommerce_order_itemmeta \
wp_wc_order_stats \
wp_wc_orders \
wp_wc_order_addresses \
> woo_incremental_$(date +%Y%m%d_%H%M).sql
Backup transazionale real-time (per high-volume shops)
Se gestisci oltre 200 ordini/giorno, considera soluzioni con replica database continua:
- MySQL replication: replica binlog su secondary server. Ripristino quasi istantaneo (switch su replica).
- Percona XtraBackup: hot backup senza lock per database grandi (10GB+).
- CloudSQL/RDS automated backups: se su GCP o AWS, abilita continuous backup con PITR (Point-In-Time Recovery) fino a 5 minuti prima.
Personalmente, per clienti con oltre 500 ordini/giorno, uso sempre RDS con backup continuo + snapshot ogni 6 ore. Costa circa 15-20€/mese in più ma ha salvato situazioni critiche più volte.
Ripristino selettivo: recuperare solo gli ordini senza sovrascrivere tutto
Scenario reale: un cliente cancella per errore 50 ordini pensando fossero spam. Non vuoi ripristinare tutto il database (perderesti ordini nuovi). Serve un ripristino chirurgico.
Metodologia step-by-step
- Crea database temporaneo: importa il backup completo in un database separato (es. wordpress_restore)
- Identifica gli ordini da recuperare: usa query SQL per trovare gli ID
SELECT ID, post_date, post_status
FROM wordpress_restore.wp_posts
WHERE post_type = 'shop_order'
AND post_date BETWEEN '2026-05-15' AND '2026-05-20'
AND post_status != 'trash';
- Esporta dati correlati: per ogni order ID, estrai righe da tutte le tabelle collegate
-- Esporta ordine specifico (es. ID 12345)
SELECT * FROM wordpress_restore.wp_posts WHERE ID = 12345;
SELECT * FROM wordpress_restore.wp_postmeta WHERE post_id = 12345;
SELECT * FROM wordpress_restore.wp_woocommerce_order_items WHERE order_id = 12345;
SELECT * FROM wordpress_restore.wp_woocommerce_order_itemmeta
WHERE order_item_id IN (
SELECT order_item_id FROM wordpress_restore.wp_woocommerce_order_items WHERE order_id = 12345
);
- Re-importa nel database di produzione: usa INSERT o strumenti come phpMyAdmin per reimportare le righe estratte
- Verifica integrità: controlla nel backend WooCommerce che l’ordine appaia corretto con tutti i prodotti e metadati
Tool per ripristino selettivo
- WP Migrate DB Pro: permette di pushare singole tabelle da backup a produzione con trova/sostituisci automatico per URL
- Adminer/phpMyAdmin: per operazioni manuali su poche righe
- Script PHP custom: per automazioni. Esempio per importare ordine da backup:
<?php
// In un ambiente WP-CLI o script standalone
require_once('wp-load.php');
$backup_order_data = get_backup_order_data(12345); // tua funzione
$order = wc_create_order();
$order->set_customer_id($backup_order_data['customer_id']);
$order->set_status($backup_order_data['status']);
foreach($backup_order_data['items'] as $item) {
$order->add_product(
wc_get_product($item['product_id']),
$item['quantity']
);
}
$order->calculate_totals();
$order->save();
?>
Gestione dei dati sensibili: GDPR e backup criptati
I backup WooCommerce contengono dati personali di clienti (nome, indirizzo, email, telefono, IP). Secondo GDPR devi:
- Criptare i backup: usa AES-256 per dump SQL e file compressi. UpdraftPlus e BackWPup supportano criptazione nativa.
- Limitare retention: conserva backup completi max 30-60 giorni (salvo obblighi fiscali). Elimina automaticamente i più vecchi.
- Accesso controllato: solo personale autorizzato può scaricare/ripristinare. Usa bucket S3 con IAM policy restrittive.
- Log di accesso: traccia chi e quando accede ai backup (obbligatorio per audit GDPR).
Consiglio pratico: se usi S3, abilita bucket versioning + Object Lock per retention immutabile. Previene cancellazioni accidentali (o dolose) dei backup.
Pulizia pre-backup per ridurre dimensioni
Prima di ogni backup full, esegui pulizia:
- Svuota wp_woocommerce_sessions: sessioni oltre 48h sono inutili. Query di pulizia:
DELETE FROM wp_woocommerce_sessions
WHERE session_expiry < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 DAY));
- Elimina log vecchi:
/wp-content/uploads/wc-logs/può arrivare a GB. Conserva solo ultimi 7 giorni. - Ottimizza tabelle:
OPTIMIZE TABLE wp_woocommerce_order_items;recupera spazio da righe eliminate.
Testing del backup: l’errore che fanno tutti
Il 60% delle agenzie che seguo non testa mai i backup. Scoprono che sono corrotti solo quando serve ripristinare. Testa almeno 1 volta al trimestre.
Procedura di test mensile
- Crea ambiente staging separato (sottodominio o server dedicato)
- Ripristina il backup più recente senza guardare la documentazione (se non ci riesci facilmente, il processo va semplificato)
- Verifica funzionalità critiche:
- Login area clienti
- Visualizzazione ordini nello storico
- Pagina prodotto con prezzi corretti
- Processo di checkout (usa gateway test)
- Report Analytics in WooCommerce → Report
- Misura tempo di ripristino: deve essere sotto 30 minuti per shop sotto 10GB, sotto 2 ore per shop più grandi
- Documenta anomalie e aggiorna procedure
Tool utile: WP Reset su staging per testare ripristini multipli rapidamente senza reinstallare ogni volta.
Backup di prodotti e catalogo: export strutturati
Oltre al backup tecnico, mantieni export CSV dei prodotti aggiornati settimanalmente. Utili per:
- Reimportare rapidamente catalogo su nuova installazione
- Comparare prezzi e stock tra backup diversi (audit)
- Fornire al cliente storico prodotto in formato leggibile
Plugin consigliati:
- WP All Export Pro: export CSV/XML schedulati via cron, con mappatura campi custom
- WooCommerce Product CSV Import Suite: import/export nativo WooCommerce, supporta varianti e attributi complessi
Esempio export via WP-CLI:
wp post list --post_type=product --format=csv --fields=ID,post_title,_regular_price,_stock > products_export_$(date +%Y%m%d).csv
Scenari di disaster recovery reali
Tre casi che ho affrontato personalmente:
Caso 1: Attacco ransomware
E-commerce moda, 300 ordini/giorno. Ransomware cripta database e file alle 14:00. Avevano backup S3 criptato con retention 30gg.
Soluzione: Ripristino da backup delle 3 AM (11 ore prima). Persi 47 ordini. Recuperati manualmente da email di conferma PayPal e Stripe dashboard. Tempo totale: 4 ore. Downtime: 6 ore (durante ripristino shop in manutenzione con pagina custom).
Lezione: backup ogni 6 ore avrebbe ridotto perdita a ~12 ordini. Implementato subito dopo.
Caso 2: Aggiornamento plugin incompatibile
Plugin spedizioni aggiornato automaticamente, incompatibile con WC 8.2. Genera errore fatale, checkout inaccessibile. Alle 10 AM, picco di traffico.
Soluzione: Rollback solo cartella /wp-content/plugins/plugin-problematico/ da backup 24h prima + downgrade via FTP. Tempo: 8 minuti. Zero ordini persi.
Lezione: sempre backup pre-update + staging per test. Mai aggiornare automaticamente plugin critici per checkout.
Caso 3: Corruzione database durante migrazione server
Migrazione da hosting condiviso a VPS. Durante export/import, tabella wp_woocommerce_order_itemmeta corrotta (charset mismatch). 3000 ordini con prodotti “vuoti”.
Soluzione: Ripristino selettivo solo wp_woocommerce_order_itemmeta da backup pre-migrazione. Usato phpMyAdmin per dump singola tabella + import con REPLACE per sovrascrivere righe corrotte. Tempo: 40 minuti.
Lezione: sempre verificare charset e collation prima di migrazioni. Backup immediato prima e dopo ogni migrazione.
Automazione e monitoraggio backup per agenzie
Se gestisci 10+ clienti WooCommerce, serve centralizzazione:
Stack consigliato per agenzie
- ManageWP o MainWP: dashboard centrale per pianificare backup multipli. MainWP (self-hosted) supporta storage custom.
- BackupBuddy + iThemes Sync: backup programmati con notifiche centralizzate per 100+ siti
- AgencyPilot (shameless plug): monitoriamo automaticamente stato backup di tutti i siti clienti, alert se backup fallisce o supera 24h senza esecuzione. Integrazione con monitoraggio uptime e performance.
Alert da configurare
- Backup fallito (invio email + Slack)
- Backup non eseguito da >24 ore
- Dimensione backup aumentata >30% rispetto a media (possibile malware o log inflati)
- Errori durante ripristino test trimestrale
- Storage backup >80% pieno
Documentazione per ogni cliente
Mantieni documento aggiornato (Google Doc o Notion) con:
- URL backup storage (S3 bucket, Dropbox, server FTP)
- Credenziali accesso (in password manager condiviso)
- Frequenza backup (full + incrementali)
- Procedura ripristino step-by-step
- Ultimo test ripristino effettuato (data + esito)
- Tempo stimato per restore completo
Questo documento va condiviso con cliente e aggiornato ogni 6 mesi.
Costi reali di una strategia backup completa
Per uno shop WooCommerce medio (5GB database + 50GB file):
- Plugin backup premium: 70-150€/anno (UpdraftPlus, BackWPup Pro)
- Storage S3/Wasabi: ~5€/mese per 500GB con retention 30gg
- VPS/server per test restore: 10-20€/mese (se non usi staging su stesso server)
- Tempo agenzia: ~2 ore/mese per monitoraggio + test = 100-200€/mese a seconda del tuo hourly rate
Totale: 150-300€/mese per backup production-grade.
Sembrano tanti? Il costo medio di downtime per e-commerce è 300-500€/ora (fonte: Gartner 2025). Un disaster recovery rapido si ripaga alla prima emergenza.
Checklist finale: backup WooCommerce senza errori
Salva questa checklist e verificala ogni trimestre:
- ✅ Backup full database + file almeno 1x al giorno
- ✅ Backup incrementale tabelle WooCommerce ogni 4-6 ore (per shop >50 ordini/giorno)
- ✅ Verifica inclusione tabelle HPOS se attivo (wp_wc_orders, wp_wc_order_addresses)
- ✅ Backup criptato con AES-256
- ✅ Storage remoto (S3, Wasabi, Google Cloud) geograficamente separato dal server produzione
- ✅ Retention policy conforme GDPR (30-60gg)
- ✅ Test ripristino completo almeno ogni 3 mesi
- ✅ Documentazione procedure aggiornata
- ✅ Alert automatici su backup falliti
- ✅ Export CSV prodotti settimanale
- ✅ Backup pre e post ogni aggiornamento major WooCommerce o WordPress
- ✅ Accesso backup limitato a personale autorizzato con log accessi
Se manca anche solo uno di questi punti, sei a rischio. Sistemalo prima che serva davvero.
FAQ
Quanto deve essere frequente il backup per un WooCommerce con 100 ordini al giorno?
Per 100 ordini/giorno (circa 4-5 ordini/ora) consiglio backup full database ogni 12 ore e backup incrementale delle sole tabelle ordini ogni 3-4 ore. In caso di disaster nel momento peggiore perderesti max 10-15 ordini, recuperabili manualmente da email e gateway. Sotto i 50 ordini/giorno è sufficiente un backup giornaliero notturno. Sopra i 200 ordini/giorno valuta soluzioni real-time con replica database.
I backup di UpdraftPlus includono automaticamente tutte le tabelle WooCommerce?
Sì, UpdraftPlus in configurazione standard include tutte le tabelle del database, quindi anche quelle WooCommerce. Tuttavia devi verificare due cose: 1) che nella sezione “Impostazioni avanzate” non siano escluse tabelle specifiche, 2) se usi HPOS (High-Performance Order Storage), assicurati di avere UpdraftPlus 1.23.0+ che supporta esplicitamente le nuove tabelle wp_wc_orders. Ho visto backup corrotti in installazioni migrate a HPOS con versioni vecchie di UpdraftPlus.
Come faccio a sapere se il mio WooCommerce usa HPOS o il sistema legacy CPT?
Vai in WooCommerce → Impostazioni → Avanzate → Funzionalità. Cerca la voce “High-Performance Order Storage”. Se è abilitata, gli ordini sono in wp_wc_orders e wp_wc_order_addresses. Se disabilitata o non vedi l’opzione, usa ancora il sistema legacy con ordini in wp_posts (post_type = shop_order). Puoi anche verificare via database: se la tabella wp_wc_orders esiste e contiene righe, HPOS è attivo. Questo impatta direttamente quali tabelle deve includere il tuo backup.
Posso usare il backup WordPress standard per ripristinare solo alcuni ordini cancellati per errore?
Sì, ma richiede un processo manuale. Devi: 1) importare il backup completo in un database temporaneo separato, 2) identificare gli order ID da recuperare, 3) estrarre manualmente le righe correlate da tutte le tabelle coinvolte (wp_posts, wp_postmeta, wp_woocommerce_order_items, wp_woocommerce_order_itemmeta e se HPOS anche wp_wc_orders), 4) re-importarle nel database di produzione usando INSERT con controllo per evitare duplicati. Serve competenza SQL. Plugin come WP Migrate DB Pro possono semplificare il processo per singole tabelle, ma non esiste un “undelete” automatico per ordini WooCommerce.
Quanto spazio serve per conservare 30 giorni di backup di un WooCommerce medio?
Dipende molto dalla dimensione dello shop. Per un WooCommerce medio (5GB database, 50GB immagini/file): con backup full giornaliero compressi occupi circa 15-20GB/giorno (compressione gzip riduce del 60-70%). Per 30 giorni = 450-600GB. Se aggiungi backup incrementali ogni 6 ore (solo database, ~2GB compressi) per 4 snapshot/giorno = altri 240GB/mese. Totale realistico: 700-850GB/mese. Su Wasabi (storage S3-compatibile economico) costa circa 5-6€/mese. Su AWS S3 standard circa 18-20€/mese. Consiglio Wasabi o Backblaze B2 per backup, AWS solo se hai già infrastruttura lì.