MASIGNCLEAN102

Backup & Restore Database Odoo 19 dengan pg_dump dan pg_restore (Lengkap, 2025)

Backup & Restore Database Odoo 19 dengan pg_dump dan pg_restore (Lengkap, 2025)

Thumbnail tutorial backup dan restore database Odoo 19 menggunakan pg_dump dan pg_restore
Skema ringkas proses backup & restore Odoo 19.

Odoo 19 menggunakan PostgreSQL sebagai database. Karena itu, cara paling aman dan cepat untuk mencadangkan (backup) serta memulihkan (restore) adalah memakai utilitas bawaan PostgreSQL: pg_dump dan pg_restore. Artikel ini memandu Anda langkah demi langkah untuk Linux/Ubuntu dan Windows, lengkap dengan opsi kompresi, penjadwalan otomatis, serta backup filestore (lampiran/attachment) Odoo.

Prasyarat

  • PostgreSQL 14+ terpasang dan utilitas pg_dump/pg_restore tersedia di PATH.
  • Nama database Odoo (misal: odoo19_db) dan user database (misal: odoo19 atau postgres).
  • Akses terminal/Command Prompt dengan hak yang sesuai.

Catatan: pg_dump melakukan backup konsisten tanpa perlu mematikan Odoo berkat MVCC PostgreSQL. Namun, untuk sistem produksi sibuk, sebaiknya lakukan di luar jam operasional.

Jenis & Format Backup

  • Custom format (-Fc): fleksibel, dapat direstore sebagian, mendukung kompresi. (Direkomendasikan)
  • Plain SQL: file .sql yang bisa di-psql langsung, ukuran lebih besar, kurang fleksibel.

Backup di Linux/Ubuntu

1) Custom format (direkomendasikan)

# Variabel contoh
DB=odoo19_db
USER=postgres
HOST=localhost
OUT=~/backup/${DB}_$(date +%F_%H%M).dump

# Backup custom format + kompresi
pg_dump -U "$USER" -h "$HOST" -d "$DB" -Fc -Z 9 -f "$OUT"
echo "Backup tersimpan di: $OUT"

2) Plain SQL

pg_dump -U postgres -h localhost -d odoo19_db -f ~/backup/odoo19_db_$(date +%F).sql

3) Backup beberapa database sekaligus

for DB in odoo19_prod odoo19_staging; do
  pg_dump -U postgres -Fc -Z 9 -f ~/backup/${DB}_$(date +%F).dump -d "$DB"
done

Backup di Windows

Jalankan dari Command Prompt atau PowerShell dengan direktori bin PostgreSQL di PATH (contoh: C:\Program Files\PostgreSQL\15\bin).

$date = Get-Date -Format "yyyy-MM-dd_HHmm"
$DB   = "odoo19_db"
$OUT  = "C:\backup\${DB}_$date.dump"
pg_dump.exe -U postgres -h localhost -d $DB -Fc -Z 9 -f $OUT
Write-Host "Backup tersimpan di $OUT"

Backup Filestore Odoo (Lampiran/Attachment)

Selain database, Odoo menyimpan file lampiran di filestore. Lokasi umum:

  • Instalasi paket Debian/Ubuntu: /var/lib/odoo/.local/share/Odoo/filestore/<nama_db>
  • Instalasi user lokal: ~/.local/share/Odoo/filestore/<nama_db>
  • Windows: %APPDATA%\Odoo\filestore\<nama_db>

Backup filestore (Linux):

DB=odoo19_db
SRC=~/.local/share/Odoo/filestore/$DB
tar -czf ~/backup/${DB}_filestore_$(date +%F).tar.gz -C "$(dirname "$SRC")" "$(basename "$SRC")"

Restore Database Odoo 19

A. Persiapan database kosong

Buat database kosong dengan encoding UTF-8 dan aktifkan ekstensi yang umum dipakai Odoo (opsional tapi disarankan):

# Buat DB kosong
createdb -U postgres -E UTF8 -T template0 -O odoo19 odoo19_restored

# Masuk psql untuk menyiapkan ekstensi (opsional)
psql -U postgres -d odoo19_restored -c "CREATE EXTENSION IF NOT EXISTS unaccent;"
psql -U postgres -d odoo19_restored -c "CREATE EXTENSION IF NOT EXISTS pg_trgm;"

B. Restore dari custom dump (.dump)

pg_restore -U postgres -d odoo19_restored \
  --no-owner --role=odoo19 -j 4 /path/to/odoo19_db_YYYY-MM-DD.dump

Keterangan: --no-owner mencegah konflik kepemilikan objek; --role=odoo19 menetapkan pemilik baru. -j 4 paralel 4 proses (sesuaikan CPU).

C. Restore dari plain SQL (.sql)

psql -U postgres -d odoo19_restored -f /path/to/odoo19_db_YYYY-MM-DD.sql

D. Pulihkan filestore

Ekstrak arsip filestore ke lokasi filestore target dengan nama database yang sama:

DB=odoo19_restored
DEST=~/.local/share/Odoo/filestore
mkdir -p "$DEST"
tar -xzf ~/backup/${DB%_restored}_filestore_YYYY-MM-DD.tar.gz -C "$DEST"
# Pastikan folder hasilnya bernama persis $DB jika Anda restore untuk DB baru
mv "$DEST/${DB%_restored}" "$DEST/$DB" 2>/dev/null || true

Setelah database dan filestore siap, jalankan Odoo dan pilih database hasil restore pada layar login.

Menjadwalkan Backup Otomatis

Linux: cron harian jam 02:00

crontab -e
# Tambahkan baris berikut (ubah path sesuai)
0 2 * * * /usr/bin/pg_dump -U postgres -h localhost -d odoo19_db -Fc -Z 9 -f /var/backups/odoo/odoo19_db_$(date +\%F).dump

Windows: Task Scheduler

  1. Buat Basic Task harian.
  2. Action: Start a program.
  3. Program/script: pg_dump.exe · Add arguments: -U postgres -h localhost -d odoo19_db -Fc -Z 9 -f "C:\backup\odoo19_db_%DATE%.dump"

Tips Keamanan & Best Practice

  • Uji restore berkala. Backup tanpa uji restore = asumsi berisiko.
  • Enkripsi & offsite. Simpan salinan di lokasi berbeda (cloud/objek storage) dan enkripsi (mis. gpg).
  • Rotasi retensi. Simpan harian 7 hari, mingguan 4 pekan, bulanan 6–12 bulan (sesuaikan kebijakan).
  • Minimalkan downtime. Gunakan -j pada pg_restore dan lakukan di jam sepi.
  • Jangan lupa filestore. Banyak restore gagal karena filestore tidak dibackup.

Troubleshooting Umum

  • ERROR: permission denied for schema public → Tambahkan --no-owner --role=odoo19 saat pg_restore atau atur pemilik dengan ALTER DATABASE.
  • Encoding/Collation tidak cocok → Buat DB dengan -E UTF8 -T template0 sebelum restore.
  • Ekstensi hilang → Jalankan CREATE EXTENSION unaccent/pg_trgm di DB target.
  • File terlalu besar → Gunakan custom format -Fc dengan kompresi -Z 9, atau kompres arsip menggunakan zstd/gzip.
  • Odoo tidak menemukan lampiran → Pastikan folder filestore sesuai nama database hasil restore.

FAQ Singkat

Apakah perlu menghentikan layanan Odoo saat backup?

Tidak wajib. pg_dump konsisten terhadap transaksi berjalan. Namun, untuk beban tinggi, lakukan di luar jam sibuk agar dump lebih cepat.

Mana yang lebih baik, custom dump atau plain SQL?

Custom dump (-Fc) umumnya terbaik: ukuran lebih kecil, bisa paralel restore, dan fleksibel memilih objek.

Bagaimana memastikan backup valid?

Lakukan test restore di server staging, cek login, data master, laporan, serta lampiran dari filestore.

Share This :
Funtechsy